diff --git a/.circleci/config.yml b/.circleci/config.yml index 13fd08a..47eef83 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -76,6 +76,7 @@ workflows: - develop - feat/ai-workflows - feat/scorecards + - filters-fix - 'build-prod': context: org-global filters: diff --git a/src/api/scorecard/scorecard.controller.ts b/src/api/scorecard/scorecard.controller.ts index 78c978f..1eda524 100644 --- a/src/api/scorecard/scorecard.controller.ts +++ b/src/api/scorecard/scorecard.controller.ts @@ -31,6 +31,7 @@ import { import { ChallengeTrack } from 'src/shared/enums/challengeTrack.enum'; import { ScoreCardService } from './scorecard.service'; import { PaginationHeaderInterceptor } from 'src/interceptors/PaginationHeaderInterceptor'; +import { $Enums } from '@prisma/client'; @ApiTags('Scorecard') @ApiBearerAuth() @@ -152,6 +153,18 @@ export class ScorecardController { example: 'Hackathon', required: false, }) + @ApiQuery({ + name: 'scorecardType', + description: 'The scorecard type to filter by', + example: 'SCREENING', + required: false, + }) + @ApiQuery({ + name: 'status', + description: 'The status to filter by', + example: 'ACTIVE', + required: false, + }) @ApiQuery({ name: 'name', description: 'The challenge name to filter by (partial match)', @@ -181,6 +194,9 @@ export class ScorecardController { async searchScorecards( @Query('challengeTrack') challengeTrack?: ChallengeTrack | ChallengeTrack[], @Query('challengeType') challengeType?: string | string[], + @Query('status') status?: $Enums.ScorecardStatus | $Enums.ScorecardStatus[], + @Query('scorecardType') + scorecardType?: $Enums.ScorecardType | $Enums.ScorecardType[], @Query('name') name?: string, @Query('page') page: number = 1, @Query('perPage') perPage: number = 10, @@ -195,12 +211,21 @@ export class ScorecardController { : challengeType ? [challengeType] : []; + const scorecardTypesArray = Array.isArray(scorecardType) + ? scorecardType + : scorecardType + ? [scorecardType] + : []; + const statusArray = Array.isArray(status) ? status : status ? [status] : []; + const result = await this.scorecardService.getScoreCards({ challengeTrack: challengeTrackArray, challengeType: challengeTypeArray, name, page, perPage, + scorecardTypesArray, + statusArray, }); return result; } diff --git a/src/api/scorecard/scorecard.service.ts b/src/api/scorecard/scorecard.service.ts index 1a72fde..51e73fa 100644 --- a/src/api/scorecard/scorecard.service.ts +++ b/src/api/scorecard/scorecard.service.ts @@ -147,6 +147,8 @@ export class ScoreCardService { perPage = 10, challengeTrack, challengeType, + scorecardTypesArray, + statusArray, name, } = query; const skip = (page - 1) * perPage; @@ -161,6 +163,16 @@ export class ScoreCardService { in: challengeType, }, }), + ...(scorecardTypesArray?.length && { + type: { + in: scorecardTypesArray, + }, + }), + ...(statusArray?.length && { + status: { + in: statusArray, + }, + }), ...(name && { name: { contains: name, mode: 'insensitive' } }), }; const data = await this.prisma.scorecard.findMany({ diff --git a/src/dto/scorecard.dto.ts b/src/dto/scorecard.dto.ts index 543efc4..19db58e 100644 --- a/src/dto/scorecard.dto.ts +++ b/src/dto/scorecard.dto.ts @@ -1,4 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; +import { $Enums } from '@prisma/client'; export enum ScorecardStatus { ACTIVE = 'ACTIVE', @@ -267,6 +268,8 @@ export class ScorecardQueryDto { name?: string; page?: number; perPage?: number; + statusArray?: $Enums.ScorecardStatus[]; + scorecardTypesArray?: $Enums.ScorecardType[]; } export function mapScorecardRequestToDto(request: ScorecardRequestDto) {