Skip to content

Commit 40be5ca

Browse files
committed
PM-1504 - strip out extra props in scorecard request
1 parent 62d3f89 commit 40be5ca

File tree

3 files changed

+39
-3
lines changed

3 files changed

+39
-3
lines changed

src/api/scorecard/scorecard.controller.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
Param,
99
Query,
1010
UseInterceptors,
11+
ValidationPipe,
1112
} from '@nestjs/common';
1213
import {
1314
ApiTags,
@@ -56,7 +57,8 @@ export class ScorecardController {
5657
})
5758
@ApiResponse({ status: 403, description: 'Forbidden.' })
5859
async addScorecard(
59-
@Body() body: ScorecardRequestDto,
60+
@Body(new ValidationPipe({ whitelist: true, transform: true }))
61+
body: ScorecardRequestDto,
6062
@User() user: JwtUser,
6163
): Promise<ScorecardWithGroupResponseDto> {
6264
return await this.scorecardService.addScorecard(body, user);
@@ -84,7 +86,8 @@ export class ScorecardController {
8486
@ApiResponse({ status: 404, description: 'Scorecard not found.' })
8587
async editScorecard(
8688
@Param('id') id: string,
87-
@Body() body: ScorecardRequestDto,
89+
@Body(new ValidationPipe({ whitelist: true, transform: true }))
90+
body: ScorecardRequestDto,
8891
@User() user: JwtUser,
8992
): Promise<ScorecardWithGroupResponseDto> {
9093
return await this.scorecardService.editScorecard(id, body, user);
@@ -114,6 +117,7 @@ export class ScorecardController {
114117
}
115118

116119
@Get('/:id')
120+
@Roles(UserRole.Admin)
117121
@Scopes(Scope.ReadScorecard)
118122
@ApiOperation({
119123
summary: 'View a scorecard',

src/api/scorecard/scorecard.service.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
} from '@nestjs/common';
66
import { Prisma } from '@prisma/client';
77
import {
8+
mapScorecardRequestForCreate,
89
mapScorecardRequestToDto,
910
ScorecardGroupBaseDto,
1011
ScorecardPaginatedResponseDto,
@@ -33,7 +34,7 @@ export class ScoreCardService {
3334
): Promise<ScorecardWithGroupResponseDto> {
3435
const data = await this.prisma.scorecard.create({
3536
data: {
36-
...(mapScorecardRequestToDto({
37+
...(mapScorecardRequestForCreate({
3738
...body,
3839
createdBy: user.isMachine ? 'System' : (user.userId as string),
3940
updatedBy: user.isMachine ? 'System' : (user.userId as string),

src/dto/scorecard.dto.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,37 @@ export class ScorecardQueryDto {
322322
scorecardTypesArray?: $Enums.ScorecardType[];
323323
}
324324

325+
export function mapScorecardRequestForCreate(request: ScorecardRequestDto) {
326+
const userFields = {
327+
...(request.createdBy ? { createdBy: request.createdBy } : {}),
328+
updatedBy: request.updatedBy,
329+
};
330+
331+
return {
332+
...request,
333+
...userFields,
334+
scorecardGroups: {
335+
create: request.scorecardGroups.map((group) => ({
336+
...group,
337+
...userFields,
338+
sections: {
339+
create: group.sections.map((section) => ({
340+
...section,
341+
...userFields,
342+
questions: {
343+
create: section.questions.map((question) => ({
344+
...question,
345+
sortOrder: 1,
346+
...userFields,
347+
})),
348+
},
349+
})),
350+
},
351+
})),
352+
},
353+
};
354+
}
355+
325356
export function mapScorecardRequestToDto(request: ScorecardRequestDto) {
326357
const userFields = {
327358
...(request.createdBy ? { createdBy: request.createdBy } : {}),

0 commit comments

Comments
 (0)