diff --git a/server/src/interfaces/asset.interface.ts b/server/src/interfaces/asset.interface.ts index 2296091064..f6254fc850 100644 --- a/server/src/interfaces/asset.interface.ts +++ b/server/src/interfaces/asset.interface.ts @@ -172,5 +172,5 @@ export interface IAssetRepository { upsertFiles(files: UpsertFileOptions[]): Promise; detectOfflineExternalAssets(library: LibraryEntity): Promise; filterNewExternalAssetPaths(libraryId: string, paths: string[]): Promise; - getAssetCount(options: AssetSearchOptions): Promise; + getLibraryAssetCount(options: AssetSearchOptions): Promise; } diff --git a/server/src/repositories/asset.repository.ts b/server/src/repositories/asset.repository.ts index abd827213d..72027288bc 100644 --- a/server/src/repositories/asset.repository.ts +++ b/server/src/repositories/asset.repository.ts @@ -794,11 +794,15 @@ export class AssetRepository implements IAssetRepository { return result.map((row) => row.path as string); } - async getAssetCount(options: AssetSearchOptions = {}): Promise { - const { count } = await searchAssetBuilder(this.db, options) - .select(sql`COUNT(*) OVER ()`.as('count')) + async getLibraryAssetCount(options: AssetSearchOptions = {}): Promise { + const { count } = await this.db + .selectFrom('assets') + .select(sql`COUNT(*)`.as('count')) + .where('libraryId', '=', asUuid(options.libraryId!)) .executeTakeFirstOrThrow(); + console.log(count); + return count as number; } } diff --git a/server/src/services/library.service.spec.ts b/server/src/services/library.service.spec.ts index f4c02c4805..9e75972411 100644 --- a/server/src/services/library.service.spec.ts +++ b/server/src/services/library.service.spec.ts @@ -227,7 +227,7 @@ describe(LibraryService.name, () => { libraryMock.get.mockResolvedValue(libraryStub.externalLibrary1); storageMock.walk.mockImplementation(async function* generator() {}); assetMock.getAll.mockResolvedValue({ items: [assetStub.external], hasNextPage: false }); - assetMock.getAssetCount.mockResolvedValue(1); + assetMock.getLibraryAssetCount.mockResolvedValue(1); assetMock.detectOfflineExternalAssets.mockResolvedValue({ numUpdatedRows: BigInt(1) }); const response = await sut.handleQueueSyncAssets({ id: libraryStub.externalLibrary1.id }); @@ -240,7 +240,7 @@ describe(LibraryService.name, () => { libraryMock.get.mockResolvedValue(libraryStub.externalLibrary1); storageMock.walk.mockImplementation(async function* generator() {}); assetMock.getAll.mockResolvedValue({ items: [assetStub.external], hasNextPage: false }); - assetMock.getAssetCount.mockResolvedValue(0); + assetMock.getLibraryAssetCount.mockResolvedValue(0); assetMock.detectOfflineExternalAssets.mockResolvedValue({ numUpdatedRows: BigInt(1) }); const response = await sut.handleQueueSyncAssets({ id: libraryStub.externalLibrary1.id }); @@ -253,7 +253,7 @@ describe(LibraryService.name, () => { libraryMock.get.mockResolvedValue(libraryStub.externalLibraryWithImportPaths1); storageMock.walk.mockImplementation(async function* generator() {}); assetMock.getAll.mockResolvedValue({ items: [assetStub.external], hasNextPage: false }); - assetMock.getAssetCount.mockResolvedValue(1); + assetMock.getLibraryAssetCount.mockResolvedValue(1); assetMock.detectOfflineExternalAssets.mockResolvedValue({ numUpdatedRows: BigInt(0) }); assetMock.getAllInLibrary.mockResolvedValue({ items: [assetStub.external], hasNextPage: false }); @@ -584,10 +584,10 @@ describe(LibraryService.name, () => { describe('getStatistics', () => { it('should return library statistics', async () => { - assetMock.getAssetCount.mockResolvedValue(10); + assetMock.getLibraryAssetCount.mockResolvedValue(10); await expect(sut.getStatistics(libraryStub.externalLibrary1.id)).resolves.toEqual(10); - expect(assetMock.getAssetCount).toHaveBeenCalledWith({ libraryId: libraryStub.externalLibrary1.id }); + expect(assetMock.getLibraryAssetCount).toHaveBeenCalledWith({ libraryId: libraryStub.externalLibrary1.id }); }); }); diff --git a/server/src/services/library.service.ts b/server/src/services/library.service.ts index 4a9aefd079..200bf540e8 100644 --- a/server/src/services/library.service.ts +++ b/server/src/services/library.service.ts @@ -180,7 +180,7 @@ export class LibraryService extends BaseService { } async getStatistics(id: string): Promise { - const count = await this.assetRepository.getAssetCount({ libraryId: id }); + const count = await this.assetRepository.getLibraryAssetCount({ libraryId: id }); if (count == undefined) { throw new InternalServerErrorException(`Failed to get asset count for library ${id}`); } @@ -682,7 +682,7 @@ export class LibraryService extends BaseService { return JobStatus.SKIPPED; } - const assetCount = await this.assetRepository.getAssetCount({ libraryId: job.id, withDeleted: true }); + const assetCount = await this.assetRepository.getLibraryAssetCount({ libraryId: job.id, withDeleted: true }); if (!assetCount) { this.logger.log(`Library ${library.id} is empty, no need to check assets`); diff --git a/server/test/repositories/asset.repository.mock.ts b/server/test/repositories/asset.repository.mock.ts index 107b81b977..01d73e418d 100644 --- a/server/test/repositories/asset.repository.mock.ts +++ b/server/test/repositories/asset.repository.mock.ts @@ -24,7 +24,7 @@ export const newAssetRepositoryMock = (): Mocked => { getAllByDeviceId: vitest.fn(), getLivePhotoCount: vitest.fn(), getAllInLibrary: vitest.fn(), - getAssetCount: vitest.fn(), + getLibraryAssetCount: vitest.fn(), updateAll: vitest.fn(), updateDuplicates: vitest.fn(), getByLibraryIdAndOriginalPath: vitest.fn(),