Compare commits
	
		
			10 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 9581185b24 | |||
| 2905884c02 | |||
| e9914e317b | |||
| 702070da66 | |||
| cc89ba8afb | |||
| 7c4ff42a3b | |||
| 8007117434 | |||
| 23fa78eb9d | |||
| 3b3e68900b | |||
| 3ff666fd3e | 
							
								
								
									
										25
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -2,8 +2,33 @@ | |||||||
|  |  | ||||||
| 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.15.1](https://git.odit.services/lfk/backend/compare/v0.15.0...v0.15.1) | ||||||
|  |  | ||||||
|  | - Faster trackscan creation by only loading the latest scan [`e9914e3`](https://git.odit.services/lfk/backend/commit/e9914e317b7fd78863cfd8549bad65da9292b7ca) | ||||||
|  | - Log batch time in mass scan script [`2905884`](https://git.odit.services/lfk/backend/commit/2905884c024d7f275b3ad2c2858a2f0911adb95b) | ||||||
|  | - Dont load cards with get all runners request [`702070d`](https://git.odit.services/lfk/backend/commit/702070da669cc605b93e6f5b62d712c28f079dd0) | ||||||
|  |  | ||||||
|  | #### [v0.15.0](https://git.odit.services/lfk/backend/compare/v0.14.6...v0.15.0) | ||||||
|  |  | ||||||
|  | > 15 April 2023 | ||||||
|  |  | ||||||
|  | - Added test script for creating mass scans [`8007117`](https://git.odit.services/lfk/backend/commit/80071174342d87199fcbd981cd8c92300b0a51e4) | ||||||
|  | - 🚀Bumped version to v0.15.0 [`cc89ba8`](https://git.odit.services/lfk/backend/commit/cc89ba8afb3120569613a889baf962555612e95a) | ||||||
|  | - Get all scans speed improvement [`23fa78e`](https://git.odit.services/lfk/backend/commit/23fa78eb9dcc01ecc036347f6703aacc0d163d7d) | ||||||
|  | - More scan request optimizations [`7c4ff42`](https://git.odit.services/lfk/backend/commit/7c4ff42a3b3e7b186e16c85a97d9ecc854a32cb0) | ||||||
|  |  | ||||||
|  | #### [v0.14.6](https://git.odit.services/lfk/backend/compare/v0.14.5...v0.14.6) | ||||||
|  |  | ||||||
|  | > 15 April 2023 | ||||||
|  |  | ||||||
|  | - 🚀Bumped version to v0.14.6 [`3b3e689`](https://git.odit.services/lfk/backend/commit/3b3e68900beca16cfff88dbef22540f77750d29b) | ||||||
|  | - Missing orm file [`3ff666f`](https://git.odit.services/lfk/backend/commit/3ff666fd3e84ac8cf41b30e9e17082b10548d55b) | ||||||
|  |  | ||||||
| #### [v0.14.5](https://git.odit.services/lfk/backend/compare/v0.14.4...v0.14.5) | #### [v0.14.5](https://git.odit.services/lfk/backend/compare/v0.14.4...v0.14.5) | ||||||
|  |  | ||||||
|  | > 15 April 2023 | ||||||
|  |  | ||||||
|  | - 🚀Bumped version to v0.14.5 [`4e44350`](https://git.odit.services/lfk/backend/commit/4e4435010fd7095e3b9742e207cba1b68cd6da3b) | ||||||
| - Entrypoint fix [`de9af5a`](https://git.odit.services/lfk/backend/commit/de9af5a90907dcfc9bfb1d5a56420eed8bb59922) | - Entrypoint fix [`de9af5a`](https://git.odit.services/lfk/backend/commit/de9af5a90907dcfc9bfb1d5a56420eed8bb59922) | ||||||
| - Fixed copy [`ac631f0`](https://git.odit.services/lfk/backend/commit/ac631f0af467446552478873b7b4802a9310f865) | - Fixed copy [`ac631f0`](https://git.odit.services/lfk/backend/commit/ac631f0af467446552478873b7b4802a9310f865) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -17,6 +17,7 @@ RUN pnpm run build \ | |||||||
| FROM registry.odit.services/hub/library/node:19.5.0-alpine3.16 as final | FROM registry.odit.services/hub/library/node:19.5.0-alpine3.16 as final | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
| COPY --from=build /app/package.json /app/package.json | COPY --from=build /app/package.json /app/package.json | ||||||
|  | COPY --from=build /app/ormconfig.js /app/ormconfig.js | ||||||
| COPY --from=build /app/dist /app/dist | COPY --from=build /app/dist /app/dist | ||||||
| COPY --from=build /app/node_modules /app/node_modules | COPY --from=build /app/node_modules /app/node_modules | ||||||
| ENTRYPOINT ["node", "/app/dist/app.js"] | ENTRYPOINT ["node", "/app/dist/app.js"] | ||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "@odit/lfk-backend", |   "name": "@odit/lfk-backend", | ||||||
|   "version": "0.14.5", |   "version": "0.15.1", | ||||||
|   "main": "src/app.ts", |   "main": "src/app.ts", | ||||||
|   "repository": "https://git.odit.services/lfk/backend", |   "repository": "https://git.odit.services/lfk/backend", | ||||||
|   "engines": { |   "engines": { | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| import { Authorized, Body, Delete, Get, JsonController, OnUndefined, Param, Post, Put, QueryParam } from 'routing-controllers'; | import { Authorized, Body, Delete, Get, JsonController, OnUndefined, Param, Post, Put, QueryParam } from 'routing-controllers'; | ||||||
| import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi'; | import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi'; | ||||||
| import { getConnectionManager, Repository } from 'typeorm'; | import { Repository, getConnectionManager } from 'typeorm'; | ||||||
| import { RunnerGroupNeededError, RunnerHasDistanceDonationsError, RunnerIdsNotMatchingError, RunnerNotFoundError } from '../errors/RunnerErrors'; | import { RunnerGroupNeededError, RunnerHasDistanceDonationsError, RunnerIdsNotMatchingError, RunnerNotFoundError } from '../errors/RunnerErrors'; | ||||||
| import { RunnerGroupNotFoundError } from '../errors/RunnerGroupErrors'; | import { RunnerGroupNotFoundError } from '../errors/RunnerGroupErrors'; | ||||||
| import { CreateRunner } from '../models/actions/create/CreateRunner'; | import { CreateRunner } from '../models/actions/create/CreateRunner'; | ||||||
| @@ -32,7 +32,7 @@ export class RunnerController { | |||||||
| 	@OpenAPI({ description: 'Lists all runners from all teams/orgs. <br> This includes the runner\'s group and distance ran.' }) | 	@OpenAPI({ description: 'Lists all runners from all teams/orgs. <br> This includes the runner\'s group and distance ran.' }) | ||||||
| 	async getAll() { | 	async getAll() { | ||||||
| 		let responseRunners: ResponseRunner[] = new Array<ResponseRunner>(); | 		let responseRunners: ResponseRunner[] = new Array<ResponseRunner>(); | ||||||
| 		const runners = await this.runnerRepository.find({ relations: ['scans', 'group', 'group.parentGroup', 'scans.track', 'cards'] }); | 		const runners = await this.runnerRepository.find({ relations: ['scans', 'group', 'group.parentGroup', 'scans.track'] }); | ||||||
| 		runners.forEach(runner => { | 		runners.forEach(runner => { | ||||||
| 			responseRunners.push(new ResponseRunner(runner)); | 			responseRunners.push(new ResponseRunner(runner)); | ||||||
| 		}); | 		}); | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| import { Request } from "express"; | import { Request } from "express"; | ||||||
| import { Authorized, Body, Delete, Get, JsonController, OnUndefined, Param, Post, Put, QueryParam, Req, UseBefore } from 'routing-controllers'; | import { Authorized, Body, Delete, Get, JsonController, OnUndefined, Param, Post, Put, QueryParam, Req, UseBefore } from 'routing-controllers'; | ||||||
| import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi'; | import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi'; | ||||||
| import { getConnectionManager, Repository } from 'typeorm'; | import { Repository, getConnectionManager } from 'typeorm'; | ||||||
| import { RunnerNotFoundError } from '../errors/RunnerErrors'; | import { RunnerNotFoundError } from '../errors/RunnerErrors'; | ||||||
| import { ScanIdsNotMatchingError, ScanNotFoundError } from '../errors/ScanErrors'; | import { ScanIdsNotMatchingError, ScanNotFoundError } from '../errors/ScanErrors'; | ||||||
| import { ScanStationNotFoundError } from '../errors/ScanStationErrors'; | import { ScanStationNotFoundError } from '../errors/ScanStationErrors'; | ||||||
| @@ -36,7 +36,7 @@ export class ScanController { | |||||||
| 	@OpenAPI({ description: 'Lists all scans (normal or track) from all runners. <br> This includes the scan\'s runner\'s distance ran.' }) | 	@OpenAPI({ description: 'Lists all scans (normal or track) from all runners. <br> This includes the scan\'s runner\'s distance ran.' }) | ||||||
| 	async getAll() { | 	async getAll() { | ||||||
| 		let responseScans: ResponseScan[] = new Array<ResponseScan>(); | 		let responseScans: ResponseScan[] = new Array<ResponseScan>(); | ||||||
| 		const scans = await this.scanRepository.find({ relations: ['runner', 'track', 'runner.scans', 'runner.group', 'runner.scans.track', 'card', 'station'] }); | 		const scans = await this.scanRepository.find({ relations: ['runner', 'track'] }); | ||||||
| 		scans.forEach(scan => { | 		scans.forEach(scan => { | ||||||
| 			responseScans.push(scan.toResponse()); | 			responseScans.push(scan.toResponse()); | ||||||
| 		}); | 		}); | ||||||
| @@ -51,7 +51,7 @@ export class ScanController { | |||||||
| 	@OnUndefined(ScanNotFoundError) | 	@OnUndefined(ScanNotFoundError) | ||||||
| 	@OpenAPI({ description: 'Lists all information about the scan whose id got provided. This includes the scan\'s runner\'s distance ran.' }) | 	@OpenAPI({ description: 'Lists all information about the scan whose id got provided. This includes the scan\'s runner\'s distance ran.' }) | ||||||
| 	async getOne(@Param('id') id: number) { | 	async getOne(@Param('id') id: number) { | ||||||
| 		let scan = await this.scanRepository.findOne({ id: id }, { relations: ['runner', 'track', 'runner.scans', 'runner.group', 'runner.scans.track', 'card', 'station'] }) | 		let scan = await this.scanRepository.findOne({ id: id }, { relations: ['runner', 'track', 'runner.group', 'card', 'station'] }) | ||||||
| 		if (!scan) { throw new ScanNotFoundError(); } | 		if (!scan) { throw new ScanNotFoundError(); } | ||||||
| 		return scan.toResponse(); | 		return scan.toResponse(); | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -86,14 +86,13 @@ export class CreateTrackScan { | |||||||
|      * @returns The validated scan with it's laptime set. |      * @returns The validated scan with it's laptime set. | ||||||
|      */ |      */ | ||||||
|     public async validateScan(scan: TrackScan): Promise<TrackScan> { |     public async validateScan(scan: TrackScan): Promise<TrackScan> { | ||||||
|         const scans = await getConnection().getRepository(TrackScan).find({ where: { runner: scan.runner, valid: true }, relations: ["track"] }); |         const latestScan = await getConnection().getRepository(TrackScan).findOne({ where: { runner: scan.runner, valid: true }, relations: ["track"], order: { id: 'DESC' } }); | ||||||
|         if (scans.length == 0) { |         if (!latestScan) { | ||||||
|             scan.lapTime = 0; |             scan.lapTime = 0; | ||||||
|             scan.valid = true; |             scan.valid = true; | ||||||
|         } |         } | ||||||
|         else { |         else { | ||||||
|             const newestScan = scans[scans.length - 1]; |             scan.lapTime = scan.timestamp - latestScan.timestamp; | ||||||
|             scan.lapTime = scan.timestamp - newestScan.timestamp; |  | ||||||
|             scan.valid = (scan.lapTime > scan.track.minimumLapTime); |             scan.valid = (scan.lapTime > scan.track.minimumLapTime); | ||||||
|         } |         } | ||||||
|         return scan; |         return scan; | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								src/tests/create_mass_scans.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/tests/create_mass_scans.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | import axios from 'axios'; | ||||||
|  |  | ||||||
|  | async function main() { | ||||||
|  |     console.time("batches") | ||||||
|  |     for (let i = 0; i < 100; i++) { | ||||||
|  |         const batch = []; | ||||||
|  |         for (let i = 0; i < 6; i++) { | ||||||
|  |             batch.push(axios.post('http://localhost:4010/api/scans/trackscans', { card: 200000000001, station: 2 }, { | ||||||
|  |                 headers: { | ||||||
|  |                     Authorization: 'Bearer 10F2E64.BB4F6CC5-2148-4CCF-88B5-0AA85D0508A9' | ||||||
|  |                 } | ||||||
|  |             })) | ||||||
|  |         } | ||||||
|  |         await Promise.all(batch) | ||||||
|  |         console.timeLog("batches", `Finished batch ${i}`) | ||||||
|  |     } | ||||||
|  |     console.timeEnd("batches") | ||||||
|  | } | ||||||
|  | main(); | ||||||
		Reference in New Issue
	
	Block a user