diff --git a/package.json b/package.json index 61ecdd4..c8a2473 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "consola": "^2.15.0", "cookie-parser": "^1.4.5", "cors": "^2.8.5", + "csvtojson": "^2.0.10", "dotenv": "^8.2.0", "express": "^4.17.1", "jsonwebtoken": "^8.5.1", @@ -47,6 +48,7 @@ }, "devDependencies": { "@types/cors": "^2.8.8", + "@types/csvtojson": "^1.1.5", "@types/express": "^4.17.9", "@types/jest": "^26.0.16", "@types/jsonwebtoken": "^8.5.0", diff --git a/src/controllers/ImportController.ts b/src/controllers/ImportController.ts index 48d3f78..1fbf50c 100644 --- a/src/controllers/ImportController.ts +++ b/src/controllers/ImportController.ts @@ -1,3 +1,4 @@ +import csv from 'csvtojson'; import { Body, ContentType, Controller, Param, Post, QueryParam, Req, UseBefore } from 'routing-controllers'; import { OpenAPI } from 'routing-controllers-openapi'; import { RunnerGroupNeededError } from '../errors/RunnerErrors'; @@ -44,12 +45,35 @@ export class ImportController { return await this.postJSON(importRunners, id) } - @Post('/runners/import/csv') - @ContentType("text/csv") + @Post('/import/csv') @UseBefore(RawBodyMiddleware) @OpenAPI({ description: "Create new runners from csv" }) - postCSV(@Req() request: any) { - console.log(request.rawBody.toString()) - throw new Error("Not implemented yet."); + async postCSV(@Req() request: any, @QueryParam("group") groupID: number) { + let csvParse = await csv({ delimiter: [",", ";"], trim: true }).fromString(request.rawBody.toString()); + let importRunners: ImportRunner[] = new Array(); + for await (let runner of csvParse) { + let newImportRunner = new ImportRunner(); + newImportRunner.firstname = runner.firstname; + newImportRunner.middlename = runner.middlename; + newImportRunner.lastname = runner.lastname; + if (runner.class === undefined) { newImportRunner.team = runner.team; } + else { newImportRunner.class = runner.class; } + importRunners.push(newImportRunner); + } + return await this.postJSON(importRunners, groupID); + } + + @Post('/organisations/:id/import/csv') + @UseBefore(RawBodyMiddleware) + @OpenAPI({ description: "Create new runners from csv" }) + async postOrgsCSV(@Req() request: any, @Param("id") id: number) { + return await this.postCSV(request, id); + } + + @Post('/teams/:id/import/csv') + @UseBefore(RawBodyMiddleware) + @OpenAPI({ description: "Create new runners from csv" }) + async postTeamsCSV(@Req() request: any, @Param("id") id: number) { + return await this.postCSV(request, id); } } \ No newline at end of file