From d12b1c907d68a9f9e6e4d459f6367c05f5872f03 Mon Sep 17 00:00:00 2001
From: Alex <alex.tran1502@gmail.com>
Date: Sat, 25 Jan 2025 11:58:07 -0600
Subject: [PATCH] fix(server): bulk update location (#15642)

---
 server/src/services/asset.service.spec.ts | 28 +++++++++++++++++++++++
 server/src/services/asset.service.ts      |  9 +++++++-
 2 files changed, 36 insertions(+), 1 deletion(-)

diff --git a/server/src/services/asset.service.spec.ts b/server/src/services/asset.service.spec.ts
index bf36c181fc..8ff846d39d 100755
--- a/server/src/services/asset.service.spec.ts
+++ b/server/src/services/asset.service.spec.ts
@@ -416,6 +416,34 @@ describe(AssetService.name, () => {
       await sut.updateAll(authStub.admin, { ids: ['asset-1', 'asset-2'], isArchived: true });
       expect(assetMock.updateAll).toHaveBeenCalledWith(['asset-1', 'asset-2'], { isArchived: true });
     });
+
+    it('should not update Assets table if no relevant fields are provided', async () => {
+      accessMock.asset.checkOwnerAccess.mockResolvedValue(new Set(['asset-1']));
+      await sut.updateAll(authStub.admin, {
+        ids: ['asset-1'],
+        latitude: 0,
+        longitude: 0,
+        isArchived: undefined,
+        isFavorite: undefined,
+        duplicateId: undefined,
+        rating: undefined,
+      });
+      expect(assetMock.updateAll).not.toHaveBeenCalled();
+    });
+
+    it('should update Assets table if isArchived field is provided', async () => {
+      accessMock.asset.checkOwnerAccess.mockResolvedValue(new Set(['asset-1']));
+      await sut.updateAll(authStub.admin, {
+        ids: ['asset-1'],
+        latitude: 0,
+        longitude: 0,
+        isArchived: undefined,
+        isFavorite: false,
+        duplicateId: undefined,
+        rating: undefined,
+      });
+      expect(assetMock.updateAll).toHaveBeenCalled();
+    });
   });
 
   describe('deleteAll', () => {
diff --git a/server/src/services/asset.service.ts b/server/src/services/asset.service.ts
index 3913c0ce4c..99ddbb29cc 100644
--- a/server/src/services/asset.service.ts
+++ b/server/src/services/asset.service.ts
@@ -142,7 +142,14 @@ export class AssetService extends BaseService {
       await this.updateMetadata({ id, dateTimeOriginal, latitude, longitude });
     }
 
-    await this.assetRepository.updateAll(ids, options);
+    if (
+      options.isArchived != undefined ||
+      options.isFavorite != undefined ||
+      options.duplicateId != undefined ||
+      options.rating != undefined
+    ) {
+      await this.assetRepository.updateAll(ids, options);
+    }
   }
 
   @OnJob({ name: JobName.ASSET_DELETION_CHECK, queue: QueueName.BACKGROUND_TASK })