Files
soul-yongping/soul-api/internal/database/database.go

87 lines
4.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package database
import (
"log"
"soul-api/internal/model"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var db *gorm.DB
// Init 使用 DSN 连接 MySQL供 handler 通过 DB() 使用
func Init(dsn string) error {
var err error
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
return err
}
if err := db.AutoMigrate(&model.WechatCallbackLog{}); err != nil {
log.Printf("database: wechat_callback_logs migrate warning: %v", err)
}
if err := db.AutoMigrate(&model.Withdrawal{}); err != nil {
log.Printf("database: withdrawals migrate warning: %v", err)
}
if err := db.AutoMigrate(&model.MatchRecord{}); err != nil {
log.Printf("database: match_records migrate warning: %v", err)
}
if err := db.AutoMigrate(&model.UserAddress{}); err != nil {
log.Printf("database: user_addresses migrate warning: %v", err)
}
if err := db.AutoMigrate(&model.VipRole{}); err != nil {
log.Printf("database: vip_roles migrate warning: %v", err)
}
if err := db.AutoMigrate(&model.Order{}); err != nil {
log.Printf("database: orders migrate warning: %v", err)
}
if err := db.AutoMigrate(&model.Mentor{}); err != nil {
log.Printf("database: mentors migrate warning: %v", err)
}
if err := db.AutoMigrate(&model.MentorConsultation{}); err != nil {
log.Printf("database: mentor_consultations migrate warning: %v", err)
}
if err := db.AutoMigrate(&model.AuthorConfig{}); err != nil {
log.Printf("database: author_config migrate warning: %v", err)
}
if err := db.AutoMigrate(&model.AdminUser{}); err != nil {
log.Printf("database: admin_users migrate warning: %v", err)
}
if err := db.AutoMigrate(&model.UserRule{}); err != nil {
log.Printf("database: user_rules migrate warning: %v", err)
}
seedDefaultRules(db)
log.Println("database: connected")
return nil
}
// DB 返回全局 *gorm.DB仅在 Init 成功后调用
func DB() *gorm.DB {
return db
}
// seedDefaultRules 幂等写入默认用户旅程规则
func seedDefaultRules(db *gorm.DB) {
var count int64
db.Model(&model.UserRule{}).Count(&count)
if count > 0 {
return // 已有规则,跳过
}
defaults := []model.UserRule{
{Title: "注册完成 → 填写头像", Description: "用户完成注册后,引导填写头像和昵称,提升个人信息完整度", Trigger: "注册", Sort: 10, Enabled: true},
{Title: "完成匹配 → 补充个人资料", Description: "用户完成 Soul 派对房匹配后,引导填写 MBTI、行业、职位等详细信息", Trigger: "完成匹配", Sort: 20, Enabled: true},
{Title: "首次浏览章节 → 绑定手机号", Description: "用户点击阅读收费章节时,引导绑定手机号以完成身份验证", Trigger: "点击收费章节", Sort: 30, Enabled: true},
{Title: "付款 ¥1980 → 填写完整信息", Description: "购买全书1980元需填写真实姓名、联系方式、所在行业、MBTI以便进入 VIP 群", Trigger: "完成付款", Sort: 40, Enabled: true},
{Title: "加入派对房 → 填写项目介绍", Description: "进入 Soul 派对房前,引导填写个人项目介绍和核心需求,便于精准匹配", Trigger: "加入派对房", Sort: 50, Enabled: true},
{Title: "浏览 5 个章节 → 分享推广", Description: "用户累计阅读 5 个章节后,触发分享引导,邀请好友可获得收益", Trigger: "累计浏览5章节", Sort: 60, Enabled: true},
{Title: "绑定微信 → 开启分销", Description: "绑定微信后,提示用户开启分销功能,生成专属推广码", Trigger: "绑定微信", Sort: 70, Enabled: true},
{Title: "收益达到 ¥50 → 申请提现", Description: "累计分销收益超过 50 元时,引导用户申请提现", Trigger: "收益满50元", Sort: 80, Enabled: true},
{Title: "完善存客宝信息 → 进入流量池", Description: "引导用户授权存客宝信息同步,进入对应微信流量池,获得精准服务", Trigger: "手动触发", Sort: 90, Enabled: true},
{Title: "浏览导师主页 → 预约咨询", Description: "用户浏览导师详情页超过 30 秒,引导预约一对一咨询", Trigger: "浏览导师页", Sort: 100, Enabled: true},
}
if err := db.CreateInBatches(&defaults, len(defaults)).Error; err != nil {
log.Printf("database: seed user_rules warning: %v", err)
}
}