Compare commits
6 Commits
Author | SHA1 | Date |
---|---|---|
Nicolai Ort | b9fe9f1c24 | |
Nicolai Ort | b25b0db760 | |
Nicolai Ort | fe59e3a557 | |
Nicolai Ort | 42c23a5883 | |
Nicolai Ort | 6ee5328dbc | |
Nicolai Ort | 6f39ac42da |
11
CHANGELOG.md
11
CHANGELOG.md
|
@ -2,9 +2,20 @@
|
|||
|
||||
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
|
||||
|
||||
#### [v1.1.0](https://git.odit.services/lfk/backend/compare/v1.0.1...v1.1.0)
|
||||
|
||||
- feat(stats): Added donation count and donor count to stats [`6f39ac4`](https://git.odit.services/lfk/backend/commit/6f39ac42dafc2a589bbb2256b0417f3e774ae174)
|
||||
- Added average donation per distance to stats [`fe59e3a`](https://git.odit.services/lfk/backend/commit/fe59e3a557903cf555d4c50098e935c49ca1fac4)
|
||||
- Added hints [`b25b0db`](https://git.odit.services/lfk/backend/commit/b25b0db76071ef8d50cc60e950a399dc060a2a9f)
|
||||
- Added calls to controller [`6ee5328`](https://git.odit.services/lfk/backend/commit/6ee5328dbc404603d19db3a5173ae4def560a9c9)
|
||||
- Formatting [`42c23a5`](https://git.odit.services/lfk/backend/commit/42c23a5883dacda4e0147842d448b3ad35b197b1)
|
||||
|
||||
#### [v1.0.1](https://git.odit.services/lfk/backend/compare/v1.0.0...v1.0.1)
|
||||
|
||||
> 18 April 2023
|
||||
|
||||
- fix(pagination) page=0 resulted in false thx JS [`fcee390`](https://git.odit.services/lfk/backend/commit/fcee3909f4c4664115cc7ecb94f30e0dd8e78ce0)
|
||||
- 🚀Bumped version to v1.0.1 [`301f334`](https://git.odit.services/lfk/backend/commit/301f33467489a8533bdac11fbd10efd1b791f5e3)
|
||||
|
||||
### [v1.0.0](https://git.odit.services/lfk/backend/compare/v0.15.4...v1.0.0)
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@odit/lfk-backend",
|
||||
"version": "1.0.1",
|
||||
"version": "1.1.0",
|
||||
"main": "src/app.ts",
|
||||
"repository": "https://git.odit.services/lfk/backend",
|
||||
"engines": {
|
||||
|
|
|
@ -3,6 +3,7 @@ import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi';
|
|||
import { getConnection } from 'typeorm';
|
||||
import StatsAuth from '../middlewares/StatsAuth';
|
||||
import { Donation } from '../models/entities/Donation';
|
||||
import { Donor } from '../models/entities/Donor';
|
||||
import { Runner } from '../models/entities/Runner';
|
||||
import { RunnerOrganization } from '../models/entities/RunnerOrganization';
|
||||
import { RunnerTeam } from '../models/entities/RunnerTeam';
|
||||
|
@ -27,6 +28,7 @@ export class StatsController {
|
|||
const orgs = await connection.getRepository(RunnerOrganization).count();
|
||||
const users = await connection.getRepository(User).count();
|
||||
const scans = await connection.getRepository(Scan).count({ where: { valid: true } });
|
||||
|
||||
const distance_query = await connection.getRepository(Scan).createQueryBuilder('scan')
|
||||
.leftJoinAndSelect("scan.track", "track").where("scan.valid = TRUE")
|
||||
.select("SUM(track.distance)", "sum_track").addSelect("SUM(_distance)", "sum_distance")
|
||||
|
@ -35,8 +37,11 @@ export class StatsController {
|
|||
if (distance_query.sum_distance) {
|
||||
distace += parseInt(distance_query.sum_distance)
|
||||
}
|
||||
|
||||
let donations = await connection.getRepository(Donation).find({ relations: ['runner', 'runner.scans', 'runner.scans.track'] });
|
||||
return new ResponseStats(runners, teams, orgs, users, scans, donations, distace)
|
||||
const donors = await connection.getRepository(Donor).count();
|
||||
|
||||
return new ResponseStats(runners, teams, orgs, users, scans, donations, distace, donors)
|
||||
}
|
||||
|
||||
@Get("/runners/distance")
|
||||
|
|
|
@ -58,12 +58,30 @@ export class ResponseStats implements IResponse {
|
|||
@IsInt()
|
||||
total_donation: number;
|
||||
|
||||
/**
|
||||
* The total donation count (cent).
|
||||
*/
|
||||
@IsInt()
|
||||
total_donations: number;
|
||||
|
||||
/**
|
||||
* The total donor count.
|
||||
*/
|
||||
@IsInt()
|
||||
total_donors: number;
|
||||
|
||||
/**
|
||||
* The average distance ran per runner.
|
||||
*/
|
||||
@IsInt()
|
||||
average_distance: number;
|
||||
|
||||
/**
|
||||
* The average donation per distance (cent).
|
||||
*/
|
||||
@IsInt()
|
||||
average_donation: number;
|
||||
|
||||
/**
|
||||
* Creates a new stats response containing some basic statistics for a dashboard or public display.
|
||||
* @param runners Array containing all runners - the following relations have to be resolved: scans, scans.track
|
||||
|
@ -73,7 +91,7 @@ export class ResponseStats implements IResponse {
|
|||
* @param scans Array containing all scans - no relations have to be resolved.
|
||||
* @param donations Array containing all donations - the following relations have to be resolved: runner, runner.scans, runner.scans.track
|
||||
*/
|
||||
public constructor(runners: number, teams: number, orgs: number, users: number, scans: number, donations: Donation[], distance: number) {
|
||||
public constructor(runners: number, teams: number, orgs: number, users: number, scans: number, donations: Donation[], distance: number, donors: number) {
|
||||
this.total_runners = runners;
|
||||
this.total_teams = teams;
|
||||
this.total_orgs = orgs;
|
||||
|
@ -81,6 +99,9 @@ export class ResponseStats implements IResponse {
|
|||
this.total_scans = scans;
|
||||
this.total_distance = distance;
|
||||
this.total_donation = donations.reduce((sum, current) => sum + current.amount, 0);
|
||||
this.total_donations = donations.length;
|
||||
this.average_donation = this.total_donation / this.total_donations
|
||||
this.total_donors = donors;
|
||||
this.average_distance = this.total_distance / this.total_runners;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue