From db638c1ab3cb5fee1b8bb1fb958f3ee48d7261b8 Mon Sep 17 00:00:00 2001 From: Paul Date: Sat, 20 Jan 2024 02:17:22 +0800 Subject: [PATCH] -- Add an endpoint for event update --- src/features/core/event/event.controller.ts | 44 +++++++++++++- src/features/core/event/event.service.ts | 11 +++- src/features/form/form.controller.ts | 66 ++++++++++++--------- 3 files changed, 89 insertions(+), 32 deletions(-) diff --git a/src/features/core/event/event.controller.ts b/src/features/core/event/event.controller.ts index c620dc2..d84a394 100644 --- a/src/features/core/event/event.controller.ts +++ b/src/features/core/event/event.controller.ts @@ -1,6 +1,6 @@ import { Controller, Get, Param } from '@nestjs/common'; import { CreateEventDto, id, UserInfoDto, perm } from '@ottery/ottery-dto'; -import { Body, Post, Query } from '@nestjs/common/decorators'; +import { Body, Patch, Post, Query } from '@nestjs/common/decorators'; import { compareIds } from 'src/functions/compareIds'; import { SeshDocument } from 'src/features/auth/sesh/sesh.schema'; import { Sesh } from 'src/features/auth/sesh/Sesh.decorator'; @@ -144,4 +144,46 @@ export class EventController { throw e; } } + + @Patch(':eventId') + async update( + @Param('eventId') eventId: id, + @Body() createEventDto: CreateEventDto, + ) { + try { + const event = await this.coreService.event.get(eventId); + + const volForms = await this.formFieldService.createMany( + createEventDto.volenteerSignUp, + ); + const atenForms = await this.formFieldService.createMany( + createEventDto.attendeeSignUp, + ); + const guardianForms = await this.formFieldService.createMany( + createEventDto.guardianSignUp, + ); + + const volIds = volForms.map(({ _id }) => _id); + const atenIds = atenForms.map(({ _id }) => _id); + const guardianIds = guardianForms.map(({ _id }) => _id); + + const updatedEvent = await this.coreService.event.update(eventId, { + ...event, + ...createEventDto, + volenteerSignUp: volIds, + attendeeSignUp: atenIds, + guardianSignUp: guardianIds, + }); + + await this.formFieldService.addEventToCustomForms(updatedEvent._id, [ + ...guardianIds, + ...atenIds, + ...volIds, + ]); + + return updatedEvent; + } catch (e) { + throw e; + } + } } diff --git a/src/features/core/event/event.service.ts b/src/features/core/event/event.service.ts index 8835c29..66e1703 100644 --- a/src/features/core/event/event.service.ts +++ b/src/features/core/event/event.service.ts @@ -28,9 +28,14 @@ export class EventService implements CrudService { async update(eventId: id, event: Event) { // overwrite is false so only modified fields are updated - return await this.eventModel - .findByIdAndUpdate(eventId, event) - .setOptions({ overwrite: false, new: true }); + // return await this.eventModel + // .findByIdAndUpdate(eventId, event) + // .setOptions({ overwrite: false, new: true }); + + const eventDoc = await this.eventModel.findById(eventId); + Object.keys(event).forEach((key) => (eventDoc[key] = event[key])); + eventDoc.save(); + return eventDoc; } async get(id: id) { diff --git a/src/features/form/form.controller.ts b/src/features/form/form.controller.ts index c1d3e3d..3d4ae12 100644 --- a/src/features/form/form.controller.ts +++ b/src/features/form/form.controller.ts @@ -1,38 +1,48 @@ -import { Controller, Get, HttpException, HttpStatus, Query } from '@nestjs/common'; +import { + Controller, + Get, + HttpException, + HttpStatus, + Query, +} from '@nestjs/common'; +import { id } from '@ottery/ottery-dto'; + import { FormFieldService } from './form.service'; import { FormFlag } from './form.flag.enum'; @Controller('api/form') export class FormController { - constructor( - private formFieldService: FormFieldService, - ) {} + constructor(private formFieldService: FormFieldService) {} + + @Get('fields/default') + async getAllDefaultFormFields() { + try { + return await this.formFieldService.getAllDefault(); + } catch (e) { + throw e; + } + } - @Get("fields/default") - async getAllDefaultFormFields() { - try { - return await this.formFieldService.getAllDefault(); - } catch (e) { - throw e; - } + @Get('fields/base/required') + async getAllBaseRequiredField(@Query('flag') flag: FormFlag) { + if (!flag) { + throw new HttpException('needs flag query', HttpStatus.BAD_REQUEST); } - @Get("fields/base/required") - async getAllBaseRequiredField( - @Query("flag") flag: FormFlag - ) { - if (!flag) { - throw new HttpException( - "needs flag query", - HttpStatus.BAD_REQUEST, - ) - } + try { + const forms = await this.formFieldService.getBaseFields(); + return forms[flag]; + } catch (e) { + throw e; + } + } - try { - const forms = await this.formFieldService.getBaseFields(); - return forms[flag]; - } catch (e) { - throw e; - } + @Get('fields') + async getFormFieldsByIds(@Query('ids') fieldIds: id[]) { + try { + return this.formFieldService.getMany(fieldIds); + } catch (e) { + throw e; } -} \ No newline at end of file + } +}