From a8956223c2c70b810b4ec9dea09900b30b963a24 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Thu, 3 Dec 2020 20:28:07 +0100 Subject: [PATCH] Emergency fix: Switched to table inheritances ref #11 #13 --- src/models/DistanceDonation.ts | 6 +++--- src/models/Donation.ts | 3 ++- src/models/Donor.ts | 4 ++-- src/models/FixedDonation.ts | 6 +++--- src/models/Participant.ts | 9 +++++---- src/models/Runner.ts | 14 +++++++------- src/models/Scan.ts | 11 ++++++----- src/models/TrackScan.ts | 4 ++-- 8 files changed, 30 insertions(+), 27 deletions(-) diff --git a/src/models/DistanceDonation.ts b/src/models/DistanceDonation.ts index 79bf0b8..b54c642 100644 --- a/src/models/DistanceDonation.ts +++ b/src/models/DistanceDonation.ts @@ -1,5 +1,5 @@ -import { Entity, Column, ManyToOne } from "typeorm"; -import { IsInt, IsNotEmpty, IsPositive,} from "class-validator"; +import { Entity, Column, ManyToOne, ChildEntity } from "typeorm"; +import { IsInt, IsNotEmpty, IsPositive, } from "class-validator"; import { Donation } from "./Donation"; import { Runner } from "./Runner"; @@ -7,7 +7,7 @@ import { Runner } from "./Runner"; * Defines a distance based donation. * Here people donate a certain amout per kilometer */ -@Entity() +@ChildEntity() export class DistanceDonation extends Donation { /** * The runner associated. diff --git a/src/models/Donation.ts b/src/models/Donation.ts index b94e182..c4ab699 100644 --- a/src/models/Donation.ts +++ b/src/models/Donation.ts @@ -1,4 +1,4 @@ -import { PrimaryGeneratedColumn, Column, ManyToOne, Entity } from "typeorm"; +import { PrimaryGeneratedColumn, Column, ManyToOne, Entity, TableInheritance } from "typeorm"; import { IsInt, IsNotEmpty, @@ -11,6 +11,7 @@ import { Participant } from "./Participant"; * Defines the donation interface. */ @Entity() +@TableInheritance({ column: { name: "type", type: "varchar" } }) export abstract class Donation { /** * Autogenerated unique id (primary key). diff --git a/src/models/Donor.ts b/src/models/Donor.ts index 5d0af07..ca65afd 100644 --- a/src/models/Donor.ts +++ b/src/models/Donor.ts @@ -1,11 +1,11 @@ -import { Entity, Column } from "typeorm"; +import { Entity, Column, ChildEntity } from "typeorm"; import { IsBoolean } from "class-validator"; import { Participant } from "./Participant"; /** * Defines a donor. */ -@Entity() +@ChildEntity() export class Donor extends Participant { /** * Does this donor need a receipt?. diff --git a/src/models/FixedDonation.ts b/src/models/FixedDonation.ts index e429ddf..dd05c40 100644 --- a/src/models/FixedDonation.ts +++ b/src/models/FixedDonation.ts @@ -1,11 +1,11 @@ -import { Entity, Column } from "typeorm"; -import { IsInt, IsPositive,} from "class-validator"; +import { Entity, Column, ChildEntity } from "typeorm"; +import { IsInt, IsPositive, } from "class-validator"; import { Donation } from "./Donation"; /** * Defines a fixed donation. */ -@Entity() +@ChildEntity() export class FixedDonation extends Donation { /** diff --git a/src/models/Participant.ts b/src/models/Participant.ts index e80d348..53562a3 100644 --- a/src/models/Participant.ts +++ b/src/models/Participant.ts @@ -1,4 +1,4 @@ -import { PrimaryGeneratedColumn, Column, OneToMany, ManyToOne, Entity } from "typeorm"; +import { PrimaryGeneratedColumn, Column, OneToMany, ManyToOne, Entity, TableInheritance } from "typeorm"; import { IsEmail, IsInt, @@ -15,6 +15,7 @@ import { Donation } from "./Donation"; * Defines the participant interface. */ @Entity() +@TableInheritance({ column: { name: "type", type: "varchar" } }) export abstract class Participant { /** * Autogenerated unique id (primary key). @@ -36,7 +37,7 @@ export abstract class Participant { * The participant's middle name. * Optional */ - @Column({nullable: true}) + @Column({ nullable: true }) @IsOptional() @IsString() middlename?: string; @@ -60,7 +61,7 @@ export abstract class Participant { * The participant's phone number. * Optional */ - @Column({nullable: true}) + @Column({ nullable: true }) @IsOptional() @IsPhoneNumber("DE") phone?: string; @@ -69,7 +70,7 @@ export abstract class Participant { * The participant's email address. * Optional */ - @Column({nullable: true}) + @Column({ nullable: true }) @IsOptional() @IsEmail() email?: string; diff --git a/src/models/Runner.ts b/src/models/Runner.ts index 7423c22..e4d3ff7 100644 --- a/src/models/Runner.ts +++ b/src/models/Runner.ts @@ -1,5 +1,5 @@ -import { Entity, Column, OneToMany, ManyToOne } from "typeorm"; -import { IsInt, IsNotEmpty,} from "class-validator"; +import { Entity, Column, OneToMany, ManyToOne, ChildEntity } from "typeorm"; +import { IsInt, IsNotEmpty, } from "class-validator"; import { Participant } from "./Participant"; import { RunnerGroup } from "./RunnerGroup"; import { DistanceDonation } from "./DistanceDonation"; @@ -9,7 +9,7 @@ import { Scan } from "./Scan"; /** * Defines a runner. */ -@Entity() +@ChildEntity() export class Runner extends Participant { /** * The runner's associated group. @@ -17,7 +17,7 @@ export class Runner extends Participant { @IsNotEmpty() @ManyToOne(() => RunnerGroup, group => group.runners, { nullable: true }) group: RunnerGroup; - + /** * Used to link runners to donations. */ @@ -36,9 +36,9 @@ export class Runner extends Participant { @OneToMany(() => Scan, scan => scan.runner, { nullable: true }) scans: Scan[]; - @IsInt() - public get distance() : number { + @IsInt() + public get distance(): number { return this.scans.filter(scan => scan.valid === true).reduce((sum, current) => sum + current.distance, 0); } - + } diff --git a/src/models/Scan.ts b/src/models/Scan.ts index 3fd64ed..9911fec 100644 --- a/src/models/Scan.ts +++ b/src/models/Scan.ts @@ -1,4 +1,4 @@ -import { PrimaryGeneratedColumn, Column, ManyToOne, Entity } from "typeorm"; +import { PrimaryGeneratedColumn, Column, ManyToOne, Entity, TableInheritance } from "typeorm"; import { IsBoolean, IsInt, @@ -12,6 +12,7 @@ import { Runner } from "./Runner"; * Defines the scan interface. */ @Entity() +@TableInheritance({ column: { name: "type", type: "varchar" } }) export abstract class Scan { /** * Autogenerated unique id (primary key). @@ -35,10 +36,10 @@ export abstract class Scan { @IsPositive() abstract distance: number; - /** - * Is the scan valid (for fraud reasons). - * Default: true - */ + /** + * Is the scan valid (for fraud reasons). + * Default: true + */ @Column() @IsBoolean() valid: boolean = true; diff --git a/src/models/TrackScan.ts b/src/models/TrackScan.ts index ae0467c..f7bee32 100644 --- a/src/models/TrackScan.ts +++ b/src/models/TrackScan.ts @@ -1,4 +1,4 @@ -import { PrimaryGeneratedColumn, Column, ManyToOne, Entity } from "typeorm"; +import { PrimaryGeneratedColumn, Column, ManyToOne, Entity, ChildEntity } from "typeorm"; import { IsBoolean, IsDateString, @@ -16,7 +16,7 @@ import { ScanStation } from "./ScanStation"; /** * Defines the scan interface. */ -@Entity() +@ChildEntity() export class TrackScan extends Scan { /** * The associated track.