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 { OpenAPI, ResponseSchema } from 'routing-controllers-openapi';
|
||||||
import { getConnection } from 'typeorm';
|
import { getConnection } from 'typeorm';
|
||||||
import StatsAuth from '../middlewares/StatsAuth';
|
import StatsAuth from '../middlewares/StatsAuth';
|
||||||
@ -7,6 +7,7 @@ import { Runner } from '../models/entities/Runner';
|
|||||||
import { RunnerOrganization } from '../models/entities/RunnerOrganization';
|
import { RunnerOrganization } from '../models/entities/RunnerOrganization';
|
||||||
import { RunnerTeam } from '../models/entities/RunnerTeam';
|
import { RunnerTeam } from '../models/entities/RunnerTeam';
|
||||||
import { Scan } from '../models/entities/Scan';
|
import { Scan } from '../models/entities/Scan';
|
||||||
|
import { TrackScan } from '../models/entities/TrackScan';
|
||||||
import { User } from '../models/entities/User';
|
import { User } from '../models/entities/User';
|
||||||
import { ResponseStats } from '../models/responses/ResponseStats';
|
import { ResponseStats } from '../models/responses/ResponseStats';
|
||||||
import { ResponseStatsOrgnisation } from '../models/responses/ResponseStatsOrganization';
|
import { ResponseStatsOrgnisation } from '../models/responses/ResponseStatsOrganization';
|
||||||
@ -61,13 +62,24 @@ export class StatsController {
|
|||||||
@Get("/runners/laptime")
|
@Get("/runners/laptime")
|
||||||
@UseBefore(StatsAuth)
|
@UseBefore(StatsAuth)
|
||||||
@ResponseSchema(ResponseStatsRunner, { isArray: true })
|
@ResponseSchema(ResponseStatsRunner, { isArray: true })
|
||||||
@OpenAPI({ description: "Returns the top ten runners by fastest laptime.", security: [{ "StatsApiToken": [] }, { "AuthToken": [] }, { "RefreshTokenCookie": [] }] })
|
@OpenAPI({ description: "Returns the top ten runners by fastest laptime on your selected track (track by id).", security: [{ "StatsApiToken": [] }, { "AuthToken": [] }, { "RefreshTokenCookie": [] }] })
|
||||||
async getTopRunnersByLaptime() {
|
async getTopRunnersByLaptime(@QueryParam("track") track: number) {
|
||||||
let runners = await getConnection().getRepository(Runner).find({ relations: ['scans', 'group', 'scans.track'] });
|
let scans = await getConnection().getRepository(TrackScan).find({ relations: ['runner', 'runner.group', 'track'] });
|
||||||
let topRunners = runners.sort((runner1, runner2) => runner1.distanceDonationAmount - runner2.distanceDonationAmount).slice(0, 10);
|
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>();
|
let responseRunners: ResponseStatsRunner[] = new Array<ResponseStatsRunner>();
|
||||||
topRunners.forEach(runner => {
|
topScans.forEach(scan => {
|
||||||
responseRunners.push(new ResponseStatsRunner(runner));
|
responseRunners.push(new ResponseStatsRunner(scan.runner, scan.lapTime));
|
||||||
});
|
});
|
||||||
return responseRunners;
|
return responseRunners;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user