Compare commits

..

24 Commits

Author SHA1 Message Date
1d82f65b0d Merge pull request 'Release 0.10.2' (#192) from dev into main
Some checks failed
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is failing
Reviewed-on: #192
Reviewed-by: Philipp Dormann <philipp@philippdormann.de>
2021-04-07 17:27:47 +00:00
610988ec16 🧾New changelog file version [CI SKIP] [skip ci]
All checks were successful
continuous-integration/drone/pr Build is passing
2021-04-07 17:20:21 +00:00
6e236ede14 🚀Bumped version to v0.10.2
All checks were successful
continuous-integration/drone/push Build is passing
2021-04-07 19:18:21 +02:00
b7ad5d3a31 🧾New changelog file version [CI SKIP] [skip ci] 2021-04-07 17:17:14 +00:00
a694ad225c Merge pull request 'stats/runners/laptime feature/190-runners_laptime' (#191) from feature/190-runners_laptime into dev
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #191
2021-04-07 17:16:33 +00:00
5633e85f41 added new ci secret
All checks were successful
continuous-integration/drone/pr Build is passing
ref #190
2021-04-07 18:13:00 +02:00
95e1eec313 Removed all useless console.logs
All checks were successful
continuous-integration/drone/pr Build is passing
ref #190
2021-04-07 16:41:10 +02:00
377d5dadb2 Potential fix for all remaining errors
All checks were successful
continuous-integration/drone/pr Build is passing
ref #190
2021-04-07 16:38:20 +02:00
4a294b1e17 Now resolving all relations for orgs by distance
Some checks failed
continuous-integration/drone/pr Build is failing
ref #190
2021-04-07 16:34:09 +02:00
720774fcf4 Added temp console log
ref #190
2021-04-07 16:31:36 +02:00
dcdbdd15ac Ptotential fix for stats failing
Some checks failed
continuous-integration/drone/pr Build is failing
ref #190
2021-04-07 16:28:48 +02:00
132b48cf2a Removed console log for passing tests
ref #190
2021-04-07 16:26:12 +02:00
23bd432c5f Resolved missing parentgroup relation
Some checks failed
continuous-integration/drone/pr Build is failing
ref #190
2021-04-07 16:23:13 +02:00
71b33ab05b Removed console logs for now working tests
ref #190
2021-04-07 16:21:01 +02:00
87f444c30d At least one fewer test should fail now
Some checks failed
continuous-integration/drone/pr Build is failing
ref #190
2021-04-07 16:17:37 +02:00
4a73eab134 Added temp console log for ci debugging
Some checks failed
continuous-integration/drone/pr Build is failing
ref #190
2021-04-07 16:10:36 +02:00
f8baca5ab2 Updated default docker-compose
ref #190
2021-04-07 16:10:22 +02:00
10221b9f2e Pinned testing container tag to prod container tag
Some checks failed
continuous-integration/drone/pr Build is failing
ref #190
2021-04-07 16:06:06 +02:00
1d8c8c8e9c Removed console log
Some checks failed
continuous-integration/drone/pr Build is failing
ref #190
2021-04-06 10:45:06 +02:00
4603a84f16 Reverted temp bugfix
ref #190
2021-04-06 10:43:54 +02:00
2cd8f3f7f3 Merge branch 'feature/190-runners_laptime' of git.odit.services:lfk/backend into feature/190-runners_laptime
Some checks failed
continuous-integration/drone/pr Build is failing
2021-04-06 10:15:35 +02:00
107eeeae7f Merge branch 'feature/190-runners_laptime' of git.odit.services:lfk/backend into feature/190-runners_laptime 2021-04-06 10:15:32 +02:00
b8767b8bd4 Merge branch 'feature/190-runners_laptime' of git.odit.services:lfk/backend into feature/190-runners_laptime
Some checks failed
continuous-integration/drone/pr Build is failing
2021-04-06 10:08:00 +02:00
bf686e89e0 Temp test logging workaround
ref #190
2021-04-06 10:07:59 +02:00
10 changed files with 101 additions and 19 deletions

View File

@@ -19,10 +19,17 @@ get:
path: odit-git-bot path: odit-git-bot
name: sshkey name: sshkey
---
kind: secret
name: ci_token
get:
path: odit-ci-bot
name: apikey
--- ---
kind: pipeline kind: pipeline
type: kubernetes type: kubernetes
name: tests:node_latest name: tests:node_14.15.1-alpine3.12
clone: clone:
disable: true disable: true
steps: steps:
@@ -32,7 +39,7 @@ steps:
- git clone $DRONE_REMOTE_URL . - git clone $DRONE_REMOTE_URL .
- git checkout $DRONE_SOURCE_BRANCH - git checkout $DRONE_SOURCE_BRANCH
- name: run tests - name: run tests
image: node:latest image: node:14.15.1-alpine3.12
commands: commands:
- yarn - yarn
- yarn test:ci - yarn test:ci
@@ -176,13 +183,13 @@ steps:
settings: settings:
urls: https://ci.odit.services/api/repos/lfk/lfk-client-node/builds?SOURCE_TAG=${DRONE_TAG} urls: https://ci.odit.services/api/repos/lfk/lfk-client-node/builds?SOURCE_TAG=${DRONE_TAG}
bearer: bearer:
from_secret: BOT_DRONE_KEY from_secret: ci_token
- name: trigger js lib build - name: trigger js lib build
image: idcooldi/drone-webhook image: idcooldi/drone-webhook
settings: settings:
urls: https://ci.odit.services/api/repos/lfk/lfk-client-js/builds?SOURCE_TAG=${DRONE_TAG} urls: https://ci.odit.services/api/repos/lfk/lfk-client-js/builds?SOURCE_TAG=${DRONE_TAG}
bearer: bearer:
from_secret: BOT_DRONE_KEY from_secret: ci_token
trigger: trigger:
event: event:
- tag - tag

View File

@@ -2,8 +2,50 @@
All notable changes to this project will be documented in this file. Dates are displayed in UTC. All notable changes to this project will be documented in this file. Dates are displayed in UTC.
#### [v0.10.2](https://git.odit.services/lfk/backend/compare/v0.10.1...v0.10.2)
- Added first selfservice test [`057ae0d`](https://git.odit.services/lfk/backend/commit/057ae0d79758cd627d6d128406a0d201b6b7ad9b)
- 🧾New changelog file version [CI SKIP] [skip ci] [`b7ad5d3`](https://git.odit.services/lfk/backend/commit/b7ad5d3a31b8b4f5960852d3ac38af133719ebcd)
- First try of the laptime sort [`4471e57`](https://git.odit.services/lfk/backend/commit/4471e57438582d55ff846fd69c2cfcc26b40df2a)
- Potential fix for all remaining errors [`377d5da`](https://git.odit.services/lfk/backend/commit/377d5dadb2a14cb2d70e0b2dc77026f51b3fb51c)
- At least one fewer test should fail now [`87f444c`](https://git.odit.services/lfk/backend/commit/87f444c30d69d65a9f918c63631a859a389eeee3)
- Tried workaround for no availdable stats [`8f0f795`](https://git.odit.services/lfk/backend/commit/8f0f795a709db216396998b68b8bbd64ff4d44ff)
- Reverted temp bugfix [`4603a84`](https://git.odit.services/lfk/backend/commit/4603a84f16fb53a14d1792447100f5b470969dd0)
- Fixed sorting algo [`988f17a`](https://git.odit.services/lfk/backend/commit/988f17a795bb2d867e9d1d8e78051dff1a14ec30)
- Added runners stats tests [`7111068`](https://git.odit.services/lfk/backend/commit/7111068361e00cc1308664a3ae650a56e28c015c)
- Added basic laptime endpoint [`cb71fcd`](https://git.odit.services/lfk/backend/commit/cb71fcd13bc61e6214e2fd7b70e72094749463d3)
- Added orgs by donations stats tests [`d4a02e7`](https://git.odit.services/lfk/backend/commit/d4a02e7db2ff4976be21605e31aac2f3c82a49c0)
- Added teams stats endpoint tests [`b9a7dc8`](https://git.odit.services/lfk/backend/commit/b9a7dc84f05441445453193974b2a793b5197fa5)
- Now resolving all missing relations [`257f320`](https://git.odit.services/lfk/backend/commit/257f320ee3bf6429c4314c64023520366f9f730b)
- Added min laptime to StatsRunner [`51daf96`](https://git.odit.services/lfk/backend/commit/51daf969cf74792b2c2f2f16ce4359d9fca47bc8)
- Fixed sorting [`7b15c2d`](https://git.odit.services/lfk/backend/commit/7b15c2d88b14e7279aad97b0c950202ddb5acaaa)
- Fixed top-ten bein top 9 [`a6a526d`](https://git.odit.services/lfk/backend/commit/a6a526dc5d8b1613ea34e82e477081349e764aec)
- added new ci secret [`5633e85`](https://git.odit.services/lfk/backend/commit/5633e85f41cb69b10fd8a86f57f1bd2f50848f7b)
- Added temp console log for test [`22cae39`](https://git.odit.services/lfk/backend/commit/22cae39bd351ca285880e50187ea0d46a7a26437)
- Added temp console log for ci debugging [`4a73eab`](https://git.odit.services/lfk/backend/commit/4a73eab134c3a9f58771be996bc8811b62cf378e)
- Temp disabled runners by donations test [`0b07a53`](https://git.odit.services/lfk/backend/commit/0b07a53ed209c6193ead3c4d199545e22333ab32)
- Updated default docker-compose [`f8baca5`](https://git.odit.services/lfk/backend/commit/f8baca5ab2c56b906751bc7edd71477456ad91f3)
- Removed all useless console.logs [`95e1eec`](https://git.odit.services/lfk/backend/commit/95e1eec313a79458dd75307a9d0f8319af0d0904)
- Resolved missing parentgroup relation [`23bd432`](https://git.odit.services/lfk/backend/commit/23bd432c5f33a0863217120d97e2e4ea52a08baf)
- Removed console logs for now working tests [`71b33ab`](https://git.odit.services/lfk/backend/commit/71b33ab05b53b62c8b271bd2995c94b2fc212dfd)
- Fixed typo in test [`cbcb829`](https://git.odit.services/lfk/backend/commit/cbcb829fbde3a4a5e7f94de5dcf24d854c5fc257)
- Ptotential fix for stats failing [`dcdbdd1`](https://git.odit.services/lfk/backend/commit/dcdbdd15acfe6eef4220b7ed66db60d78107d1f9)
- 🚀Bumped version to v0.10.2 [`6e236ed`](https://git.odit.services/lfk/backend/commit/6e236ede145e164ee84543fb62404b4776550973)
- Merge pull request 'stats/runners/laptime feature/190-runners_laptime' (#191) from feature/190-runners_laptime into dev [`a694ad2`](https://git.odit.services/lfk/backend/commit/a694ad225c68fa23152402acba871c857433cc70)
- 🧾New changelog file version [CI SKIP] [skip ci] [`dd6d799`](https://git.odit.services/lfk/backend/commit/dd6d799c847fc96aec1be8f2667ad371890076fb)
- Pinned testing container tag to prod container tag [`10221b9`](https://git.odit.services/lfk/backend/commit/10221b9f2e4493080f3ff095d9772bcfd0ac50eb)
- Now resolving all relations for orgs by distance [`4a294b1`](https://git.odit.services/lfk/backend/commit/4a294b1e17c44294274b06748ec8141812c2d217)
- Added temp console log [`720774f`](https://git.odit.services/lfk/backend/commit/720774fcf47c38601ab88d5d74cfcd0e47b21acf)
- Removed console log for passing tests [`132b48c`](https://git.odit.services/lfk/backend/commit/132b48cf2a9e990a5e830c744ed8244bd25e8b3a)
- Removed console log [`1d8c8c8`](https://git.odit.services/lfk/backend/commit/1d8c8c8e9cefa58449f7abb2481d9396fe37ba20)
- Temp test logging workaround [`bf686e8`](https://git.odit.services/lfk/backend/commit/bf686e89e02998ccc80c838ef890c736c252634c)
- Temp test logging workaround [`6163f0a`](https://git.odit.services/lfk/backend/commit/6163f0a90b3721d3a1488f89cbb39ddff7152241)
- Removed test for content type [`63964fb`](https://git.odit.services/lfk/backend/commit/63964fbf2c41d9b90f995f056e9db65ab07d54a8)
#### [v0.10.1](https://git.odit.services/lfk/backend/compare/v0.10.0...v0.10.1) #### [v0.10.1](https://git.odit.services/lfk/backend/compare/v0.10.0...v0.10.1)
> 3 April 2021
- Merge pull request 'Release 0.10.1' (#189) from dev into main [`e89e07d`](https://git.odit.services/lfk/backend/commit/e89e07d0fc99f14148b01204fb8ed39e2da77e38) - Merge pull request 'Release 0.10.1' (#189) from dev into main [`e89e07d`](https://git.odit.services/lfk/backend/commit/e89e07d0fc99f14148b01204fb8ed39e2da77e38)
- 🧾New changelog file version [CI SKIP] [skip ci] [`69afd4d`](https://git.odit.services/lfk/backend/commit/69afd4d5877401eb46df430f43a7feb273abda1e) - 🧾New changelog file version [CI SKIP] [skip ci] [`69afd4d`](https://git.odit.services/lfk/backend/commit/69afd4d5877401eb46df430f43a7feb273abda1e)
- 🚀Bumped version to v0.10.1 [`24d152f`](https://git.odit.services/lfk/backend/commit/24d152fdc8fe17fffa2f2a718d7145ba8a91d79c) - 🚀Bumped version to v0.10.1 [`24d152f`](https://git.odit.services/lfk/backend/commit/24d152fdc8fe17fffa2f2a718d7145ba8a91d79c)

View File

@@ -11,8 +11,12 @@ services:
DB_PORT: bla DB_PORT: bla
DB_USER: bla DB_USER: bla
DB_PASSWORD: bla DB_PASSWORD: bla
DB_NAME: dev.sqlite DB_NAME: ./db.sqlite
NODE_ENV: production NODE_ENV: production
POSTALCODE_COUNTRYCODE: DE
SEED_TEST_DATA: "false"
MAILER_URL: https://dev.lauf-fuer-kaya.de/mailer
MAILER_KEY: asdasd
# APP_PORT: 4010 # APP_PORT: 4010
# DB_TYPE: postgres # DB_TYPE: postgres
# DB_HOST: backend_db # DB_HOST: backend_db

View File

@@ -1,6 +1,6 @@
{ {
"name": "@odit/lfk-backend", "name": "@odit/lfk-backend",
"version": "0.10.1", "version": "0.10.2",
"main": "src/app.ts", "main": "src/app.ts",
"repository": "https://git.odit.services/lfk/backend", "repository": "https://git.odit.services/lfk/backend",
"author": { "author": {

View File

@@ -41,7 +41,6 @@ export class StatsController {
return []; return [];
} }
let topRunners = runners.sort((runner1, runner2) => runner2.distance - runner1.distance).slice(0, 10); let topRunners = runners.sort((runner1, runner2) => runner2.distance - runner1.distance).slice(0, 10);
return runners;
let responseRunners: ResponseStatsRunner[] = new Array<ResponseStatsRunner>(); let responseRunners: ResponseStatsRunner[] = new Array<ResponseStatsRunner>();
topRunners.forEach(runner => { topRunners.forEach(runner => {
responseRunners.push(new ResponseStatsRunner(runner)); responseRunners.push(new ResponseStatsRunner(runner));
@@ -54,7 +53,7 @@ export class StatsController {
@ResponseSchema(ResponseStatsRunner, { isArray: true }) @ResponseSchema(ResponseStatsRunner, { isArray: true })
@OpenAPI({ description: "Returns the top ten runners by donations.", security: [{ "StatsApiToken": [] }, { "AuthToken": [] }, { "RefreshTokenCookie": [] }] }) @OpenAPI({ description: "Returns the top ten runners by donations.", security: [{ "StatsApiToken": [] }, { "AuthToken": [] }, { "RefreshTokenCookie": [] }] })
async getTopRunnersByDonations() { async getTopRunnersByDonations() {
let runners = await getConnection().getRepository(Runner).find({ relations: ['scans', 'group', 'distanceDonations', 'scans.track'] }); let runners = await getConnection().getRepository(Runner).find({ relations: ['group', 'distanceDonations', 'distanceDonations.runner', 'distanceDonations.runner.scans', 'distanceDonations.runner.scans.track'] });
if (!runners || runners.length == 0) { if (!runners || runners.length == 0) {
return []; return [];
} }
@@ -107,7 +106,7 @@ export class StatsController {
@ResponseSchema(ResponseStatsTeam, { isArray: true }) @ResponseSchema(ResponseStatsTeam, { isArray: true })
@OpenAPI({ description: "Returns the top ten teams by distance.", security: [{ "StatsApiToken": [] }, { "AuthToken": [] }, { "RefreshTokenCookie": [] }] }) @OpenAPI({ description: "Returns the top ten teams by distance.", security: [{ "StatsApiToken": [] }, { "AuthToken": [] }, { "RefreshTokenCookie": [] }] })
async getTopTeamsByDistance() { async getTopTeamsByDistance() {
let teams = await getConnection().getRepository(RunnerTeam).find({ relations: ['runners', 'runners.scans', 'runners.distanceDonations', 'runners.scans.track'] }); let teams = await getConnection().getRepository(RunnerTeam).find({ relations: ['parentGroup', 'runners', 'runners.scans', 'runners.scans.track'] });
if (!teams || teams.length == 0) { if (!teams || teams.length == 0) {
return []; return [];
} }
@@ -124,7 +123,7 @@ export class StatsController {
@ResponseSchema(ResponseStatsTeam, { isArray: true }) @ResponseSchema(ResponseStatsTeam, { isArray: true })
@OpenAPI({ description: "Returns the top ten teams by donations.", security: [{ "StatsApiToken": [] }, { "AuthToken": [] }, { "RefreshTokenCookie": [] }] }) @OpenAPI({ description: "Returns the top ten teams by donations.", security: [{ "StatsApiToken": [] }, { "AuthToken": [] }, { "RefreshTokenCookie": [] }] })
async getTopTeamsByDonations() { async getTopTeamsByDonations() {
let teams = await getConnection().getRepository(RunnerTeam).find({ relations: ['runners', 'runners.scans', 'runners.distanceDonations', 'runners.scans.track'] }); let teams = await getConnection().getRepository(RunnerTeam).find({ relations: ['parentGroup', 'runners', 'runners.scans', 'runners.distanceDonations', 'runners.scans.track'] });
if (!teams || teams.length == 0) { if (!teams || teams.length == 0) {
return []; return [];
} }
@@ -158,7 +157,7 @@ export class StatsController {
@ResponseSchema(ResponseStatsOrgnisation, { isArray: true }) @ResponseSchema(ResponseStatsOrgnisation, { isArray: true })
@OpenAPI({ description: "Returns the top ten organizations by donations.", security: [{ "StatsApiToken": [] }, { "AuthToken": [] }, { "RefreshTokenCookie": [] }] }) @OpenAPI({ description: "Returns the top ten organizations by donations.", security: [{ "StatsApiToken": [] }, { "AuthToken": [] }, { "RefreshTokenCookie": [] }] })
async getTopOrgsByDonations() { async getTopOrgsByDonations() {
let orgs = await getConnection().getRepository(RunnerOrganization).find({ relations: ['runners', 'runners.scans', 'runners.distanceDonations', 'runners.scans.track', 'teams', 'teams.runners', 'teams.runners.scans', 'teams.runners.distanceDonations', 'teams.runners.scans.track'] }); let orgs = await getConnection().getRepository(RunnerOrganization).find({ relations: ['runners', 'runners.distanceDonations', 'runners.distanceDonations.runner', 'runners.distanceDonations.runner.scans', 'runners.distanceDonations.runner.scans.track', 'teams', 'teams.runners', 'teams.runners.distanceDonations', 'teams.runners.distanceDonations.runner', 'teams.runners.distanceDonations.runner.scans', 'teams.runners.distanceDonations.runner.scans.track'] });
if (!orgs || orgs.length == 0) { if (!orgs || orgs.length == 0) {
return []; return [];
} }

View File

@@ -51,6 +51,9 @@ export abstract class RunnerGroup {
*/ */
@IsInt() @IsInt()
public get distance(): number { public get distance(): number {
if (!this.runners || this.runners.length == 0) {
return 0;
}
return this.runners.reduce((sum, current) => sum + current.distance, 0); return this.runners.reduce((sum, current) => sum + current.distance, 0);
} }

View File

@@ -49,7 +49,15 @@ export class ResponseStatsOrgnisation implements IResponse {
public constructor(org: RunnerOrganization) { public constructor(org: RunnerOrganization) {
this.name = org.name; this.name = org.name;
this.id = org.id; this.id = org.id;
try {
this.distance = org.distance; this.distance = org.distance;
} catch {
this.distance = -1;
}
try {
this.donationAmount = org.distanceDonationAmount; this.donationAmount = org.distanceDonationAmount;
} catch {
this.donationAmount = -1;
}
} }
} }

View File

@@ -76,10 +76,22 @@ export class ResponseStatsRunner implements IResponse {
public constructor(runner: Runner, laptime?: number) { public constructor(runner: Runner, laptime?: number) {
this.id = runner.id; this.id = runner.id;
this.firstname = runner.firstname; this.firstname = runner.firstname;
if (runner.firstname) {
this.middlename = runner.middlename; this.middlename = runner.middlename;
}
this.lastname = runner.lastname; this.lastname = runner.lastname;
try {
this.distance = runner.distance; this.distance = runner.distance;
}
catch {
this.distance = -1;
}
try {
this.donationAmount = runner.distanceDonationAmount; this.donationAmount = runner.distanceDonationAmount;
}
catch {
this.donationAmount = -1;
}
if (laptime) { if (laptime) {
this.minLaptime = laptime; this.minLaptime = laptime;
} }

View File

@@ -57,7 +57,15 @@ export class ResponseStatsTeam implements IResponse {
this.name = team.name; this.name = team.name;
this.id = team.id; this.id = team.id;
this.parent = team.parentGroup.toResponse(); this.parent = team.parentGroup.toResponse();
try {
this.distance = team.distance; this.distance = team.distance;
} catch {
this.distance = -1;
}
try {
this.donationAmount = team.distanceDonationAmount; this.donationAmount = team.distanceDonationAmount;
} catch {
this.donationAmount = -1;
}
} }
} }

View File

@@ -52,7 +52,6 @@ describe('GET /api/stats/runners/* should return 200', () => {
}); });
it('get by donations w/ auth should return 200', async () => { it('get by donations w/ auth should return 200', async () => {
const res = await axios.get(base + '/api/stats/runners/donations', axios_config_stats); const res = await axios.get(base + '/api/stats/runners/donations', axios_config_stats);
console.log(res.data)
expect(res.status).toEqual(200); expect(res.status).toEqual(200);
expect(res.headers['content-type']).toContain("application/json"); expect(res.headers['content-type']).toContain("application/json");
}); });