Added selfservice runner create check to prevent duplicate email
ref #197
This commit is contained in:
parent
69651d9f6c
commit
68cd746a9f
@ -1,6 +1,6 @@
|
|||||||
import { Request } from "express";
|
import { Request } from "express";
|
||||||
import * as jwt from "jsonwebtoken";
|
import * as jwt from "jsonwebtoken";
|
||||||
import { Body, Delete, Get, JsonController, OnUndefined, Param, Post, QueryParam, Req, UseBefore } from 'routing-controllers';
|
import { BadRequestError, Body, Delete, Get, JsonController, OnUndefined, Param, Post, 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 { getConnectionManager, Repository } from 'typeorm';
|
||||||
import { config } from '../config';
|
import { config } from '../config';
|
||||||
@ -148,8 +148,11 @@ export class RunnerSelfServiceController {
|
|||||||
@OpenAPI({ description: 'Create a new selfservice runner in the citizen org. <br> This endpoint shoud be used to allow "everyday citizen" to register themselves. <br> You have to provide a mail address, b/c the future we\'ll implement email verification.' })
|
@OpenAPI({ description: 'Create a new selfservice runner in the citizen org. <br> This endpoint shoud be used to allow "everyday citizen" to register themselves. <br> You have to provide a mail address, b/c the future we\'ll implement email verification.' })
|
||||||
async registerRunner(@Body({ validate: true }) createRunner: CreateSelfServiceCitizenRunner, @QueryParam("locale") locale: string = "en") {
|
async registerRunner(@Body({ validate: true }) createRunner: CreateSelfServiceCitizenRunner, @QueryParam("locale") locale: string = "en") {
|
||||||
let runner = await createRunner.toEntity();
|
let runner = await createRunner.toEntity();
|
||||||
|
if (await this.getRunnerExistsByMail(runner.email)) {
|
||||||
|
throw new BadRequestError("E-Mail already registered")
|
||||||
|
}
|
||||||
runner = await this.runnerRepository.save(runner);
|
runner = await this.runnerRepository.save(runner);
|
||||||
|
|
||||||
let response = new ResponseSelfServiceRunner(await this.runnerRepository.findOne(runner, { relations: ['scans', 'group', 'group.parentGroup', 'scans.track', 'cards', 'distanceDonations', 'distanceDonations.donor', 'distanceDonations.runner', 'distanceDonations.runner.scans', 'distanceDonations.runner.scans.track'] }));
|
let response = new ResponseSelfServiceRunner(await this.runnerRepository.findOne(runner, { relations: ['scans', 'group', 'group.parentGroup', 'scans.track', 'cards', 'distanceDonations', 'distanceDonations.donor', 'distanceDonations.runner', 'distanceDonations.runner.scans', 'distanceDonations.runner.scans.track'] }));
|
||||||
response.token = JwtCreator.createSelfService(runner);
|
response.token = JwtCreator.createSelfService(runner);
|
||||||
|
|
||||||
@ -170,6 +173,9 @@ export class RunnerSelfServiceController {
|
|||||||
const org = await this.getOrgansisation(token);
|
const org = await this.getOrgansisation(token);
|
||||||
|
|
||||||
let runner = await createRunner.toEntity(org);
|
let runner = await createRunner.toEntity(org);
|
||||||
|
if (await this.getRunnerExistsByMail(runner.email)) {
|
||||||
|
throw new BadRequestError("E-Mail already registered")
|
||||||
|
}
|
||||||
runner = await this.runnerRepository.save(runner);
|
runner = await this.runnerRepository.save(runner);
|
||||||
|
|
||||||
let response = new ResponseSelfServiceRunner(await this.runnerRepository.findOne(runner, { relations: ['scans', 'group', 'group.parentGroup', 'scans.track', 'cards', 'distanceDonations', 'distanceDonations.donor', 'distanceDonations.runner', 'distanceDonations.runner.scans', 'distanceDonations.runner.scans.track'] }));
|
let response = new ResponseSelfServiceRunner(await this.runnerRepository.findOne(runner, { relations: ['scans', 'group', 'group.parentGroup', 'scans.track', 'cards', 'distanceDonations', 'distanceDonations.donor', 'distanceDonations.runner', 'distanceDonations.runner.scans', 'distanceDonations.runner.scans.track'] }));
|
||||||
@ -225,4 +231,14 @@ export class RunnerSelfServiceController {
|
|||||||
|
|
||||||
return organization;
|
return organization;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if a runner already exists
|
||||||
|
* @param email The runner's email address
|
||||||
|
* @returns Boolean (true if exists, false if not)
|
||||||
|
*/
|
||||||
|
private async getRunnerExistsByMail(email: string): Promise<boolean> {
|
||||||
|
const runner = await this.runnerRepository.findOne({ email });
|
||||||
|
return runner != undefined
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user