From a82fc0fb9e9c3cbdc6be299b27164c0811e58775 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Thu, 21 Jan 2021 15:55:29 +0100 Subject: [PATCH 1/3] Added a /runners/id/scans endpoint ref #113 --- src/controllers/RunnerController.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/controllers/RunnerController.ts b/src/controllers/RunnerController.ts index 389697b..5bcd0d3 100644 --- a/src/controllers/RunnerController.ts +++ b/src/controllers/RunnerController.ts @@ -8,6 +8,8 @@ import { UpdateRunner } from '../models/actions/update/UpdateRunner'; import { Runner } from '../models/entities/Runner'; import { ResponseEmpty } from '../models/responses/ResponseEmpty'; import { ResponseRunner } from '../models/responses/ResponseRunner'; +import { ResponseScan } from '../models/responses/ResponseScan'; +import { ResponseTrackScan } from '../models/responses/ResponseTrackScan'; import { DonationController } from './DonationController'; import { RunnerCardController } from './RunnerCardController'; import { ScanController } from './ScanController'; @@ -49,6 +51,24 @@ export class RunnerController { return new ResponseRunner(runner); } + @Get('/:id/scans') + @Authorized(["RUNNER:GET", "SCAN:GET"]) + @ResponseSchema(ResponseScan, { isArray: true }) + @ResponseSchema(ResponseTrackScan, { isArray: true }) + @ResponseSchema(RunnerNotFoundError, { statusCode: 404 }) + @OpenAPI({ description: 'Lists all scans of the runner whose id got provided.' }) + async getScans(@Param('id') id: number) { + let responseScans: ResponseScan[] = new Array(); + let runner = await this.runnerRepository.findOne({ id: id }, { relations: ['scans', 'scans.track', 'scans.station', 'scans.runner'] }) + if (!runner) { throw new RunnerNotFoundError(); } + + for (let scan of runner.scans) { + responseScans.push(scan.toResponse()); + } + + return responseScans; + } + @Post() @Authorized("RUNNER:CREATE") @ResponseSchema(ResponseRunner) From b5f3dec93bfe4180abbe9ce74094cb1269d0e686 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Thu, 21 Jan 2021 15:57:56 +0100 Subject: [PATCH 2/3] Added a "onlyValid" query param ref #113 --- src/controllers/RunnerController.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/controllers/RunnerController.ts b/src/controllers/RunnerController.ts index 5bcd0d3..fbaa381 100644 --- a/src/controllers/RunnerController.ts +++ b/src/controllers/RunnerController.ts @@ -56,14 +56,21 @@ export class RunnerController { @ResponseSchema(ResponseScan, { isArray: true }) @ResponseSchema(ResponseTrackScan, { isArray: true }) @ResponseSchema(RunnerNotFoundError, { statusCode: 404 }) - @OpenAPI({ description: 'Lists all scans of the runner whose id got provided.' }) - async getScans(@Param('id') id: number) { + @OpenAPI({ description: 'Lists all scans of the runner whose id got provided.
If you only want the valid scans just add the ?onlyValid=true query param.' }) + async getScans(@Param('id') id: number, onlyValid?: boolean) { let responseScans: ResponseScan[] = new Array(); let runner = await this.runnerRepository.findOne({ id: id }, { relations: ['scans', 'scans.track', 'scans.station', 'scans.runner'] }) if (!runner) { throw new RunnerNotFoundError(); } - for (let scan of runner.scans) { - responseScans.push(scan.toResponse()); + if (!onlyValid) { + for (let scan of runner.scans) { + responseScans.push(scan.toResponse()); + } + } + else { + for (let scan of runner.validScans) { + responseScans.push(scan.toResponse()); + } } return responseScans; From 26dff4f41829e8571231aff3c5d0e3a7c53559d8 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Thu, 21 Jan 2021 16:07:11 +0100 Subject: [PATCH 3/3] Added get tests for the /runner/scans endpoint ref #113 --- src/tests/scans/scans_get.spec.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/tests/scans/scans_get.spec.ts b/src/tests/scans/scans_get.spec.ts index da7d737..a4128b7 100644 --- a/src/tests/scans/scans_get.spec.ts +++ b/src/tests/scans/scans_get.spec.ts @@ -61,9 +61,17 @@ describe('adding + getting scans', () => { expect(res.status).toEqual(200); expect(res.headers['content-type']).toContain("application/json") }); - it('check if scans was added (no parameter validation)', async () => { + it('check if scans was added directly', async () => { const res = await axios.get(base + '/api/scans/' + added_scan.id, axios_config); expect(res.status).toEqual(200); expect(res.headers['content-type']).toContain("application/json"); + expect(res.data).toEqual(added_scan); + }); + it('check if scans was added via the runner/scans endpoint.', async () => { + const res = await axios.get(base + '/api/runners/' + added_runner.id + "/scans", axios_config); + expect(res.status).toEqual(200); + expect(res.headers['content-type']).toContain("application/json"); + added_scan.runner.distance = 0; + expect(res.data).toContainEqual(added_scan); }); }); \ No newline at end of file