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