Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 14 additions & 8 deletions confiture-rest-api/src/audits/audit-export.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand All @@ -23,7 +24,10 @@ const CRITERIUM_STATUS: Record<CriterionResultStatus, string> = {

@Injectable()
export class AuditExportService {
constructor(private readonly auditService: AuditService) {}
constructor(
private readonly auditService: AuditService,
private readonly prisma: PrismaService
) { }

private generateCsvExport(
audit: Audit & {
Expand Down Expand Up @@ -80,7 +84,10 @@ export class AuditExportService {
consultUniqueId: string
): Promise<StreamableFile> {
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
);
Expand All @@ -89,12 +96,11 @@ export class AuditExportService {
}

async getCsvExport(editUniqueId: string): Promise<StreamableFile> {
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);

Expand Down
57 changes: 22 additions & 35 deletions confiture-rest-api/src/audits/audit.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ export class AuditService {
constructor(
private readonly prisma: PrismaService,
private readonly fileStorageService: FileStorageService
) {}
) { }

async createAudit(data: CreateAuditDto): Promise<AuditDto> {
const editUniqueId = nanoid();
Expand Down Expand Up @@ -172,7 +172,7 @@ export class AuditService {
const existingSlugs = new Set<string>([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;
}
Expand All @@ -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<boolean> {
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<AuditDto> {
return this.prisma.audit.findFirst({
where: { editUniqueId: uniqueId, isHidden: false },
select: AUDIT_PRISMA_SELECT
});
}

Expand Down Expand Up @@ -1330,8 +1314,11 @@ export class AuditService {
}

async isAuditComplete(uniqueId: string): Promise<boolean> {
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({
Expand Down
45 changes: 16 additions & 29 deletions confiture-rest-api/src/audits/audits.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<AuditDto> {
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);
Expand Down Expand Up @@ -189,9 +175,9 @@ export class AuditsController {
file: Express.Multer.File,
@Body() body: UploadImageDto
): Promise<ExampleImageFileDto> {
const audit = await this.auditService.findAuditWithEditUniqueId(uniqueId);
const exists = await this.auditService.checkIfAuditExists(uniqueId);

if (!audit) {
if (!exists) {
await this.sendAuditNotFoundStatus(uniqueId);
}

Expand Down Expand Up @@ -220,13 +206,13 @@ export class AuditsController {
)
file: Express.Multer.File
): Promise<NotesFileDto> {
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")
Expand Down Expand Up @@ -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);
}

Expand All @@ -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<AuditDto> {
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(
Expand All @@ -331,10 +322,6 @@ export class AuditsController {

const audit = await this.auditService.publishAudit(uniqueId);

if (!audit) {
await this.sendAuditNotFoundStatus(uniqueId);
}

return audit;
}

Expand Down Expand Up @@ -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);
}

/**
Expand Down
Loading