From ab67e5f4aaa6deeb79af1ebbf2aaff0675ce58e9 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sat, 2 Jan 2021 16:55:27 +0100 Subject: [PATCH] Added basic runner updateing ref #65 --- src/controllers/DonorController.ts | 17 ++++++------- src/models/actions/CreateDonor.ts | 2 +- src/models/actions/UpdateDonor.ts | 39 ++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 10 deletions(-) create mode 100644 src/models/actions/UpdateDonor.ts diff --git a/src/controllers/DonorController.ts b/src/controllers/DonorController.ts index 308825a..399421f 100644 --- a/src/controllers/DonorController.ts +++ b/src/controllers/DonorController.ts @@ -2,9 +2,8 @@ import { Authorized, Body, Delete, Get, JsonController, OnUndefined, Param, Post import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi'; import { getConnectionManager, Repository } from 'typeorm'; import { DonorIdsNotMatchingError, DonorNotFoundError } from '../errors/DonorErrors'; -import { RunnerIdsNotMatchingError } from '../errors/RunnerErrors'; import { CreateDonor } from '../models/actions/CreateDonor'; -import { UpdateRunner } from '../models/actions/UpdateRunner'; +import { UpdateDonor } from '../models/actions/UpdateDonor'; import { Donor } from '../models/entities/Donor'; import { ResponseDonor } from '../models/responses/ResponseDonor'; import { ResponseEmpty } from '../models/responses/ResponseEmpty'; @@ -68,19 +67,19 @@ export class DonorController { @ResponseSchema(DonorNotFoundError, { statusCode: 404 }) @ResponseSchema(DonorIdsNotMatchingError, { statusCode: 406 }) @OpenAPI({ description: "Update the runner whose id you provided.
Please remember that ids can't be changed." }) - async put(@Param('id') id: number, @Body({ validate: true }) runner: UpdateRunner) { - let oldRunner = await this.donorRepository.findOne({ id: id }, { relations: ['group'] }); + async put(@Param('id') id: number, @Body({ validate: true }) donor: UpdateDonor) { + let oldDonor = await this.donorRepository.findOne({ id: id }); - if (!oldRunner) { + if (!oldDonor) { throw new DonorNotFoundError(); } - if (oldRunner.id != runner.id) { - throw new RunnerIdsNotMatchingError(); + if (oldDonor.id != donor.id) { + throw new DonorIdsNotMatchingError(); } - await this.donorRepository.save(await runner.updateRunner(oldRunner)); - return new ResponseDonor(await this.donorRepository.findOne({ id: id }, { relations: ['scans', 'group'] })); + await this.donorRepository.save(await donor.updateDonor(oldDonor)); + return new ResponseDonor(await this.donorRepository.findOne({ id: id })); } @Delete('/:id') diff --git a/src/models/actions/CreateDonor.ts b/src/models/actions/CreateDonor.ts index 8520f5a..ec7c983 100644 --- a/src/models/actions/CreateDonor.ts +++ b/src/models/actions/CreateDonor.ts @@ -12,7 +12,7 @@ export class CreateDonor extends CreateParticipant { */ @IsBoolean() @IsOptional() - receiptNeeded: boolean = false; + receiptNeeded?: boolean = false; /** * Creates a new Donor entity from this. diff --git a/src/models/actions/UpdateDonor.ts b/src/models/actions/UpdateDonor.ts new file mode 100644 index 0000000..9ace6f9 --- /dev/null +++ b/src/models/actions/UpdateDonor.ts @@ -0,0 +1,39 @@ +import { IsBoolean, IsInt, IsOptional } from 'class-validator'; +import { Donor } from '../entities/Donor'; +import { CreateParticipant } from './CreateParticipant'; + +/** + * This class is used to update a Donor entity (via put request). + */ +export class UpdateDonor extends CreateParticipant { + + /** + * The updated donor's id. + * This shouldn't have changed but it is here in case anyone ever wants to enable id changes (whyever they would want to). + */ + @IsInt() + id: number; + + /** + * Does the updated donor need a receipt? + */ + @IsBoolean() + @IsOptional() + receiptNeeded?: boolean; + + + /** + * Updates a provided Donor entity based on this. + */ + public async updateDonor(donor: Donor): Promise { + donor.firstname = this.firstname; + donor.middlename = this.middlename; + donor.lastname = this.lastname; + donor.phone = this.phone; + donor.email = this.email; + donor.receiptNeeded = this.receiptNeeded; + donor.address = await this.getAddress(); + + return donor; + } +} \ No newline at end of file