From 3750b8b39a328b6d35146ddf5a4f0db6b136c64a Mon Sep 17 00:00:00 2001 From: Catlaxy AI Date: Tue, 6 Oct 2026 09:23:37 +0800 Subject: [PATCH] =?UTF-8?q?fix(platform):=20=E5=85=AC=E5=BC=80=E6=97=A2?= =?UTF-8?q?=E6=9C=89=E8=B4=A6=E5=8F=B7=E6=96=87=E4=BB=B6=E5=AE=B9=E9=87=8F?= =?UTF-8?q?=E4=B8=8A=E9=99=90=20(#684)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Claude Opus 5.5 --- .../platform/runtime_limits_storage_test.go | 55 +++++++++++++++++++ backend/internal/platform/runtime_policy.go | 2 + web/src/services/api/auth.ts | 1 + 3 files changed, 58 insertions(+) create mode 100644 backend/internal/platform/runtime_limits_storage_test.go diff --git a/backend/internal/platform/runtime_limits_storage_test.go b/backend/internal/platform/runtime_limits_storage_test.go new file mode 100644 index 000000000..99561b1d8 --- /dev/null +++ b/backend/internal/platform/runtime_limits_storage_test.go @@ -0,0 +1,55 @@ +package platform + +import ( + "encoding/json" + "testing" + + "infinite-canvas/backend/internal/model" + "infinite-canvas/backend/internal/repository" + + "gorm.io/driver/sqlite" + "gorm.io/gorm" +) + +func TestPublicRuntimeLimitsStoredFileGB(t *testing.T) { + for _, configured := range []bool{false, true} { + db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{}) + if err != nil { + t.Fatal(err) + } + sqlDB, err := db.DB() + if err != nil { + t.Fatal(err) + } + t.Cleanup(func() { _ = sqlDB.Close() }) + if err := db.AutoMigrate(&model.SystemSetting{}); err != nil { + t.Fatal(err) + } + policy := DefaultRuntimePolicy() + if configured { + policy.Resource.StoredFileGB = 37 + data, err := json.Marshal(policy) + if err != nil { + t.Fatal(err) + } + if err := db.Create(&model.SystemSetting{Key: runtimePolicySettingKey, ValueJSON: string(data)}).Error; err != nil { + t.Fatal(err) + } + } + limits, err := New(repository.New(db), nil, nil).PublicRuntimeLimits() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(limits) + if err != nil { + t.Fatal(err) + } + var fields map[string]any + if err := json.Unmarshal(data, &fields); err != nil { + t.Fatal(err) + } + if got := fields["storedFileGB"]; got != float64(policy.Resource.StoredFileGB) { + t.Errorf("configured=%v: storedFileGB = %v, want %d; JSON=%s", configured, got, policy.Resource.StoredFileGB, data) + } + } +} diff --git a/backend/internal/platform/runtime_policy.go b/backend/internal/platform/runtime_policy.go index ebe683a61..0aab85d71 100644 --- a/backend/internal/platform/runtime_policy.go +++ b/backend/internal/platform/runtime_policy.go @@ -137,6 +137,7 @@ type PublicRuntimePolicySetting struct { type PublicRuntimeLimits struct { ActiveTaskLimit int `json:"activeTaskLimit"` ResourceUploadMB int64 `json:"resourceUploadMB"` + StoredFileGB int64 `json:"storedFileGB"` RecycleBinRetentionDays int `json:"recycleBinRetentionDays"` } @@ -274,6 +275,7 @@ func (s *Service) PublicRuntimeLimits() (*PublicRuntimeLimits, error) { } return &PublicRuntimeLimits{ ActiveTaskLimit: policy.Task.ActiveTaskLimit, ResourceUploadMB: policy.Resource.ResourceUploadMB, + StoredFileGB: policy.Resource.StoredFileGB, RecycleBinRetentionDays: policy.Resource.RecycleBinRetentionDays, }, nil } diff --git a/web/src/services/api/auth.ts b/web/src/services/api/auth.ts index c86713e8a..b60df7abc 100644 --- a/web/src/services/api/auth.ts +++ b/web/src/services/api/auth.ts @@ -48,6 +48,7 @@ export type AuthSessionPayload = { export type RuntimeLimits = { activeTaskLimit: number; resourceUploadMB: number; + storedFileGB: number; recycleBinRetentionDays?: number; };