Runner import #33
26
src/models/actions/ImportRunner.ts
Normal file
26
src/models/actions/ImportRunner.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import { IsNotEmpty, IsOptional, IsString } from 'class-validator';
|
||||||
|
|
||||||
|
export class ImportRunner {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The new runner's first name.
|
||||||
|
*/
|
||||||
|
@IsString()
|
||||||
|
@IsNotEmpty()
|
||||||
|
firstname: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The new runner's middle name.
|
||||||
|
* Optional.
|
||||||
|
*/
|
||||||
|
@IsString()
|
||||||
|
@IsOptional()
|
||||||
|
middlename?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The new runner's last name.
|
||||||
|
*/
|
||||||
|
@IsString()
|
||||||
|
@IsNotEmpty()
|
||||||
|
lastname: string;
|
||||||
|
}
|
52
src/models/actions/ImportSchoolRunner.ts
Normal file
52
src/models/actions/ImportSchoolRunner.ts
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import { IsNotEmpty, IsString } from 'class-validator';
|
||||||
|
import { getConnectionManager } from 'typeorm';
|
||||||
|
import { RunnerOrganisationNotFoundError } from '../../errors/RunnerOrganisationErrors';
|
||||||
|
import { RunnerGroup } from '../entities/RunnerGroup';
|
||||||
|
import { RunnerOrganisation } from '../entities/RunnerOrganisation';
|
||||||
|
import { RunnerTeam } from '../entities/RunnerTeam';
|
||||||
|
import { CreateRunner } from './CreateRunner';
|
||||||
|
import { ImportRunner } from './ImportRunner';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A special class for importing runners from tabels provided by schools.
|
||||||
|
*/
|
||||||
|
export class ImportSchoolRunner extends ImportRunner {
|
||||||
|
/**
|
||||||
|
* The pupils's class.
|
||||||
|
*/
|
||||||
|
@IsString()
|
||||||
|
@IsNotEmpty()
|
||||||
|
class: string;
|
||||||
|
|
||||||
|
public async toCreateRunner(orgID: number): Promise<CreateRunner> {
|
||||||
|
let newRunner: CreateRunner = new CreateRunner();
|
||||||
|
|
||||||
|
newRunner.firstname = this.firstname;
|
||||||
|
newRunner.middlename = this.middlename;
|
||||||
|
newRunner.lastname = this.lastname;
|
||||||
|
newRunner.group = (await this.getGroup(orgID)).id;
|
||||||
|
|
||||||
|
return newRunner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getGroup(orgID: number): Promise<RunnerGroup> {
|
||||||
|
if (this.class === undefined) {
|
||||||
|
throw new Error("TODO:Error for runner missing teams");
|
||||||
|
}
|
||||||
|
|
||||||
|
let org = await getConnectionManager().get().getRepository(RunnerOrganisation).findOne({ id: orgID });
|
||||||
|
if (!org) {
|
||||||
|
throw new RunnerOrganisationNotFoundError();
|
||||||
|
}
|
||||||
|
|
||||||
|
let team = await getConnectionManager().get().getRepository(RunnerTeam).findOne({ name: this.class, parentGroup: org });
|
||||||
|
if (!team) {
|
||||||
|
let newRunnerTeam: RunnerTeam = new RunnerTeam();
|
||||||
|
newRunnerTeam.name = this.class;
|
||||||
|
newRunnerTeam.parentGroup = org;
|
||||||
|
team = await getConnectionManager().get().getRepository(RunnerTeam).create(newRunnerTeam);
|
||||||
|
}
|
||||||
|
|
||||||
|
return team;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user