diff --git a/src/controllers/StatsController.ts b/src/controllers/StatsController.ts index 477ba19..ea402e5 100644 --- a/src/controllers/StatsController.ts +++ b/src/controllers/StatsController.ts @@ -1,6 +1,7 @@ -import { Get, JsonController } from 'routing-controllers'; +import { Get, JsonController, UseBefore } from 'routing-controllers'; import { OpenAPI } from 'routing-controllers-openapi'; import { getConnection } from 'typeorm'; +import StatsAuth from '../middlewares/StatsAuth'; import { Donation } from '../models/entities/Donation'; import { Runner } from '../models/entities/Runner'; import { RunnerOrganisation } from '../models/entities/RunnerOrganisation'; @@ -31,4 +32,26 @@ export class StatsController { "total_donation_amount": donations.reduce((sum, current) => sum + current.amount, 0), }; } + + @Get("/authorized") + @UseBefore(StatsAuth) + @OpenAPI({ description: "A demo endpoint for authorized stats." }) + async getAuthorized() { + let connection = getConnection(); + let runners = await connection.getRepository(Runner).find({ relations: ["scans"] }); + let teams = await connection.getRepository(RunnerTeam).find(); + let orgs = await connection.getRepository(RunnerOrganisation).find(); + let users = await connection.getRepository(User).find(); + let scans = await connection.getRepository(Scan).find(); + let donations = await connection.getRepository(Donation).find({ relations: ["runner", "runner.scans"] }); + return { + "total_runners": runners.length, + "total_teams": teams.length, + "total_orgs": orgs.length, + "total_users": users.length, + "total_scans": scans.filter(scan => { scan.valid === true }).length, + "total_distance": runners.reduce((sum, current) => sum + current.distance, 0), + "total_donation_amount": donations.reduce((sum, current) => sum + current.amount, 0), + }; + } } \ No newline at end of file