From 08d428cbce989bcd3b594c693d46229e069dea27 Mon Sep 17 00:00:00 2001 From: Mert <101130780+mertalev@users.noreply.github.com> Date: Tue, 8 Oct 2024 17:37:41 -0400 Subject: [PATCH] fix(server): duplicate faces, face insert query failing (#13294) fix duplicate faces, query failing --- server/src/repositories/person.repository.ts | 3 ++- server/src/services/person.service.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/server/src/repositories/person.repository.ts b/server/src/repositories/person.repository.ts index 64ae548c1bf..3ba9e238872 100644 --- a/server/src/repositories/person.repository.ts +++ b/server/src/repositories/person.repository.ts @@ -279,7 +279,7 @@ export class PersonRepository implements IPersonRepository { faceIdsToRemove: string[], embeddingsToAdd?: FaceSearchEntity[], ): Promise { - const query = this.faceSearchRepository.createQueryBuilder().select('1'); + const query = this.faceSearchRepository.createQueryBuilder().select('1').fromDummy(); if (facesToAdd.length > 0) { const insertCte = this.assetFaceRepository.createQueryBuilder().insert().values(facesToAdd); query.addCommonTableExpression(insertCte, 'added'); @@ -296,6 +296,7 @@ export class PersonRepository implements IPersonRepository { if (embeddingsToAdd?.length) { const embeddingCte = this.faceSearchRepository.createQueryBuilder().insert().values(embeddingsToAdd).orIgnore(); query.addCommonTableExpression(embeddingCte, 'embeddings'); + query.getQuery(); // typeorm mixes up parameters without this } await query.execute(); diff --git a/server/src/services/person.service.ts b/server/src/services/person.service.ts index 77694d8e5db..624fb46b6d6 100644 --- a/server/src/services/person.service.ts +++ b/server/src/services/person.service.ts @@ -325,7 +325,7 @@ export class PersonService extends BaseService { if (match && !mlFaceIds.delete(match.id)) { embeddings.push({ faceId: match.id, embedding }); - } else { + } else if (!match) { const faceId = this.cryptoRepository.randomUUID(); facesToAdd.push({ id: faceId,