diff --git a/src/controllers/PdfController.ts b/src/controllers/PdfController.ts index 619dc81..0b33f07 100644 --- a/src/controllers/PdfController.ts +++ b/src/controllers/PdfController.ts @@ -1,5 +1,6 @@ import { Authorized, Body, JsonController, Post, QueryParam, Res } from 'routing-controllers'; import { OpenAPI } from 'routing-controllers-openapi'; +import { CertificateRunner } from '../models/CertificateRunner'; import { Runner } from '../models/Runner'; import { RunnerCard } from '../models/RunnerCard'; import { PdfCreator } from '../PdfCreator'; @@ -54,6 +55,25 @@ export class PdfController { return contracts; } + @Post('/certificates') + @OpenAPI({ description: "Generate runner certificate pdfs from certificate runner objects.
You can choose your prefered locale by passing the 'locale' query-param.
If you provide more than 100 runenrs this could take a moment or two (we tested up to 1000 runners in about 70sec so far)." }) + async generateCertificates(@Body({ validate: true, options: { limit: "500mb" } }) runners: CertificateRunner[], @Res() res: any, @QueryParam("locale") locale: string, @QueryParam("download") download: boolean) { + if (!this.initialized) { + await this.pdf.init(); + this.initialized = true; + } + if (!Array.isArray(runners)) { + runners = [runners]; + } + runners = this.mapCertificatRunnersGroupNames(runners) + const certificates = await this.pdf.generateRunnerCertficates(runners, locale); + res.setHeader('content-type', 'application/pdf'); + if (download) { + res.setHeader('Content-Disposition', 'attachment; filename="certificates.pdf"') + } + return certificates; + } + private mapRunnerGroupNames(runners: Runner[]): Runner[] { let response = new Array(); for (let runner of runners) { @@ -68,6 +88,20 @@ export class PdfController { return response; } + private mapCertificatRunnersGroupNames(runners: CertificateRunner[]): CertificateRunner[] { + let response = new Array(); + for (let runner of runners) { + if (!runner.group.parentGroup) { + runner.group.fullName = runner.group.name; + } + else { + runner.group.fullName = `${runner.group.parentGroup.name}/${runner.group.name}`; + } + response.push(runner) + } + return response; + } + private mapCardGroupNames(cards: RunnerCard[]): RunnerCard[] { let response = new Array(); for (let card of cards) {