From 0d9ba2c33a4a978cbed80394f4ac44cd84f710d3 Mon Sep 17 00:00:00 2001 From: truewhile <62226914+truewhile@users.noreply.github.com> Date: Wed, 19 Aug 2026 22:33:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E5=88=A0=E5=BA=93=E9=87=8D?= =?UTF-8?q?=E5=BB=BA=E5=BA=93=E6=B2=A1=E6=9C=89=E5=AA=92=E4=BD=93=E6=95=B0?= =?UTF-8?q?=E6=8D=AEbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 本地文件入库媒体库删除后重新入库导致0条目bug --- internal/service/media_cloud_test.go | 7 +++++++ internal/service/media_library.go | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/internal/service/media_cloud_test.go b/internal/service/media_cloud_test.go index 0f89d68..c6dbda9 100644 --- a/internal/service/media_cloud_test.go +++ b/internal/service/media_cloud_test.go @@ -51,6 +51,13 @@ func TestDeleteLibraryHardDeletesLibraryRoots(t *testing.T) { if visibleLibraryCount != 0 { t.Fatalf("deleted library should not remain visible, count=%d", visibleLibraryCount) } + var mediaCount int64 + if err := db.Unscoped().Model(&model.Media{}).Where("library_id = ?", lib.ID).Count(&mediaCount).Error; err != nil { + t.Fatal(err) + } + if mediaCount != 0 { + t.Fatalf("local library media rows should be hard deleted, count=%d", mediaCount) + } } func TestDeleteCloudLibraryPurgesMountWithoutRecycleBin(t *testing.T) { diff --git a/internal/service/media_library.go b/internal/service/media_library.go index b2f2f6b..ffb6948 100644 --- a/internal/service/media_library.go +++ b/internal/service/media_library.go @@ -37,7 +37,10 @@ func (s *MediaService) DeleteLibrary(ctx context.Context, id string) error { } } err = s.repo.DB.WithContext(ctx).Transaction(func(tx *gorm.DB) error { - if err := tx.Where("library_id = ?", id).Delete(&model.Media{}).Error; err != nil { + // 本地库媒体行统一硬删除(与云库分支一致):删库即彻底清空该库的 + // media 行,避免重扫时旧行被 upsert 复活却仍挂在已删库下,导致重建 + // 同名库后条目始终为 0。只作用于数据库表行,磁盘文件不受影响。 + if err := tx.Unscoped().Where("library_id = ?", id).Delete(&model.Media{}).Error; err != nil { return err } if err := hardDeleteLibraryRoots(ctx, tx, id); err != nil {