55 lines
1.1 KiB
Go
55 lines
1.1 KiB
Go
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{},
|
|
&SaInboxItem{},
|
|
&SaInboxSuggestion{},
|
|
&SaTask{},
|
|
&SaNote{},
|
|
&SaSource{},
|
|
&SaAIExpertCategory{},
|
|
&SaAIExpertItem{},
|
|
&SaAISession{},
|
|
&SaTag{},
|
|
&SaProjectChannel{},
|
|
&SaCronPlan{},
|
|
&SaProjectEvent{},
|
|
&SaAIKey{},
|
|
&SaAICallLog{},
|
|
&SaAIRateBucket{},
|
|
&SaTaskShare{},
|
|
); err != nil {
|
|
return err
|
|
}
|
|
return runVersionedMigrations(cleanDatabase)
|
|
}
|