From 4494afc64b433d26b54a293fe156d13c40faad95 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Thu, 1 May 2025 16:02:28 +0200 Subject: [PATCH] feat(runners): Include collected distance donation amount in runner detail --- src/controllers/RunnerController.ts | 2 +- src/models/responses/ResponseRunner.ts | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/controllers/RunnerController.ts b/src/controllers/RunnerController.ts index c35c9ad..454f08d 100644 --- a/src/controllers/RunnerController.ts +++ b/src/controllers/RunnerController.ts @@ -60,7 +60,7 @@ export class RunnerController { @OnUndefined(RunnerNotFoundError) @OpenAPI({ description: 'Lists all information about the runner whose id got provided.' }) async getOne(@Param('id') id: number) { - let runner = await this.runnerRepository.findOne({ id: id }, { relations: ['scans', 'group', 'group.parentGroup', 'scans.track', 'cards'] }) + let runner = await this.runnerRepository.findOne({ id: id }, { relations: ['scans', 'group', 'group.parentGroup', 'scans.track', 'cards', 'distanceDonations'] }) if (!runner) { throw new RunnerNotFoundError(); } return new ResponseRunner(runner, true); } diff --git a/src/models/responses/ResponseRunner.ts b/src/models/responses/ResponseRunner.ts index e3ae2e0..6d59516 100644 --- a/src/models/responses/ResponseRunner.ts +++ b/src/models/responses/ResponseRunner.ts @@ -27,6 +27,13 @@ export class ResponseRunner extends ResponseParticipant implements IResponse { @IsInt() distance: number; + /** + * The runner's current donation amount based on distance. + * Only available for queries for single runners. + */ + @IsInt() + donationAmount: number; + /** * The runner's group. */ @@ -50,6 +57,10 @@ export class ResponseRunner extends ResponseParticipant implements IResponse { else { this.distance = runner.validScans.reduce((sum, current) => sum + current.distance, 0); } if (runner.group) { this.group = runner.group.toResponse(); } + if (runner.distanceDonations) { + this.donationAmount = runner.distanceDonations.reduce((sum, current) => sum + (current.amountPerDistance * runner.distance / 1000), 0); + } + if (generateSelfServiceLink) { const token = JwtCreator.createSelfService(runner); this.selfserviceLink = `${process.env.SELFSERVICE_URL}/profile/${token}`;