From feb3c4b8d07657d16361b44b7a6687832c5f0d69 Mon Sep 17 00:00:00 2001 From: Collin Duncan <3679940+cgduncan7@users.noreply.github.com> Date: Fri, 3 May 2024 11:23:21 +0200 Subject: [PATCH] Adding endpoint to update recurring reservations --- src/recurringReservations/controller.ts | 43 +++++++++++++++++++++++-- src/recurringReservations/service.ts | 13 ++++++++ 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/src/recurringReservations/controller.ts b/src/recurringReservations/controller.ts index 1aa1368..35afdd0 100644 --- a/src/recurringReservations/controller.ts +++ b/src/recurringReservations/controller.ts @@ -7,6 +7,7 @@ import { Inject, Param, Post, + Put, Query, UseInterceptors, } from '@nestjs/common' @@ -52,6 +53,31 @@ export class CreateRecurringReservationRequest { opponents?: CreateRecurringReservationOpponent[] } +export class UpdateRecurringReservationRequest { + @IsOptional() + @IsString() + ownerId?: string + + @IsOptional() + @IsEnum(DayOfWeek) + dayOfWeek?: number + + @IsOptional() + @IsString() + @Matches(/[012][0-9]:[0-5][0-9]/) + timeStart?: string + + @IsOptional() + @IsString() + @Matches(/[012][0-9]:[0-5][0-9]/) + timeEnd?: string + + @IsOptional() + @IsArray() + @ValidateNested() + opponents?: CreateRecurringReservationOpponent[] +} + @Controller('recurring-reservations') @UseInterceptors(ClassSerializerInterceptor) export class RecurringReservationsController { @@ -69,18 +95,29 @@ export class RecurringReservationsController { } @Get(':id') - getReservationById(@Param('id') id: string) { + getRecurringReservationById(@Param('id') id: string) { return this.recurringReservationsService.getById(id) } @Post() - async createReservation(@Body() req: CreateRecurringReservationRequest) { + async createRecurringReservation( + @Body() req: CreateRecurringReservationRequest, + ) { await this.recurringReservationsService.create(req) return 'Recurring reservation created' } + @Put(':id') + async updateRecurringReservation( + @Param('id') id: string, + @Body() req: UpdateRecurringReservationRequest, + ) { + await this.recurringReservationsService.update(id, req) + return 'Recurring reservation updated' + } + @Delete(':id') - async deleteReservationById(@Param('id') id: string) { + async deleteRecurringReservationById(@Param('id') id: string) { await this.recurringReservationsService.deleteById(id) return 'Recurring reservation deleted' } diff --git a/src/recurringReservations/service.ts b/src/recurringReservations/service.ts index ec48524..2ab234e 100644 --- a/src/recurringReservations/service.ts +++ b/src/recurringReservations/service.ts @@ -58,6 +58,19 @@ export class RecurringReservationsService { return this.reservationsService.create(reservation) } + async update( + id: string, + updateRequest: { + ownerId?: string + dayOfWeek?: DayOfWeek + timeStart?: string + timeEnd?: string + opponents?: { id: string; name: string }[] + }, + ) { + await this.recurringReservationsRepository.update({ id }, updateRequest) + } + async deleteById(id: string) { await this.recurringReservationsRepository.delete({ id }) }