Merge pull request 'Alpha Release 0.3.2' (#31) from dev into main
Reviewed-on: #31 Reviewed-by: Philipp Dormann <philipp@philippdormann.de>
This commit was merged in pull request #31.
	This commit is contained in:
		
							
								
								
									
										17
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -2,14 +2,25 @@
 | 
			
		||||
 | 
			
		||||
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
 | 
			
		||||
 | 
			
		||||
#### [v0.3.1](https://git.odit.services/lfk/document-server/compare/v0.3.0...v0.3.1)
 | 
			
		||||
#### [v0.3.2](https://git.odit.services/lfk/document-server/compare/v0.3.0...v0.3.2)
 | 
			
		||||
 | 
			
		||||
- 🧾New changelog file version [CI SKIP] [skip ci] [`cc6a53b`](https://git.odit.services/lfk/document-server/commit/cc6a53b25895594874acca370a1439d37bb280de)
 | 
			
		||||
- 🚀Bumped version to v0.3.2 [`a9019e4`](https://git.odit.services/lfk/document-server/commit/a9019e4c67e7620b65650d60b0ebd57bc11a854e)
 | 
			
		||||
- Merge pull request 'Now using full group names feature/18-group_names' (#30) from feature/18-group_names into dev [`e0db6f6`](https://git.odit.services/lfk/document-server/commit/e0db6f6a78d0026a8485a57c88af1e9407bd68a4)
 | 
			
		||||
- 🚀Bumped version to v0.3.1 [`dcde424`](https://git.odit.services/lfk/document-server/commit/dcde424b77dcc9753859f94f7bcbe24fe3523c27)
 | 
			
		||||
- 📖New license file version [CI SKIP] [skip ci] [`92c5240`](https://git.odit.services/lfk/document-server/commit/92c52401b398f6a2f247c10879e17f6dc105aa8e)
 | 
			
		||||
- Now manually parsing runnergroup full names [`c290908`](https://git.odit.services/lfk/document-server/commit/c2909082a2dbb38041ae0fc695bd0fa1451b39ff)
 | 
			
		||||
- Implemented basic auth [`bdeadd2`](https://git.odit.services/lfk/document-server/commit/bdeadd274bc0f9c8cbab35a8a5605bef4c22ba6c)
 | 
			
		||||
- 🧾New changelog file version [CI SKIP] [skip ci] [`b7c6c6e`](https://git.odit.services/lfk/document-server/commit/b7c6c6e15708e471f5c3d0ca4cf11b1c08c88c9c)
 | 
			
		||||
- Merge pull request 'API Key based auth feature/26-api_auth' (#27) from feature/26-api_auth into dev [`2d031da`](https://git.odit.services/lfk/document-server/commit/2d031dae035866a4aa247398ea68ff338ab58cbd)
 | 
			
		||||
- 📖New license file version [CI SKIP] [skip ci] [`9d7d044`](https://git.odit.services/lfk/document-server/commit/9d7d0443848522e5bdfdb6a80c836bea4bc200a1)
 | 
			
		||||
- 🧾New changelog file version [CI SKIP] [skip ci] [`e306cdb`](https://git.odit.services/lfk/document-server/commit/e306cdb2c8e58fc1aef79b95cba5d4cc96ac7658)
 | 
			
		||||
- Added auth to openapi spec [`729f2d7`](https://git.odit.services/lfk/document-server/commit/729f2d7240b54ffe2d4db36cce29de0afdfc9417)
 | 
			
		||||
- Pinned routing controllers version as temp workaround for routing controllers openapi being broken again [`7ca7266`](https://git.odit.services/lfk/document-server/commit/7ca7266ea46965251c9df637a2556f2a1706e7e6)
 | 
			
		||||
- 🧾New changelog file version [CI SKIP] [skip ci] [`adf11ab`](https://git.odit.services/lfk/document-server/commit/adf11ab1c356b6964230541331836abd363170b0)
 | 
			
		||||
- 🧾New changelog file version [CI SKIP] [skip ci] [`b7c6c6e`](https://git.odit.services/lfk/document-server/commit/b7c6c6e15708e471f5c3d0ca4cf11b1c08c88c9c)
 | 
			
		||||
- 🧾New changelog file version [CI SKIP] [skip ci] [`95099c5`](https://git.odit.services/lfk/document-server/commit/95099c5fbd7e6cb07c68151a998eebb0f00556f3)
 | 
			
		||||
- Updated templates with full group name [`0fcfb30`](https://git.odit.services/lfk/document-server/commit/0fcfb30d5c13266ca4faf7697308dfb7a0f91b4f)
 | 
			
		||||
- Merge pull request 'Alpha Release 0.3.1 - API Keys' (#29) from dev into main [`db91661`](https://git.odit.services/lfk/document-server/commit/db916615564813e8d21e3672581e4f3a4d748b89)
 | 
			
		||||
- Merge pull request 'API Key based auth feature/26-api_auth' (#27) from feature/26-api_auth into dev [`2d031da`](https://git.odit.services/lfk/document-server/commit/2d031dae035866a4aa247398ea68ff338ab58cbd)
 | 
			
		||||
- Added api key to env doc [`4543092`](https://git.odit.services/lfk/document-server/commit/454309278ef20a2b97248277b07a7b58a063618d)
 | 
			
		||||
- Fixed bug [`7be211f`](https://git.odit.services/lfk/document-server/commit/7be211f8b7b26f7f620df81af4ebde5eec2feec2)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										66
									
								
								licenses.md
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								licenses.md
									
									
									
									
									
								
							@@ -58,7 +58,7 @@ THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# axios
 | 
			
		||||
**Author**: Matt Zabriskie
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: https://github.com/axios/axios.git
 | 
			
		||||
**License**: MIT
 | 
			
		||||
**Description**: Promise based HTTP client for the browser and node.js
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -85,7 +85,7 @@ THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# bwip-js
 | 
			
		||||
**Author**: Mark Warren <mwarren@metafloor.com>
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: https://github.com/metafloor/bwip-js.git
 | 
			
		||||
**License**: MIT
 | 
			
		||||
**Description**: JavaScript barcode generator supporting over 100 types and standards.
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -117,7 +117,7 @@ THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# cheerio
 | 
			
		||||
**Author**: Matt Mueller <mattmuelle@gmail.com> (mat.io)
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: git://github.com/cheeriojs/cheerio.git
 | 
			
		||||
**License**: MIT
 | 
			
		||||
**Description**: Tiny, fast, and elegant implementation of core jQuery designed specifically for the server
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -145,7 +145,7 @@ SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# class-transformer
 | 
			
		||||
**Author**: [object Object]
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: https://github.com/typestack/class-transformer.git
 | 
			
		||||
**License**: MIT
 | 
			
		||||
**Description**: Proper decorator-based transformation / serialization / deserialization of plain javascript objects to class constructors
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -173,7 +173,7 @@ THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# class-validator
 | 
			
		||||
**Author**: TypeStack contributors
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: https://github.com/typestack/class-validator.git
 | 
			
		||||
**License**: MIT
 | 
			
		||||
**Description**: Decorator-based property validation for classes.
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -240,7 +240,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# dotenv
 | 
			
		||||
**Author**: undefined
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: git://github.com/motdotla/dotenv.git
 | 
			
		||||
**License**: BSD-2-Clause
 | 
			
		||||
**Description**: Loads environment variables from .env file
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -303,7 +303,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# handlebars
 | 
			
		||||
**Author**: Yehuda Katz
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: https://github.com/wycats/handlebars.js.git
 | 
			
		||||
**License**: MIT
 | 
			
		||||
**Description**: Handlebars provides the power necessary to let you build semantic templates effectively with no frustration
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -330,7 +330,7 @@ THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# i18next
 | 
			
		||||
**Author**: Jan Mühlemann <jan.muehlemann@gmail.com> (https://github.com/jamuhl)
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: https://github.com/i18next/i18next.git
 | 
			
		||||
**License**: MIT
 | 
			
		||||
**Description**: i18next internationalization framework
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -359,7 +359,7 @@ SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# i18next-fs-backend
 | 
			
		||||
**Author**: undefined
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: git@github.com:i18next/i18next-fs-backend.git
 | 
			
		||||
**License**: undefined
 | 
			
		||||
**Description**: i18next-fs-backend is a backend layer for i18next using in Node.js and for Deno to load translations from the filesystem.
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -637,7 +637,7 @@ SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# reflect-metadata
 | 
			
		||||
**Author**: [object Object]
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: https://github.com/rbuckton/reflect-metadata.git
 | 
			
		||||
**License**: Apache-2.0
 | 
			
		||||
**Description**: Polyfill for Metadata Reflection API
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -698,32 +698,12 @@ If the Work includes a "NOTICE" text file as part of its distribution, then any
 | 
			
		||||
END OF TERMS AND CONDITIONS 
 | 
			
		||||
 | 
			
		||||
# routing-controllers
 | 
			
		||||
**Author**: TypeStack contributors
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Author**: [object Object]
 | 
			
		||||
**Repo**: https://github.com/typestack/routing-controllers.git
 | 
			
		||||
**License**: MIT
 | 
			
		||||
**Description**: Create structured, declarative and beautifully organized class-based controllers with heavy decorators usage for Express / Koa using TypeScript.
 | 
			
		||||
## License Text
 | 
			
		||||
The MIT License
 | 
			
		||||
 
 | 
			
		||||
Copyright (c) 2015-2020 TypeStack
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in
 | 
			
		||||
all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
THE SOFTWARE. 
 | 
			
		||||
 | 
			
		||||
# routing-controllers-openapi
 | 
			
		||||
**Author**: Aleksi Pekkala <aleksipekkala@gmail.com>
 | 
			
		||||
@@ -756,7 +736,7 @@ SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# @odit/license-exporter
 | 
			
		||||
**Author**: ODIT.Services
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: https://git.odit.services/odit/license-exporter
 | 
			
		||||
**License**: MIT
 | 
			
		||||
**Description**: A simple license crawler for crediting open source work
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -783,7 +763,7 @@ OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# @types/express
 | 
			
		||||
**Author**: undefined
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: https://github.com/DefinitelyTyped/DefinitelyTyped.git
 | 
			
		||||
**License**: MIT
 | 
			
		||||
**Description**: TypeScript definitions for Express
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -812,7 +792,7 @@ OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# @types/node
 | 
			
		||||
**Author**: undefined
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: https://github.com/DefinitelyTyped/DefinitelyTyped.git
 | 
			
		||||
**License**: MIT
 | 
			
		||||
**Description**: TypeScript definitions for Node.js
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -841,7 +821,7 @@ OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# @types/puppeteer
 | 
			
		||||
**Author**: undefined
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: https://github.com/DefinitelyTyped/DefinitelyTyped.git
 | 
			
		||||
**License**: MIT
 | 
			
		||||
**Description**: TypeScript definitions for puppeteer
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -870,7 +850,7 @@ OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# cp-cli
 | 
			
		||||
**Author**: undefined
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: git+https://github.com/screendriver/cp-cli.git
 | 
			
		||||
**License**: MIT
 | 
			
		||||
**Description**: A 'cp' CLI util for Node.js
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -899,7 +879,7 @@ SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# faker
 | 
			
		||||
**Author**: undefined
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: http://github.com/Marak/Faker.js.git
 | 
			
		||||
**License**: MIT
 | 
			
		||||
**Description**: Generate massive amounts of fake contextual data
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -907,7 +887,7 @@ SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# nodemon
 | 
			
		||||
**Author**: [object Object]
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: https://github.com/remy/nodemon.git
 | 
			
		||||
**License**: MIT
 | 
			
		||||
**Description**: Simple monitor script for use during development of a node.js app.
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -936,7 +916,7 @@ SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# release-it
 | 
			
		||||
**Author**: [object Object]
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: https://github.com/release-it/release-it.git
 | 
			
		||||
**License**: MIT
 | 
			
		||||
**Description**: Generic CLI tool to automate versioning and package publishing related tasks.
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -988,7 +968,7 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# start-server-and-test
 | 
			
		||||
**Author**: Gleb Bahmutov <gleb.bahmutov@gmail.com>
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: https://github.com/bahmutov/start-server-and-test.git
 | 
			
		||||
**License**: MIT
 | 
			
		||||
**Description**: Starts server, waits for URL, then runs test command; when the tests end, shuts down server
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -996,7 +976,7 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# ts-node
 | 
			
		||||
**Author**: [object Object]
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: git://github.com/TypeStrong/ts-node.git
 | 
			
		||||
**License**: MIT
 | 
			
		||||
**Description**: TypeScript execution environment and REPL for node.js, with source map support
 | 
			
		||||
## License Text
 | 
			
		||||
@@ -1025,7 +1005,7 @@ THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
# typescript
 | 
			
		||||
**Author**: Microsoft Corp.
 | 
			
		||||
**Repo**: [object Object]
 | 
			
		||||
**Repo**: https://github.com/Microsoft/TypeScript.git
 | 
			
		||||
**License**: Apache-2.0
 | 
			
		||||
**Description**: TypeScript is a language for application scale JavaScript development
 | 
			
		||||
## License Text
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "@odit/lfk-document-server",
 | 
			
		||||
  "version": "0.3.1",
 | 
			
		||||
  "version": "0.3.2",
 | 
			
		||||
  "description": "The document generation server for the LfK! runner system. This generates certificates, sponsoring aggreements and more",
 | 
			
		||||
  "main": "src/app.ts",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
@@ -59,11 +59,11 @@
 | 
			
		||||
    "pdf-lib": "^1.16.0",
 | 
			
		||||
    "puppeteer": "^7.0.1",
 | 
			
		||||
    "reflect-metadata": "^0.1.13",
 | 
			
		||||
    "routing-controllers": "^0.9.0-alpha.6",
 | 
			
		||||
    "routing-controllers-openapi": "^2.2.0"
 | 
			
		||||
    "routing-controllers": "0.9.0-alpha.6",
 | 
			
		||||
    "routing-controllers-openapi": "2.2.0"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@odit/license-exporter": "^0.0.9",
 | 
			
		||||
    "@odit/license-exporter": "^0.0.10",
 | 
			
		||||
    "@types/express": "^4.17.11",
 | 
			
		||||
    "@types/node": "^14.14.22",
 | 
			
		||||
    "@types/puppeteer": "^5.4.3",
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@ export class PdfController {
 | 
			
		||||
 | 
			
		||||
    @Post('/contracts')
 | 
			
		||||
    @OpenAPI({ description: "Generate Sponsoring contract pdfs from runner objects.<br>You can choose your prefered locale by passing the 'locale' query-param.<br> 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 generateContracts(@Body({ validate: true, options: { limit: "500mb" } }) runners: Runner | Runner[], @Res() res: any, @QueryParam("locale") locale: string, @QueryParam("codeformat") codeformat: string) {
 | 
			
		||||
    async generateContracts(@Body({ validate: true, options: { limit: "500mb" } }) runners: Runner[], @Res() res: any, @QueryParam("locale") locale: string, @QueryParam("codeformat") codeformat: string) {
 | 
			
		||||
        if (!this.initialized) {
 | 
			
		||||
            await this.pdf.init();
 | 
			
		||||
            this.initialized = true;
 | 
			
		||||
@@ -26,6 +26,7 @@ export class PdfController {
 | 
			
		||||
        if (!Array.isArray(runners)) {
 | 
			
		||||
            runners = [runners];
 | 
			
		||||
        }
 | 
			
		||||
        runners = this.mapRunnerGroupNames(runners)
 | 
			
		||||
        const contracts = await this.pdf.generateSponsoringContract(runners, locale, codeformat);
 | 
			
		||||
        res.setHeader('content-type', 'application/pdf');
 | 
			
		||||
        return contracts;
 | 
			
		||||
@@ -41,8 +42,37 @@ export class PdfController {
 | 
			
		||||
        if (!Array.isArray(cards)) {
 | 
			
		||||
            cards = [cards];
 | 
			
		||||
        }
 | 
			
		||||
        cards = this.mapCardGroupNames(cards);
 | 
			
		||||
        const contracts = await this.pdf.generateRunnerCards(cards, locale);
 | 
			
		||||
        res.setHeader('content-type', 'application/pdf');
 | 
			
		||||
        return contracts;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private mapRunnerGroupNames(runners: Runner[]): Runner[] {
 | 
			
		||||
        let response = new Array<Runner>();
 | 
			
		||||
        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<RunnerCard>();
 | 
			
		||||
        for (let card of cards) {
 | 
			
		||||
            if (!card.runner.group.parentGroup) {
 | 
			
		||||
                card.runner.group.fullName = card.runner.group.name;
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                card.runner.group.fullName = `${card.runner.group.parentGroup.name}/${card.runner.group.name}`;
 | 
			
		||||
            }
 | 
			
		||||
            response.push(card)
 | 
			
		||||
        }
 | 
			
		||||
        return response;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,8 @@ import {
 | 
			
		||||
 | 
			
		||||
    IsPositive,
 | 
			
		||||
 | 
			
		||||
    IsString
 | 
			
		||||
    IsString,
 | 
			
		||||
    ValidateNested
 | 
			
		||||
} from "class-validator";
 | 
			
		||||
import { RunnerGroup } from './RunnerGroup';
 | 
			
		||||
 | 
			
		||||
@@ -53,6 +54,7 @@ export class Runner {
 | 
			
		||||
     * The runner's group.
 | 
			
		||||
     */
 | 
			
		||||
    @IsObject()
 | 
			
		||||
    @ValidateNested()
 | 
			
		||||
    group: RunnerGroup;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -60,4 +62,8 @@ export class Runner {
 | 
			
		||||
     */
 | 
			
		||||
    @IsInt()
 | 
			
		||||
    distance: number;
 | 
			
		||||
 | 
			
		||||
    constructor() {
 | 
			
		||||
        console.log("called")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -25,4 +25,6 @@ export class RunnerGroup {
 | 
			
		||||
    @IsObject()
 | 
			
		||||
    @IsOptional()
 | 
			
		||||
    parentGroup?: RunnerGroup;
 | 
			
		||||
 | 
			
		||||
    fullName: string;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,7 @@
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <p>{{this.runner.lastname}}, {{this.runner.firstname}} {{this.runner.middlename}}</p>
 | 
			
		||||
        <p>{{this.runner.group.name}}</p>
 | 
			
		||||
        <p>{{this.runner.group.fullName}}</p>
 | 
			
		||||
      </div>
 | 
			
		||||
      {{/each}}
 | 
			
		||||
    </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -64,7 +64,7 @@
 | 
			
		||||
          <p style="font-size: x-small; display: block;">{{__ "lastname"}}</p>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="column is-6">
 | 
			
		||||
          <span style="border-bottom: 1px solid; width: 100%; display: block;">{{this.group.name}}</span>
 | 
			
		||||
          <span style="border-bottom: 1px solid; width: 100%; display: block;">{{this.group.fullName}}</span>
 | 
			
		||||
          <p style="font-size: x-small; display: block;">{{__ "group"}}</p>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user