From 9ce1459cd8edfbeaaaf9b9ebe6e2cf013435e6a2 Mon Sep 17 00:00:00 2001 From: Marco De Luca <31864038+markdeluk@users.noreply.github.com> Date: Mon, 1 Jan 2024 13:17:54 +0100 Subject: [PATCH] Fix: stuff asked in pull request --- .../availability/availability.controller.ts | 91 ++++++++++++------- api/src/availability/availability.entity.ts | 2 +- shared/src/availability.ts | 1 - 3 files changed, 59 insertions(+), 35 deletions(-) diff --git a/api/src/availability/availability.controller.ts b/api/src/availability/availability.controller.ts index 9a22446..5f0673c 100644 --- a/api/src/availability/availability.controller.ts +++ b/api/src/availability/availability.controller.ts @@ -1,7 +1,18 @@ -import { Body, Controller, Delete, Param, Patch, Post } from '@nestjs/common'; +import { + BadRequestException, + Body, + Controller, + Delete, + ForbiddenException, + NotFoundException, + Param, + Patch, + Post, +} from '@nestjs/common'; import { AvailabilityService } from './availability.service'; import { Action, + checkAbility, insertAvailabilitySchema, updateAvailabilitySchema, } from '@hkrecruitment/shared'; @@ -28,39 +39,38 @@ import Joi from 'joi'; export class AvailabilityController { constructor(private readonly availabilityService: AvailabilityService) {} - @ApiBadRequestResponse() - @ApiForbiddenResponse() @ApiNotFoundResponse() @ApiOkResponse() - @ApiNoContentResponse() + @ApiForbiddenResponse() @ApiBadGatewayResponse() async listAvailabilities(): Promise { const matches = await this.availabilityService.listAvailabilities(); + if (matches.length == 0) { + throw new NotFoundException(); + } return matches; } - @ApiBadRequestResponse() - @ApiForbiddenResponse() @ApiNotFoundResponse() @ApiOkResponse() - @ApiNoContentResponse() @ApiBadGatewayResponse() + @ApiBadRequestResponse() + @ApiForbiddenResponse() @JoiValidate({ param: Joi.number().positive().integer().required(), }) async findAvailabilityById(id: number): Promise { - const matches = await this.availabilityService.findAvailabilityById(id); - return matches; + const match = await this.availabilityService.findAvailabilityById(id); + if (!match) { + throw new NotFoundException(); + } + return match; } + @ApiCreatedResponse() @ApiBadRequestResponse() @ApiForbiddenResponse() - @ApiNotFoundResponse() - @ApiOkResponse() - @ApiNoContentResponse() @ApiBadGatewayResponse() - @ApiConflictResponse() - @ApiCreatedResponse() @CheckPolicies((ability) => ability.can(Action.Create, 'Availability')) @Post() @JoiValidate({ @@ -70,49 +80,64 @@ export class AvailabilityController { const res = await this.availabilityService.createAvailability(body); if (res.identifiers.length > 0) { return true; + } else { + throw new ForbiddenException(); } - return false; } - @ApiBadRequestResponse() - @ApiForbiddenResponse() @ApiNotFoundResponse() - @ApiOkResponse() @ApiNoContentResponse() + @ApiBadRequestResponse() + @ApiForbiddenResponse() @ApiBadGatewayResponse() - @ApiConflictResponse() - @ApiCreatedResponse() @CheckPolicies((ability) => ability.can(Action.Create, 'Availability')) @Patch() @JoiValidate({ body: updateAvailabilitySchema, }) async updateAvailability(@Body() body: Availability): Promise { - const res = await this.availabilityService.updateAvailability(body); - if (res.affected != undefined && res.affected != null && res.affected > 0) { - return true; + const test = await this.findAvailabilityById(body.id); + if (test) { + const res = await this.availabilityService.updateAvailability(body); + if ( + res.affected != undefined && + res.affected != null && + res.affected > 0 + ) { + return true; + } else { + throw new ForbiddenException(); + } + } else { + throw new NotFoundException(); } - return false; } - @ApiBadRequestResponse() - @ApiForbiddenResponse() @ApiNotFoundResponse() - @ApiOkResponse() @ApiNoContentResponse() + @ApiBadRequestResponse() + @ApiForbiddenResponse() @ApiBadGatewayResponse() - @ApiConflictResponse() - @ApiCreatedResponse() @CheckPolicies((ability) => ability.can(Action.Create, 'Availability')) @Delete() @JoiValidate({ param: Joi.number().positive().integer().required(), }) async deleteAvailability(@Param() id: number): Promise { - const res = await this.availabilityService.deleteAvailability(id); - if (res.affected != undefined && res.affected != null && res.affected > 0) { - return true; + const test = await this.findAvailabilityById(id); + if (test) { + const res = await this.availabilityService.deleteAvailability(id); + if ( + res.affected != undefined && + res.affected != null && + res.affected > 0 + ) { + return true; + } else { + throw new ForbiddenException(); + } + } else { + throw new NotFoundException(); } - return false; } } diff --git a/api/src/availability/availability.entity.ts b/api/src/availability/availability.entity.ts index 613fb69..6bd2eeb 100644 --- a/api/src/availability/availability.entity.ts +++ b/api/src/availability/availability.entity.ts @@ -18,7 +18,7 @@ export class Availability implements AvailabilityInterface { id: number; @Column() state: AvailabilityState; - @Column() + @Column({ name: 'last_modified' }) lastModified: Date; @OneToOne(() => TimeSlot) timeSlot: TimeSlot; diff --git a/shared/src/availability.ts b/shared/src/availability.ts index 5577ae3..3be7a45 100644 --- a/shared/src/availability.ts +++ b/shared/src/availability.ts @@ -28,7 +28,6 @@ export const insertAvailabilitySchema = Joi.object({ state: Joi.string() .valid(...Object.values(AvailabilityType)) .required(), - lastModified: Joi.date().required(), //timeSlot: Joi.object(createTimeSlotSchema).required(), //user: Joi.object(createUserSchema).required(), }).options({