package database import ( "fmt" "log" "time" "ai_xhs/config" "ai_xhs/models" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" ) var DB *gorm.DB // InitDB 初始化数据库连接 func InitDB() error { cfg := config.AppConfig.Database dsn := cfg.GetDSN() var err error DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: logger.Default.LogMode(logger.Info), }) if err != nil { return fmt.Errorf("数据库连接失败: %w", err) } sqlDB, err := DB.DB() if err != nil { return fmt.Errorf("获取数据库实例失败: %w", err) } // 设置连接池 sqlDB.SetMaxIdleConns(cfg.MaxIdleConns) sqlDB.SetMaxOpenConns(cfg.MaxOpenConns) sqlDB.SetConnMaxLifetime(time.Duration(cfg.ConnMaxLifetime) * time.Second) log.Println("数据库连接成功") return nil } // AutoMigrate 自动迁移数据库表 func AutoMigrate() error { // 注意:由于使用现有数据库,这里只做模型注册,不执行实际迁移 // 如果需要同步表结构,请手动执行 AutoMigrate err := DB.AutoMigrate( &models.Enterprise{}, &models.User{}, &models.Product{}, &models.Article{}, &models.PublishRecord{}, &models.ArticleImage{}, &models.ArticleTag{}, &models.Log{}, // &models.XHSAccount{}, // 不再使用,小红书信息直接存储在 ai_users 表中 ) if err != nil { return fmt.Errorf("数据库表迁移失败: %w", err) } log.Println("数据库表迁移成功") return nil } // Close 关闭数据库连接 func Close() error { sqlDB, err := DB.DB() if err != nil { return err } return sqlDB.Close() }