From 5415cd38a727e76632a01a4d2634a1777df5542c Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Tue, 8 Apr 2025 20:00:27 +0200 Subject: [PATCH] feat(runners): Generate selfservice urls on runner if requested or create/update/get single --- src/controllers/RunnerController.ts | 10 +++++----- src/models/responses/ResponseRunner.ts | 19 +++++++++++++++++-- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/controllers/RunnerController.ts b/src/controllers/RunnerController.ts index 98270da..c33284a 100644 --- a/src/controllers/RunnerController.ts +++ b/src/controllers/RunnerController.ts @@ -30,7 +30,7 @@ export class RunnerController { @Authorized("RUNNER:GET") @ResponseSchema(ResponseRunner, { isArray: true }) @OpenAPI({ description: 'Lists all runners from all teams/orgs.
This includes the runner\'s group and distance ran.' }) - async getAll(@QueryParam("page", { required: false }) page: number, @QueryParam("page_size", { required: false }) page_size: number = 100) { + async getAll(@QueryParam("page", { required: false }) page: number, @QueryParam("page_size", { required: false }) page_size: number = 100, @QueryParam("selfservice_links", { required: false }) selfservice_links: boolean = false) { let responseRunners: ResponseRunner[] = new Array(); let runners: Array; @@ -41,7 +41,7 @@ export class RunnerController { } runners.forEach(runner => { - responseRunners.push(new ResponseRunner(runner)); + responseRunners.push(new ResponseRunner(runner, selfservice_links)); }); return responseRunners; } @@ -55,7 +55,7 @@ export class RunnerController { async getOne(@Param('id') id: number) { let runner = await this.runnerRepository.findOne({ id: id }, { relations: ['scans', 'group', 'group.parentGroup', 'scans.track', 'cards'] }) if (!runner) { throw new RunnerNotFoundError(); } - return new ResponseRunner(runner); + return new ResponseRunner(runner, true); } @Get('/:id/scans') @@ -98,7 +98,7 @@ export class RunnerController { } runner = await this.runnerRepository.save(runner) - return new ResponseRunner(await this.runnerRepository.findOne(runner, { relations: ['scans', 'group', 'group.parentGroup', 'scans.track', 'cards'] })); + return new ResponseRunner(await this.runnerRepository.findOne(runner, { relations: ['scans', 'group', 'group.parentGroup', 'scans.track', 'cards'] }), true); } @Put('/:id') @@ -119,7 +119,7 @@ export class RunnerController { } await this.runnerRepository.save(await runner.update(oldRunner)); - return new ResponseRunner(await this.runnerRepository.findOne({ id: id }, { relations: ['scans', 'group', 'group.parentGroup', 'scans.track', 'cards'] })); + return new ResponseRunner(await this.runnerRepository.findOne({ id: id }, { relations: ['scans', 'group', 'group.parentGroup', 'scans.track', 'cards'] }), true); } @Delete('/:id') diff --git a/src/models/responses/ResponseRunner.ts b/src/models/responses/ResponseRunner.ts index 8ed39e1..e3ae2e0 100644 --- a/src/models/responses/ResponseRunner.ts +++ b/src/models/responses/ResponseRunner.ts @@ -1,7 +1,10 @@ import { IsInt, - IsObject + IsObject, + IsOptional, + IsString } from "class-validator"; +import { JwtCreator } from '../../jwtcreator'; import { Runner } from '../entities/Runner'; import { ResponseObjectType } from '../enums/ResponseObjectType'; import { IResponse } from './IResponse'; @@ -30,14 +33,26 @@ export class ResponseRunner extends ResponseParticipant implements IResponse { @IsObject() group: ResponseRunnerGroup; + /** + * A selfservice link for our new runner. + */ + @IsOptional() + @IsString() + selfserviceLink: string; + /** * Creates a ResponseRunner object from a runner. * @param runner The user the response shall be build for. */ - public constructor(runner: Runner) { + public constructor(runner: Runner, generateSelfServiceLink: boolean = false) { super(runner); if (!runner.scans) { this.distance = 0 } else { this.distance = runner.validScans.reduce((sum, current) => sum + current.distance, 0); } if (runner.group) { this.group = runner.group.toResponse(); } + + if (generateSelfServiceLink) { + const token = JwtCreator.createSelfService(runner); + this.selfserviceLink = `${process.env.SELFSERVICE_URL}/profile/${token}`; + } } }