package models import ( "gorm.io/driver/postgres" "gorm.io/gorm" ) var DBService *gorm.DB func New(dsn string) error { // 启用 Gorm 跨驱动错误翻译,业务层无需解析 Postgres 错误文本或 SQLSTATE。 db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{TranslateError: true}) if err != nil { return err } if err := AutoMigrate(db); err != nil { return err } DBService = db return nil } func AutoMigrate(database *gorm.DB) error { cleanDatabase := database.Session(&gorm.Session{NewDB: true}) if err := cleanDatabase.Transaction(renameLegacyTables); err != nil { return err } if err := cleanDatabase.AutoMigrate( &SaSchemaMigration{}, &SaUser{}, &SaProject{}, &SaDatasetSource{}, &SaDatasetItem{}, &SaDatasetCron{}, &SaInboxItem{}, &SaInboxSuggestion{}, &SaTask{}, &SaNote{}, &SaSource{}, &SaAIExpertCategory{}, &SaAIExpertItem{}, &SaAISession{}, &SaTag{}, &SaProjectChannel{}, &SaCronPlan{}, &SaProjectEvent{}, &SaAIKey{}, &SaAICallLog{}, &SaAIRateBucket{}, &SaTaskShare{}, ); err != nil { return err } return runVersionedMigrations(cleanDatabase) }