From 67b63616b6b4f405dc2f14d7e1acbff3fb4fbc71 Mon Sep 17 00:00:00 2001 From: Adrien Boutigny Date: Sat, 18 Apr 2026 02:20:36 +0200 Subject: [PATCH 1/5] create AuditService.checkIfAuditExists method --- confiture-rest-api/src/audits/audit.service.ts | 18 ++++++++++++++++-- .../src/audits/audits.controller.ts | 8 ++++---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/confiture-rest-api/src/audits/audit.service.ts b/confiture-rest-api/src/audits/audit.service.ts index 3b2c958b4..f0cac6a92 100644 --- a/confiture-rest-api/src/audits/audit.service.ts +++ b/confiture-rest-api/src/audits/audit.service.ts @@ -77,7 +77,7 @@ export class AuditService { constructor( private readonly prisma: PrismaService, private readonly fileStorageService: FileStorageService - ) {} + ) { } async createAudit(data: CreateAuditDto): Promise { const editUniqueId = nanoid(); @@ -172,7 +172,7 @@ export class AuditService { const existingSlugs = new Set([TRANSVERSE_ELEMENTS_SLUG]); const pagesWithSlug = pages.map(page => { let slug = slugify(page.name); - for (let i = 1; ;i++) { + for (let i = 1; ; i++) { if (!existingSlugs.has(slug)) { break; } @@ -184,6 +184,20 @@ export class AuditService { return pagesWithSlug; } + /** + * @param editUniqueId id of the audit to look for + * @param isHidden look for hidden audits, default: false + * @returns true if the audit exists in db, false otherwise + */ + async checkIfAuditExists(editUniqueId: string, isHidden: boolean = false): Promise { + const audit = await this.prisma.audit.findFirst({ + where: { editUniqueId, isHidden }, + select: { id: true } + }); + + return !!audit; + } + findAuditWithEditUniqueId(uniqueId: string, include?: Prisma.AuditInclude) { return this.prisma.audit.findFirst({ where: { editUniqueId: uniqueId, isHidden: false }, diff --git a/confiture-rest-api/src/audits/audits.controller.ts b/confiture-rest-api/src/audits/audits.controller.ts index 9b847579e..cc68e077a 100644 --- a/confiture-rest-api/src/audits/audits.controller.ts +++ b/confiture-rest-api/src/audits/audits.controller.ts @@ -189,9 +189,9 @@ export class AuditsController { file: Express.Multer.File, @Body() body: UploadImageDto ): Promise { - const audit = await this.auditService.findAuditWithEditUniqueId(uniqueId); + const exists = await this.auditService.checkIfAuditExists(uniqueId); - if (!audit) { + if (!exists) { await this.sendAuditNotFoundStatus(uniqueId); } @@ -307,9 +307,9 @@ export class AuditsController { @Param("uniqueId") uniqueId: string, @Body() body: UpdateResultsDto ) { - const audit = await this.auditService.findAuditWithEditUniqueId(uniqueId); + const exists = await this.auditService.checkIfAuditExists(uniqueId); - if (!audit) { + if (!exists) { await this.sendAuditNotFoundStatus(uniqueId); } From 67a7786e024bf2e940029d5562773d8ecce48aca Mon Sep 17 00:00:00 2001 From: Adrien Boutigny Date: Sat, 18 Apr 2026 02:34:27 +0200 Subject: [PATCH 2/5] modify findAuditWithEditUniqueId to return an AuditDto --- .../src/audits/audit-export.service.ts | 17 +++++----- .../src/audits/audit.service.ts | 12 ++++--- .../src/audits/audits.controller.ts | 31 ++++++------------- 3 files changed, 27 insertions(+), 33 deletions(-) diff --git a/confiture-rest-api/src/audits/audit-export.service.ts b/confiture-rest-api/src/audits/audit-export.service.ts index 1ed2bcadf..8cf6ae119 100644 --- a/confiture-rest-api/src/audits/audit-export.service.ts +++ b/confiture-rest-api/src/audits/audit-export.service.ts @@ -8,6 +8,7 @@ import { CriterionResultStatus } from "../generated/prisma/client"; +import { PrismaService } from "../prisma.service"; import { AuditService } from "./audit.service"; import { CRITERIA_BY_AUDIT_TYPE } from "./criteria"; import { CriterionResultDto } from "./dto/entities/criterion-result.dto"; @@ -23,7 +24,10 @@ const CRITERIUM_STATUS: Record = { @Injectable() export class AuditExportService { - constructor(private readonly auditService: AuditService) {} + constructor( + private readonly auditService: AuditService, + private readonly prisma: PrismaService + ) { } private generateCsvExport( audit: Audit & { @@ -89,12 +93,11 @@ export class AuditExportService { } async getCsvExport(editUniqueId: string): Promise { - const audit = (await this.auditService.findAuditWithEditUniqueId( - editUniqueId, - { pages: true } - )) as Audit & { - pages: AuditedPage[]; - }; + const audit = await this.prisma.audit.findUnique({ + where: { editUniqueId }, + include: { pages: true } + }); + const results = await this.auditService.getResultsWithEditUniqueId(editUniqueId); diff --git a/confiture-rest-api/src/audits/audit.service.ts b/confiture-rest-api/src/audits/audit.service.ts index f0cac6a92..c129a17ff 100644 --- a/confiture-rest-api/src/audits/audit.service.ts +++ b/confiture-rest-api/src/audits/audit.service.ts @@ -198,10 +198,11 @@ export class AuditService { return !!audit; } - findAuditWithEditUniqueId(uniqueId: string, include?: Prisma.AuditInclude) { + /** Find and return an audit in the format that the API would return */ + findAuditWithEditUniqueId(uniqueId: string): Promise { return this.prisma.audit.findFirst({ where: { editUniqueId: uniqueId, isHidden: false }, - include + select: AUDIT_PRISMA_SELECT }); } @@ -1344,8 +1345,11 @@ export class AuditService { } async isAuditComplete(uniqueId: string): Promise { - const audit = await this.findAuditWithEditUniqueId(uniqueId, { - pages: true + const audit = await this.prisma.audit.findUnique({ + where: { editUniqueId: uniqueId }, + include: { + pages: true + } }); const testedCount = await this.prisma.criterionResult.count({ diff --git a/confiture-rest-api/src/audits/audits.controller.ts b/confiture-rest-api/src/audits/audits.controller.ts index cc68e077a..02477d6b9 100644 --- a/confiture-rest-api/src/audits/audits.controller.ts +++ b/confiture-rest-api/src/audits/audits.controller.ts @@ -92,21 +92,7 @@ export class AuditsController { @ApiNotFoundResponse({ description: "The audit does not exist." }) @ApiGoneResponse({ description: "The audit has been previously deleted." }) async getAudit(@Param("uniqueId") uniqueId: string): Promise { - const audit = await this.auditService.findAuditWithEditUniqueId(uniqueId, { - environments: true, - transverseElementsPage: true, - pages: true, - sourceAudit: { - select: { - procedureName: true - } - }, - notesFiles: { - orderBy: { - id: "desc" - } - } - }); + const audit = await this.auditService.findAuditWithEditUniqueId(uniqueId); if (!audit) { await this.sendAuditNotFoundStatus(uniqueId); @@ -322,6 +308,11 @@ export class AuditsController { @ApiNotFoundResponse({ description: "The audit does not exist." }) @ApiGoneResponse({ description: "The audit has been previously deleted." }) async publishAudit(@Param("uniqueId") uniqueId: string): Promise { + const exists = await this.auditService.checkIfAuditExists(uniqueId); + if (!exists) { + await this.sendAuditNotFoundStatus(uniqueId); + } + const auditIsComplete = await this.auditService.isAuditComplete(uniqueId); if (!auditIsComplete) { throw new ConflictException( @@ -331,10 +322,6 @@ export class AuditsController { const audit = await this.auditService.publishAudit(uniqueId); - if (!audit) { - await this.sendAuditNotFoundStatus(uniqueId); - } - return audit; } @@ -398,13 +385,13 @@ export class AuditsController { @ApiNotFoundResponse({ description: "The audit does not exist." }) @ApiGoneResponse({ description: "The audit has been previously deleted." }) async getCsvExport(@Param("uniqueId") uniqueId: string) { - const file = await this.auditExportService.getCsvExport(uniqueId); + const exists = await this.auditService.checkIfAuditExists(uniqueId); - if (!file) { + if (!exists) { return this.sendAuditNotFoundStatus(uniqueId); } - return file; + return this.auditExportService.getCsvExport(uniqueId); } /** From 9b68dda0ec40c30c6630f554ce5440f17cda103f Mon Sep 17 00:00:00 2001 From: Adrien Boutigny Date: Sat, 18 Apr 2026 02:36:51 +0200 Subject: [PATCH 3/5] remove method AuditService.getAuditWithEditUniqueId --- confiture-rest-api/src/audits/audit.service.ts | 16 ---------------- .../src/audits/audits.controller.ts | 6 +++--- 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/confiture-rest-api/src/audits/audit.service.ts b/confiture-rest-api/src/audits/audit.service.ts index c129a17ff..7594c3ec7 100644 --- a/confiture-rest-api/src/audits/audit.service.ts +++ b/confiture-rest-api/src/audits/audit.service.ts @@ -206,22 +206,6 @@ export class AuditService { }); } - getAuditWithEditUniqueId(uniqueId: string) { - return this.prisma.audit.findUnique({ - where: { editUniqueId: uniqueId }, - include: { - environments: true, - pages: true, - sourceAudit: { - select: { - procedureName: true - } - }, - notesFiles: true - } - }); - } - getAuditWithConsultUniqueId(uniqueId: string) { return this.prisma.audit.findUnique({ where: { consultUniqueId: uniqueId }, diff --git a/confiture-rest-api/src/audits/audits.controller.ts b/confiture-rest-api/src/audits/audits.controller.ts index 02477d6b9..ceda5cfd2 100644 --- a/confiture-rest-api/src/audits/audits.controller.ts +++ b/confiture-rest-api/src/audits/audits.controller.ts @@ -206,13 +206,13 @@ export class AuditsController { ) file: Express.Multer.File ): Promise { - const audit = await this.auditService.getAuditWithEditUniqueId(uniqueId); + const exists = await this.auditService.checkIfAuditExists(uniqueId); - if (!audit) { + if (!exists) { await this.sendAuditNotFoundStatus(uniqueId); } - return await this.auditService.saveNotesFile(uniqueId, file); + return this.auditService.saveNotesFile(uniqueId, file); } @Post("/editor/images") From fb9c2741b7cb760c49b3f2b23dfa57f514860996 Mon Sep 17 00:00:00 2001 From: Adrien Boutigny Date: Sat, 18 Apr 2026 02:39:54 +0200 Subject: [PATCH 4/5] remove method AuditService.getAuditWithConsultUniqueId --- .../src/audits/audit-export.service.ts | 5 ++++- confiture-rest-api/src/audits/audit.service.ts | 15 --------------- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/confiture-rest-api/src/audits/audit-export.service.ts b/confiture-rest-api/src/audits/audit-export.service.ts index 8cf6ae119..ab21d3b48 100644 --- a/confiture-rest-api/src/audits/audit-export.service.ts +++ b/confiture-rest-api/src/audits/audit-export.service.ts @@ -84,7 +84,10 @@ export class AuditExportService { consultUniqueId: string ): Promise { const audit = - await this.auditService.getAuditWithConsultUniqueId(consultUniqueId); + await this.prisma.audit.findUnique({ + where: { consultUniqueId }, + include: { pages: true } + }); const results = await this.auditService.getResultsWithEditUniqueId( audit.editUniqueId ); diff --git a/confiture-rest-api/src/audits/audit.service.ts b/confiture-rest-api/src/audits/audit.service.ts index 7594c3ec7..448285ca9 100644 --- a/confiture-rest-api/src/audits/audit.service.ts +++ b/confiture-rest-api/src/audits/audit.service.ts @@ -206,21 +206,6 @@ export class AuditService { }); } - getAuditWithConsultUniqueId(uniqueId: string) { - return this.prisma.audit.findUnique({ - where: { consultUniqueId: uniqueId }, - include: { - environments: true, - pages: true, - sourceAudit: { - select: { - procedureName: true - } - } - } - }); - } - async getResultsWithEditUniqueId( uniqueId: string ): Promise< From bd6f6cddf5d926f22a1af00cd3e6d18608467324 Mon Sep 17 00:00:00 2001 From: Adrien Boutigny Date: Wed, 22 Apr 2026 15:54:18 +0200 Subject: [PATCH 5/5] rename method --- confiture-rest-api/src/audits/audit.service.ts | 2 +- confiture-rest-api/src/audits/audits.controller.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/confiture-rest-api/src/audits/audit.service.ts b/confiture-rest-api/src/audits/audit.service.ts index 448285ca9..502349a5e 100644 --- a/confiture-rest-api/src/audits/audit.service.ts +++ b/confiture-rest-api/src/audits/audit.service.ts @@ -199,7 +199,7 @@ export class AuditService { } /** Find and return an audit in the format that the API would return */ - findAuditWithEditUniqueId(uniqueId: string): Promise { + findAudit(uniqueId: string): Promise { return this.prisma.audit.findFirst({ where: { editUniqueId: uniqueId, isHidden: false }, select: AUDIT_PRISMA_SELECT diff --git a/confiture-rest-api/src/audits/audits.controller.ts b/confiture-rest-api/src/audits/audits.controller.ts index ceda5cfd2..9c15725bc 100644 --- a/confiture-rest-api/src/audits/audits.controller.ts +++ b/confiture-rest-api/src/audits/audits.controller.ts @@ -92,7 +92,7 @@ export class AuditsController { @ApiNotFoundResponse({ description: "The audit does not exist." }) @ApiGoneResponse({ description: "The audit has been previously deleted." }) async getAudit(@Param("uniqueId") uniqueId: string): Promise { - const audit = await this.auditService.findAuditWithEditUniqueId(uniqueId); + const audit = await this.auditService.findAudit(uniqueId); if (!audit) { await this.sendAuditNotFoundStatus(uniqueId);