parent
51daf969cf
commit
4471e57438
|
@ -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<TrackScan>();
|
||||
let knownRunners = new Array<Runner>();
|
||||
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<ResponseStatsRunner>();
|
||||
topRunners.forEach(runner => {
|
||||
responseRunners.push(new ResponseStatsRunner(runner));
|
||||
topScans.forEach(scan => {
|
||||
responseRunners.push(new ResponseStatsRunner(scan.runner, scan.lapTime));
|
||||
});
|
||||
return responseRunners;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue