* feat(canvas): 短剧项目空间 - 建立项目章节与画布关联 MVP * feat(canvas): 短剧项目空间 - 完善项目资产、镜头与流程闭环 Refs #30 * fix(deploy): 本地部署 - 修复前端构建并忽略本地 PostgreSQL 配置 * feat(*): 短剧项目空间 - 完成项目、章节、资产、角色与画布创作闭环 Refs #30 --------- Co-authored-by: ddCat <ddcat666@88.com>
76 lines
2.0 KiB
Go
76 lines
2.0 KiB
Go
package database
|
|
|
|
import (
|
|
"infinite-canvas/backend/internal/model"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// Models 是应用持久化表的唯一清单,服务启动和跨数据库迁移必须共用它。
|
|
func Models() []any {
|
|
return []any{
|
|
&model.User{},
|
|
&model.AuthSession{},
|
|
&model.UserIdentity{},
|
|
&model.OAuthState{},
|
|
&model.EmailVerificationCode{},
|
|
&model.ModelChannel{},
|
|
&model.ChannelModel{},
|
|
&model.ApiCallLog{},
|
|
&model.ModelPricing{},
|
|
&model.CreditAccount{},
|
|
&model.CreditLedgerEntry{},
|
|
&model.BillingOrder{},
|
|
&model.RedeemBatch{},
|
|
&model.RedeemCode{},
|
|
&model.AdminAuditEvent{},
|
|
&model.UserDailyActivity{},
|
|
&model.SystemSetting{},
|
|
&model.UserOSSSetting{},
|
|
&model.UserDailyUploadUsage{},
|
|
&model.UserSkillState{},
|
|
&model.Resource{},
|
|
&model.Asset{},
|
|
&model.ProjectAssetLink{},
|
|
&model.ProjectAssetCandidate{},
|
|
&model.AssetVersion{},
|
|
&model.AssetRepresentation{},
|
|
&model.VoiceProfile{},
|
|
&model.CharacterVoiceBinding{},
|
|
&model.Project{},
|
|
&model.ProjectUnit{},
|
|
&model.CanvasUnitLink{},
|
|
&model.Shot{},
|
|
&model.ShotAssetReference{},
|
|
&model.WorkflowTemplateVersion{},
|
|
&model.WorkflowInstance{},
|
|
&model.WorkflowStepInstance{},
|
|
&model.WorkflowStepTask{},
|
|
&model.CanvasProject{},
|
|
&model.CanvasShare{},
|
|
&model.StoryboardPromptTemplate{},
|
|
&model.Announcement{},
|
|
&model.UserAnnouncementRead{},
|
|
&model.Task{},
|
|
&model.Session{},
|
|
&model.Message{},
|
|
&model.TaskLog{},
|
|
&model.SessionFile{},
|
|
&model.Result{},
|
|
}
|
|
}
|
|
|
|
func MigrateSchema(db *gorm.DB) error {
|
|
if err := db.AutoMigrate(Models()...); err != nil {
|
|
return err
|
|
}
|
|
// 逻辑删除后的同名模型允许重新添加,旧唯一索引不能继续覆盖已删除记录。
|
|
if err := db.Exec("DROP INDEX IF EXISTS idx_channel_model_key").Error; err != nil {
|
|
return err
|
|
}
|
|
if err := db.Exec("DROP INDEX IF EXISTS idx_users_email").Error; err != nil {
|
|
return err
|
|
}
|
|
return db.Exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_users_email_nonempty ON users(lower(email)) WHERE email <> ''").Error
|
|
}
|