diff --git a/confiture-rest-api/src/audits/audit-export.service.ts b/confiture-rest-api/src/audits/audit-export.service.ts index 1ed2bcadf..ab21d3b48 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 & { @@ -80,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 ); @@ -89,12 +96,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 3b2c958b4..502349a5e 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,41 +184,25 @@ export class AuditService { return pagesWithSlug; } - findAuditWithEditUniqueId(uniqueId: string, include?: Prisma.AuditInclude) { - return this.prisma.audit.findFirst({ - where: { editUniqueId: uniqueId, isHidden: false }, - include + /** + * @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 } }); - } - getAuditWithEditUniqueId(uniqueId: string) { - return this.prisma.audit.findUnique({ - where: { editUniqueId: uniqueId }, - include: { - environments: true, - pages: true, - sourceAudit: { - select: { - procedureName: true - } - }, - notesFiles: true - } - }); + return !!audit; } - getAuditWithConsultUniqueId(uniqueId: string) { - return this.prisma.audit.findUnique({ - where: { consultUniqueId: uniqueId }, - include: { - environments: true, - pages: true, - sourceAudit: { - select: { - procedureName: true - } - } - } + /** Find and return an audit in the format that the API would return */ + findAudit(uniqueId: string): Promise { + return this.prisma.audit.findFirst({ + where: { editUniqueId: uniqueId, isHidden: false }, + select: AUDIT_PRISMA_SELECT }); } @@ -1330,8 +1314,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 9b847579e..9c15725bc 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.findAudit(uniqueId); if (!audit) { await this.sendAuditNotFoundStatus(uniqueId); @@ -189,9 +175,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); } @@ -220,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") @@ -307,9 +293,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); } @@ -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); } /**