package repo import ( "context" "chatapp3-golang/internal/config" "chatapp3-golang/internal/model" "github.com/redis/go-redis/v9" "gorm.io/driver/mysql" "gorm.io/gorm" ) type Repository struct { DB *gorm.DB Redis *redis.Client } func New(cfg config.Config) (*Repository, error) { db, err := gorm.Open(mysql.Open(cfg.MySQLDSN), &gorm.Config{}) if err != nil { return nil, err } client := redis.NewClient(&redis.Options{ Addr: cfg.RedisAddr, Password: cfg.RedisPassword, DB: cfg.RedisDB, }) return &Repository{DB: db, Redis: client}, nil } func (r *Repository) Ping(ctx context.Context) error { if err := r.Redis.Ping(ctx).Err(); err != nil { return err } sqlDB, err := r.DB.DB() if err != nil { return err } return sqlDB.PingContext(ctx) } func (r *Repository) AutoMigrate() error { return r.DB.AutoMigrate( &model.InviteCampaignConfig{}, &model.InviteCampaignRewardRule{}, &model.InviteCampaignRelation{}, &model.InviteCampaignInviteeProgress{}, &model.InviteCampaignMonthlyProgress{}, &model.InviteCampaignTaskClaim{}, &model.InviteCampaignRewardLog{}, &model.InviteCampaignRechargeEvent{}, &model.SysGameListVendorExt{}, &model.BaishunGameCatalog{}, &model.BaishunLaunchSession{}, &model.BaishunOrderIdempotency{}, &model.BaishunCallbackLog{}, &model.BaishunRoomState{}, ) }