diff --git a/src/controllers/StatsController.ts b/src/controllers/StatsController.ts index 8658ba6..829358a 100644 --- a/src/controllers/StatsController.ts +++ b/src/controllers/StatsController.ts @@ -1,4 +1,4 @@ -import { Get, JsonController, UseBefore } from 'routing-controllers'; +import { Get, JsonController, QueryParam, UseBefore } from 'routing-controllers'; import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi'; import { getConnection } from 'typeorm'; import StatsAuth from '../middlewares/StatsAuth'; @@ -7,6 +7,7 @@ import { Runner } from '../models/entities/Runner'; import { RunnerOrganization } from '../models/entities/RunnerOrganization'; import { RunnerTeam } from '../models/entities/RunnerTeam'; import { Scan } from '../models/entities/Scan'; +import { TrackScan } from '../models/entities/TrackScan'; import { User } from '../models/entities/User'; import { ResponseStats } from '../models/responses/ResponseStats'; import { ResponseStatsOrgnisation } from '../models/responses/ResponseStatsOrganization'; @@ -61,13 +62,24 @@ export class StatsController { @Get("/runners/laptime") @UseBefore(StatsAuth) @ResponseSchema(ResponseStatsRunner, { isArray: true }) - @OpenAPI({ description: "Returns the top ten runners by fastest laptime.", security: [{ "StatsApiToken": [] }, { "AuthToken": [] }, { "RefreshTokenCookie": [] }] }) - async getTopRunnersByLaptime() { - let runners = await getConnection().getRepository(Runner).find({ relations: ['scans', 'group', 'scans.track'] }); - let topRunners = runners.sort((runner1, runner2) => runner1.distanceDonationAmount - runner2.distanceDonationAmount).slice(0, 10); + @OpenAPI({ description: "Returns the top ten runners by fastest laptime on your selected track (track by id).", security: [{ "StatsApiToken": [] }, { "AuthToken": [] }, { "RefreshTokenCookie": [] }] }) + async getTopRunnersByLaptime(@QueryParam("track") track: number) { + let scans = await getConnection().getRepository(TrackScan).find({ relations: ['runner', 'runner.group', 'track'] }); + scans = scans.filter((s) => { s.track.id == track && s.valid == true }) + console.log(scans) + let topScans = new Array(); + let knownRunners = new Array(); + for (let i = 0; i < scans.length && topScans.length < 10; i++) { + const element = scans[i]; + if (!knownRunners.includes(element.runner)) { + topScans.push(element); + knownRunners.push(element.runner); + } + } + let responseRunners: ResponseStatsRunner[] = new Array(); - topRunners.forEach(runner => { - responseRunners.push(new ResponseStatsRunner(runner)); + topScans.forEach(scan => { + responseRunners.push(new ResponseStatsRunner(scan.runner, scan.lapTime)); }); return responseRunners; }