mirror of
https://github.com/Awuqing/BackupX.git
synced 2026-08-28 19:47:27 +08:00
fix: preserve successful storage target updates
This commit is contained in:
@@ -115,7 +115,9 @@ func (r *GormBackupRecordRepository) Create(ctx context.Context, item *model.Bac
|
||||
}
|
||||
|
||||
func (r *GormBackupRecordRepository) Update(ctx context.Context, item *model.BackupRecord) error {
|
||||
return r.db.WithContext(ctx).Save(item).Error
|
||||
// Task 与 StorageTarget 是查询时预加载的只读关联。更新记录字段时忽略它们,
|
||||
// 避免已加载的旧关联把刚修改的外键(例如首个成功上传目标)覆盖回去。
|
||||
return r.db.WithContext(ctx).Omit("Task", "StorageTarget").Save(item).Error
|
||||
}
|
||||
|
||||
func (r *GormBackupRecordRepository) Delete(ctx context.Context, id uint) error {
|
||||
|
||||
@@ -88,6 +88,21 @@ func TestBackupRecordRepositoryQueries(t *testing.T) {
|
||||
if recent[0].StorageTarget.Name != "local" {
|
||||
t.Fatalf("expected recent storage target to be preloaded, got %#v", recent[0].StorageTarget)
|
||||
}
|
||||
secondTarget := &model.StorageTarget{Name: "secondary", Type: "local_disk", Enabled: true, ConfigCiphertext: "{}", ConfigVersion: 1, LastTestStatus: "unknown"}
|
||||
if err := repo.db.Create(secondTarget).Error; err != nil {
|
||||
t.Fatalf("seed second storage target error: %v", err)
|
||||
}
|
||||
stored.StorageTargetID = secondTarget.ID
|
||||
if err := repo.Update(ctx, stored); err != nil {
|
||||
t.Fatalf("Update storage target ID returned error: %v", err)
|
||||
}
|
||||
updated, err := repo.FindByID(ctx, record.ID)
|
||||
if err != nil {
|
||||
t.Fatalf("FindByID after update returned error: %v", err)
|
||||
}
|
||||
if updated == nil || updated.StorageTargetID != secondTarget.ID || updated.StorageTarget.Name != "secondary" {
|
||||
t.Fatalf("expected updated storage target to remain %d, got %#v", secondTarget.ID, updated)
|
||||
}
|
||||
total, err := repo.Count(ctx)
|
||||
if err != nil {
|
||||
t.Fatalf("Count returned error: %v", err)
|
||||
|
||||
Reference in New Issue
Block a user