支持 S3 兼容对象存储 (#336)
* feat(storage): 支持 S3 对象存储 * fix(storage): 补齐 S3 对象文件后缀
This commit is contained in:
@@ -221,6 +221,12 @@ func migrations() []tableMigration {
|
||||
migrateTable[model.EmailVerificationCode]("email_verification_codes"),
|
||||
migrateTable[model.ModelChannel]("model_channels"),
|
||||
migrateTable[model.ChannelModel]("channel_models"),
|
||||
migrateTable[model.ChannelModelPriceTier]("channel_model_price_tiers"),
|
||||
migrateTable[model.IDSequence]("id_sequences"),
|
||||
migrateTable[model.LogicalModel]("logical_models"),
|
||||
migrateTable[model.LogicalModelRevision]("logical_model_revisions"),
|
||||
migrateTable[model.LogicalModelRoute]("logical_model_routes"),
|
||||
migrateTable[model.RouteAttempt]("route_attempts"),
|
||||
migrateTable[model.ApiCallLog]("api_call_logs"),
|
||||
migrateTable[model.ModelPricing]("model_pricings"),
|
||||
migrateTable[model.CreditAccount]("credit_accounts"),
|
||||
@@ -231,13 +237,19 @@ func migrations() []tableMigration {
|
||||
migrateTable[model.AdminAuditEvent]("admin_audit_events"),
|
||||
migrateTable[model.UserDailyActivity]("user_daily_activities"),
|
||||
migrateTable[model.SystemSetting]("system_settings"),
|
||||
migrateTable[model.PluginPlatformState]("plugin_platform_states"),
|
||||
migrateTable[model.UserPluginState]("user_plugin_states"),
|
||||
migrateTable[model.ArkPrivateAssetBinding]("ark_private_asset_bindings"),
|
||||
migrateTable[model.UserOSSSetting]("user_oss_settings"),
|
||||
migrateTable[model.StorageLocation]("storage_locations"),
|
||||
migrateTable[model.UserDailyUploadUsage]("user_daily_upload_usages"),
|
||||
migrateTable[model.Skill]("skills"),
|
||||
migrateTable[model.UserSkillState]("user_skill_states"),
|
||||
migrateTable[model.Resource]("resources"),
|
||||
migrateTable[model.ResourceDeletionJob]("resource_deletion_jobs"),
|
||||
migrateTable[model.Asset]("assets"),
|
||||
migrateTable[model.ProjectAssetLink]("project_asset_links"),
|
||||
migrateTable[model.ProjectAssetFolder]("project_asset_folders"),
|
||||
migrateTable[model.ProjectAssetCandidate]("project_asset_candidates"),
|
||||
migrateTable[model.AssetVersion]("asset_versions"),
|
||||
migrateTable[model.AssetRepresentation]("asset_representations"),
|
||||
@@ -266,5 +278,7 @@ func migrations() []tableMigration {
|
||||
migrateTable[model.TaskLog]("task_logs"),
|
||||
migrateTable[model.SessionFile]("session_files"),
|
||||
migrateTable[model.Result]("results"),
|
||||
migrateTable[model.ComfyBridge]("comfy_bridges"),
|
||||
migrateTable[model.ComfyBridgeRequest]("comfy_bridge_requests"),
|
||||
}
|
||||
}
|
||||
|
||||
36
backend/cmd/migrate-sqlite-postgres/main_test.go
Normal file
36
backend/cmd/migrate-sqlite-postgres/main_test.go
Normal file
@@ -0,0 +1,36 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"testing"
|
||||
|
||||
"infinite-canvas/backend/internal/database"
|
||||
|
||||
"gorm.io/gorm/schema"
|
||||
)
|
||||
|
||||
func TestMigrationListCoversSchemaModels(t *testing.T) {
|
||||
want := make(map[string]bool, len(database.Models()))
|
||||
cache := &sync.Map{}
|
||||
for _, value := range database.Models() {
|
||||
parsed, err := schema.Parse(value, cache, schema.NamingStrategy{})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
want[parsed.Table] = false
|
||||
}
|
||||
for _, migration := range migrations() {
|
||||
if _, exists := want[migration.name]; !exists {
|
||||
t.Fatalf("migration list contains unknown table %q", migration.name)
|
||||
}
|
||||
if want[migration.name] {
|
||||
t.Fatalf("migration list contains duplicate table %q", migration.name)
|
||||
}
|
||||
want[migration.name] = true
|
||||
}
|
||||
for table, covered := range want {
|
||||
if !covered {
|
||||
t.Errorf("migration list is missing table %q", table)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user