From 737c8bec695b1c883bd68695498e9f203cf9dc0f Mon Sep 17 00:00:00 2001 From: Justin Gasper Date: Mon, 24 Nov 2025 10:20:36 +1100 Subject: [PATCH] Add support for pulling specific review summations, not all review summations --- .../review-summation.service.ts | 41 +++++++++++++------ src/dto/reviewSummation.dto.ts | 27 ++++++++++++ 2 files changed, 56 insertions(+), 12 deletions(-) diff --git a/src/api/review-summation/review-summation.service.ts b/src/api/review-summation/review-summation.service.ts index 2e7ddac..825d678 100644 --- a/src/api/review-summation/review-summation.service.ts +++ b/src/api/review-summation/review-summation.service.ts @@ -544,6 +544,13 @@ export class ReviewSummationService { const skip = (page - 1) * perPage; let orderBy; + const parseBooleanString = (value?: string): boolean | undefined => { + if (typeof value !== 'string') { + return undefined; + } + return value.toLowerCase() === 'true'; + }; + if (sortDto && sortDto.orderBy && sortDto.sortBy) { orderBy = { [sortDto.sortBy]: sortDto.orderBy.toLowerCase(), @@ -700,6 +707,14 @@ export class ReviewSummationService { // Build the where clause for review summations based on available filter parameters const reviewSummationWhereClause: any = {}; + const isPassingFilter = parseBooleanString(queryDto.isPassing); + const isFinalFilter = parseBooleanString(queryDto.isFinal); + const isProvisionalFilter = parseBooleanString(queryDto.isProvisional); + const isExampleFilter = parseBooleanString(queryDto.isExample); + const exampleOnly = parseBooleanString(queryDto.example) === true; + const provisionalOnly = parseBooleanString(queryDto.provisional) === true; + const systemOnly = parseBooleanString(queryDto.system) === true; + if (queryDto.submissionId) { reviewSummationWhereClause.submissionId = queryDto.submissionId; } @@ -711,21 +726,23 @@ export class ReviewSummationService { if (queryDto.scorecardId) { reviewSummationWhereClause.scorecardId = queryDto.scorecardId; } - if (queryDto.isPassing !== undefined) { - reviewSummationWhereClause.isPassing = - queryDto.isPassing.toLowerCase() === 'true'; + if (isPassingFilter !== undefined) { + reviewSummationWhereClause.isPassing = isPassingFilter; } - if (queryDto.isFinal !== undefined) { - reviewSummationWhereClause.isFinal = - queryDto.isFinal.toLowerCase() === 'true'; + if (isFinalFilter !== undefined) { + reviewSummationWhereClause.isFinal = isFinalFilter; + } else if (systemOnly) { + reviewSummationWhereClause.isFinal = true; } - if (queryDto.isProvisional !== undefined) { - reviewSummationWhereClause.isProvisional = - queryDto.isProvisional.toLowerCase() === 'true'; + if (isProvisionalFilter !== undefined) { + reviewSummationWhereClause.isProvisional = isProvisionalFilter; + } else if (provisionalOnly) { + reviewSummationWhereClause.isProvisional = true; } - if (queryDto.isExample !== undefined) { - reviewSummationWhereClause.isExample = - queryDto.isExample.toLowerCase() === 'true'; + if (isExampleFilter !== undefined) { + reviewSummationWhereClause.isExample = isExampleFilter; + } else if (exampleOnly) { + reviewSummationWhereClause.isExample = true; } const submissionWhereClause: Record = {}; diff --git a/src/dto/reviewSummation.dto.ts b/src/dto/reviewSummation.dto.ts index 60dcdc1..9e9ac82 100644 --- a/src/dto/reviewSummation.dto.ts +++ b/src/dto/reviewSummation.dto.ts @@ -70,6 +70,33 @@ export class ReviewSummationQueryDto { @IsBooleanString() isExample?: string; + @ApiProperty({ + description: + 'When true, only include review summations flagged as examples (isExample = true)', + required: false, + }) + @IsOptional() + @IsBooleanString() + example?: string; + + @ApiProperty({ + description: + 'When true, only include provisional review summations (isProvisional = true)', + required: false, + }) + @IsOptional() + @IsBooleanString() + provisional?: string; + + @ApiProperty({ + description: + 'When true, only include system (final) review summations (isFinal = true)', + required: false, + }) + @IsOptional() + @IsBooleanString() + system?: string; + @ApiProperty({ description: 'The challenge id tied to the submission', required: false,