From 1b7424f7501075ede10cc91e3f4de096065b4533 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Tue, 29 Dec 2020 15:25:40 +0100 Subject: [PATCH] Added stats endpoint with some basic stats (more to come) - to be tested ref #56 --- src/controllers/StatsController.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/controllers/StatsController.ts diff --git a/src/controllers/StatsController.ts b/src/controllers/StatsController.ts new file mode 100644 index 0000000..580b2bd --- /dev/null +++ b/src/controllers/StatsController.ts @@ -0,0 +1,28 @@ +import { Get, JsonController } from 'routing-controllers'; +import { OpenAPI } from 'routing-controllers-openapi'; +import { getConnection } from 'typeorm'; +import { Donation } from '../models/entities/Donation'; +import { Runner } from '../models/entities/Runner'; +import { Scan } from '../models/entities/Scan'; +import { User } from '../models/entities/User'; + +@JsonController('/stats') +export class StatsController { + + @Get() + @OpenAPI({ description: "A very basic stats endpoint providing basic counters for a dashboard or simmilar" }) + async get() { + let connection = getConnection(); + let runners = await connection.getRepository(Runner).find({ relations: ["scans"] }); + 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_users": users.length, + "total_scans": scans.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