package database import ( "golang.org/x/crypto/bcrypt" "gorm.io/gorm" "github.com/sundynix/pets-be/internal/config" "github.com/sundynix/pets-be/internal/model" ) // Seed 初始化种子数据:管理员账号 + 新手文章 func Seed(db *gorm.DB, cfg *config.Config) error { if err := seedAdmin(db, cfg); err != nil { return err } return seedArticles(db) } func seedAdmin(db *gorm.DB, cfg *config.Config) error { var count int64 if err := db.Model(&model.Admin{}).Where("username = ?", cfg.Admin.Username).Count(&count).Error; err != nil { return err } if count > 0 { return nil } hash, err := bcrypt.GenerateFromPassword([]byte(cfg.Admin.Password), bcrypt.DefaultCost) if err != nil { return err } return db.Create(&model.Admin{ Username: cfg.Admin.Username, PasswordHash: string(hash), Role: "admin", }).Error } func seedArticles(db *gorm.DB) error { var count int64 if err := db.Model(&model.Article{}).Count(&count).Error; err != nil { return err } if count > 0 { return nil } articles := []model.Article{ {Icon: "💉", Title: "幼猫疫苗和驱虫怎么安排?", Description: "适合搜索流量和社群传播,引导生成提醒。", Category: "vaccine", RelatedSheetType: "vaccine", Published: true}, {Icon: "💩", Title: "猫咪软便要不要去医院?", Description: "接异常记录和 AI 观察建议。", Category: "symptom", RelatedSheetType: "symptom", Published: true}, {Icon: "🍽️", Title: "7 天换粮计划怎么做?", Description: "接计划模板,适合一次性付费。", Category: "food", RelatedSheetType: "applyPlan", Published: true}, {Icon: "💰", Title: "一个月养猫大概花多少钱?", Description: "接养宠账本和年度账单。", Category: "cost", RelatedSheetType: "cost", Published: true}, } return db.Create(&articles).Error }