mirror of
https://github.com/immich-app/immich.git
synced 2024-11-28 09:33:27 +02:00
fix: remove duplicateIds on unique assets (#13752)
This commit is contained in:
parent
d34d92dca3
commit
380fc06979
@ -31,11 +31,23 @@ describe(SearchService.name, () => {
|
|||||||
|
|
||||||
describe('getDuplicates', () => {
|
describe('getDuplicates', () => {
|
||||||
it('should get duplicates', async () => {
|
it('should get duplicates', async () => {
|
||||||
assetMock.getDuplicates.mockResolvedValue([assetStub.hasDupe]);
|
assetMock.getDuplicates.mockResolvedValue([assetStub.hasDupe, assetStub.hasDupe]);
|
||||||
await expect(sut.getDuplicates(authStub.admin)).resolves.toEqual([
|
await expect(sut.getDuplicates(authStub.admin)).resolves.toEqual([
|
||||||
{ duplicateId: assetStub.hasDupe.duplicateId, assets: [expect.objectContaining({ id: assetStub.hasDupe.id })] },
|
{
|
||||||
|
duplicateId: assetStub.hasDupe.duplicateId,
|
||||||
|
assets: [
|
||||||
|
expect.objectContaining({ id: assetStub.hasDupe.id }),
|
||||||
|
expect.objectContaining({ id: assetStub.hasDupe.id }),
|
||||||
|
],
|
||||||
|
},
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should update assets with duplicateId', async () => {
|
||||||
|
assetMock.getDuplicates.mockResolvedValue([assetStub.hasDupe]);
|
||||||
|
await expect(sut.getDuplicates(authStub.admin)).resolves.toEqual([]);
|
||||||
|
expect(assetMock.updateAll).toHaveBeenCalledWith([assetStub.hasDupe.id], { duplicateId: null });
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('handleQueueSearchDuplicates', () => {
|
describe('handleQueueSearchDuplicates', () => {
|
||||||
|
@ -16,8 +16,24 @@ import { usePagination } from 'src/utils/pagination';
|
|||||||
export class DuplicateService extends BaseService {
|
export class DuplicateService extends BaseService {
|
||||||
async getDuplicates(auth: AuthDto): Promise<DuplicateResponseDto[]> {
|
async getDuplicates(auth: AuthDto): Promise<DuplicateResponseDto[]> {
|
||||||
const res = await this.assetRepository.getDuplicates({ userIds: [auth.user.id] });
|
const res = await this.assetRepository.getDuplicates({ userIds: [auth.user.id] });
|
||||||
|
const uniqueAssetIds: string[] = [];
|
||||||
return mapDuplicateResponse(res.map((a) => mapAsset(a, { auth, withStack: true })));
|
const duplicates = mapDuplicateResponse(res.map((a) => mapAsset(a, { auth, withStack: true }))).filter(
|
||||||
|
(duplicate) => {
|
||||||
|
if (duplicate.assets.length === 1) {
|
||||||
|
uniqueAssetIds.push(duplicate.assets[0].id);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
if (uniqueAssetIds.length > 0) {
|
||||||
|
try {
|
||||||
|
await this.assetRepository.updateAll(uniqueAssetIds, { duplicateId: null });
|
||||||
|
} catch (error: any) {
|
||||||
|
this.logger.error(`Failed to remove duplicateId from assets: ${error.message}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return duplicates;
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnJob({ name: JobName.QUEUE_DUPLICATE_DETECTION, queue: QueueName.DUPLICATE_DETECTION })
|
@OnJob({ name: JobName.QUEUE_DUPLICATE_DETECTION, queue: QueueName.DUPLICATE_DETECTION })
|
||||||
|
Loading…
Reference in New Issue
Block a user