diff --git a/src/models/entities/Address.ts b/src/models/entities/Address.ts index afa10da..561808f 100644 --- a/src/models/entities/Address.ts +++ b/src/models/entities/Address.ts @@ -7,7 +7,7 @@ import { } from "class-validator"; import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm"; import { config } from '../../config'; -import { Participant } from "./Participant"; +import { IAddressUser } from './IAddressUser'; /** * Defines the Address entity. @@ -78,13 +78,6 @@ export class Address { /** * Used to link the address to participants. */ - @OneToMany(() => Participant, participant => participant.address, { nullable: true }) - participants: Participant[]; - - //TODO: #68 - // /** - // * Used to link the address to runner groups. - // */ - // @OneToMany(() => RunnerOrganisation, group => group.address, { nullable: true }) - // groups: RunnerOrganisation[]; + @OneToMany(() => IAddressUser, addressUser => addressUser.address, { nullable: true }) + addressUsers: IAddressUser[]; } diff --git a/src/models/entities/GroupContact.ts b/src/models/entities/GroupContact.ts index f524863..4dbcc5e 100644 --- a/src/models/entities/GroupContact.ts +++ b/src/models/entities/GroupContact.ts @@ -10,6 +10,7 @@ import { import { Column, Entity, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm"; import { config } from '../../config'; import { Address } from "./Address"; +import { IAddressUser } from './IAddressUser'; import { RunnerGroup } from "./RunnerGroup"; /** @@ -17,7 +18,7 @@ import { RunnerGroup } from "./RunnerGroup"; * Mainly it's own class to reduce duplicate code and enable contact's to be associated with multiple groups. */ @Entity() -export class GroupContact { +export class GroupContact implements IAddressUser { /** * Autogenerated unique id (primary key). */ @@ -54,7 +55,7 @@ export class GroupContact { * This is a address object to prevent any formatting differences. */ @IsOptional() - @ManyToOne(() => Address, address => address.participants, { nullable: true }) + @ManyToOne(() => Address, address => address.addressUsers, { nullable: true }) address?: Address; /** diff --git a/src/models/entities/IAddressUser.ts b/src/models/entities/IAddressUser.ts new file mode 100644 index 0000000..425f4e3 --- /dev/null +++ b/src/models/entities/IAddressUser.ts @@ -0,0 +1,11 @@ +import { Entity, ManyToOne, PrimaryColumn } from 'typeorm'; +import { Address } from './Address'; + +@Entity() +export abstract class IAddressUser { + @PrimaryColumn() + id: number; + + @ManyToOne(() => Address, address => address.addressUsers, { nullable: true }) + address?: Address +} diff --git a/src/models/entities/Participant.ts b/src/models/entities/Participant.ts index 19af17e..de13b5f 100644 --- a/src/models/entities/Participant.ts +++ b/src/models/entities/Participant.ts @@ -10,6 +10,7 @@ import { import { Column, Entity, ManyToOne, PrimaryGeneratedColumn, TableInheritance } from "typeorm"; import { config } from '../../config'; import { Address } from "./Address"; +import { IAddressUser } from './IAddressUser'; /** * Defines the Participant entity. @@ -17,7 +18,7 @@ import { Address } from "./Address"; */ @Entity() @TableInheritance({ column: { name: "type", type: "varchar" } }) -export abstract class Participant { +export abstract class Participant implements IAddressUser { /** * Autogenerated unique id (primary key). */ @@ -53,7 +54,7 @@ export abstract class Participant { * The participant's address. * This is a address object to prevent any formatting differences. */ - @ManyToOne(() => Address, address => address.participants, { nullable: true }) + @ManyToOne(() => Address, address => address.addressUsers, { nullable: true }) address?: Address; /** diff --git a/src/models/entities/RunnerOrganisation.ts b/src/models/entities/RunnerOrganisation.ts index 7110b09..f0f8c78 100644 --- a/src/models/entities/RunnerOrganisation.ts +++ b/src/models/entities/RunnerOrganisation.ts @@ -1,5 +1,7 @@ -import { IsInt } from "class-validator"; -import { ChildEntity, OneToMany } from "typeorm"; +import { IsInt, IsOptional } from "class-validator"; +import { ChildEntity, ManyToOne, OneToMany } from "typeorm"; +import { Address } from './Address'; +import { IAddressUser } from './IAddressUser'; import { Runner } from './Runner'; import { RunnerGroup } from "./RunnerGroup"; import { RunnerTeam } from "./RunnerTeam"; @@ -9,14 +11,14 @@ import { RunnerTeam } from "./RunnerTeam"; * This usually is a school, club or company. */ @ChildEntity() -export class RunnerOrganisation extends RunnerGroup { +export class RunnerOrganisation extends RunnerGroup implements IAddressUser { - // /** - // * The organisations's address. - // */ - // @IsOptional() - // @ManyToOne(() => Address, address => address.groups, { nullable: true }) - // address?: Address; + /** + * The organisations's address. + */ + @IsOptional() + @ManyToOne(() => Address, address => address.addressUsers, { nullable: true }) + address?: Address; /** * The organisation's teams.