Merge branch 'dev' into feature/13-runner_controllers
This commit is contained in:
commit
a86465c554
@ -76,12 +76,12 @@ export class Address {
|
|||||||
/**
|
/**
|
||||||
* Used to link the address to participants.
|
* Used to link the address to participants.
|
||||||
*/
|
*/
|
||||||
@OneToMany(() => Participant, participant => participant.address)
|
@OneToMany(() => Participant, participant => participant.address, { nullable: true })
|
||||||
participants: Participant[];
|
participants: Participant[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to link the address to runner groups.
|
* Used to link the address to runner groups.
|
||||||
*/
|
*/
|
||||||
@OneToMany(() => RunnerOrganisation, group => group.address)
|
@OneToMany(() => RunnerOrganisation, group => group.address, { nullable: true })
|
||||||
groups: RunnerOrganisation[];
|
groups: RunnerOrganisation[];
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ export class DistanceDonation extends Donation {
|
|||||||
* The runner associated.
|
* The runner associated.
|
||||||
*/
|
*/
|
||||||
@IsNotEmpty()
|
@IsNotEmpty()
|
||||||
@ManyToOne(() => Runner, runner => runner.distanceDonations)
|
@ManyToOne(() => Runner, runner => runner.distanceDonations, { nullable: true })
|
||||||
runner: Runner;
|
runner: Runner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -24,7 +24,7 @@ export abstract class Donation {
|
|||||||
* The donations's donor.
|
* The donations's donor.
|
||||||
*/
|
*/
|
||||||
@IsNotEmpty()
|
@IsNotEmpty()
|
||||||
@ManyToOne(() => Participant, donor => donor.donations)
|
@ManyToOne(() => Participant, donor => donor.donations, { nullable: true })
|
||||||
donor: Participant;
|
donor: Participant;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -55,7 +55,7 @@ export class GroupContact {
|
|||||||
* Optional
|
* Optional
|
||||||
*/
|
*/
|
||||||
@IsOptional()
|
@IsOptional()
|
||||||
@ManyToOne(() => Address, address => address.participants)
|
@ManyToOne(() => Address, address => address.participants, { nullable: true })
|
||||||
address?: Address;
|
address?: Address;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -79,12 +79,12 @@ export class GroupContact {
|
|||||||
/**
|
/**
|
||||||
* Used to link the contact as the donor of a donation.
|
* Used to link the contact as the donor of a donation.
|
||||||
*/
|
*/
|
||||||
@OneToMany(() => Donation, donation => donation.donor)
|
@OneToMany(() => Donation, donation => donation.donor, { nullable: true })
|
||||||
donations: Donation[];
|
donations: Donation[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to link runners to donations.
|
* Used to link runners to donations.
|
||||||
*/
|
*/
|
||||||
@OneToMany(() => RunnerGroup, group => group.contact)
|
@OneToMany(() => RunnerGroup, group => group.contact, { nullable: true })
|
||||||
groups: RunnerGroup[];
|
groups: RunnerGroup[];
|
||||||
}
|
}
|
@ -53,7 +53,7 @@ export abstract class Participant {
|
|||||||
* The participant's address.
|
* The participant's address.
|
||||||
* Optional
|
* Optional
|
||||||
*/
|
*/
|
||||||
@ManyToOne(() => Address, address => address.participants)
|
@ManyToOne(() => Address, address => address.participants, { nullable: true })
|
||||||
address?: Address;
|
address?: Address;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -77,6 +77,6 @@ export abstract class Participant {
|
|||||||
/**
|
/**
|
||||||
* Used to link the participant as the donor of a donation.
|
* Used to link the participant as the donor of a donation.
|
||||||
*/
|
*/
|
||||||
@OneToMany(() => Donation, donation => donation.donor)
|
@OneToMany(() => Donation, donation => donation.donor, { nullable: true })
|
||||||
donations: Donation[];
|
donations: Donation[];
|
||||||
}
|
}
|
@ -23,13 +23,13 @@ export abstract class Permission {
|
|||||||
/**
|
/**
|
||||||
* users
|
* users
|
||||||
*/
|
*/
|
||||||
@OneToMany(() => User, user => user.permissions)
|
@OneToMany(() => User, user => user.permissions, { nullable: true })
|
||||||
users: User[]
|
users: User[]
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* groups
|
* groups
|
||||||
*/
|
*/
|
||||||
@OneToMany(() => UserGroup, group => group.permissions)
|
@OneToMany(() => UserGroup, group => group.permissions, { nullable: true })
|
||||||
groups: UserGroup[]
|
groups: UserGroup[]
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -15,25 +15,25 @@ export class Runner extends Participant {
|
|||||||
* The runner's associated group.
|
* The runner's associated group.
|
||||||
*/
|
*/
|
||||||
@IsNotEmpty()
|
@IsNotEmpty()
|
||||||
@ManyToOne(() => RunnerGroup, group => group.runners)
|
@ManyToOne(() => RunnerGroup, group => group.runners, { nullable: true })
|
||||||
group: RunnerGroup;
|
group: RunnerGroup;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to link runners to donations.
|
* Used to link runners to donations.
|
||||||
*/
|
*/
|
||||||
@OneToMany(() => DistanceDonation, distanceDonation => distanceDonation.runner)
|
@OneToMany(() => DistanceDonation, distanceDonation => distanceDonation.runner, { nullable: true })
|
||||||
distanceDonations: DistanceDonation[];
|
distanceDonations: DistanceDonation[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to link runners to cards.
|
* Used to link runners to cards.
|
||||||
*/
|
*/
|
||||||
@OneToMany(() => RunnerCard, card => card.runner)
|
@OneToMany(() => RunnerCard, card => card.runner, { nullable: true })
|
||||||
cards: RunnerCard[];
|
cards: RunnerCard[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to link runners to a scans
|
* Used to link runners to a scans
|
||||||
*/
|
*/
|
||||||
@OneToMany(() => Scan, scan => scan.runner)
|
@OneToMany(() => Scan, scan => scan.runner, { nullable: true })
|
||||||
scans: Scan[];
|
scans: Scan[];
|
||||||
|
|
||||||
@IsInt()
|
@IsInt()
|
||||||
|
@ -26,7 +26,7 @@ export class RunnerCard {
|
|||||||
* The runner that is currently associated with this card.
|
* The runner that is currently associated with this card.
|
||||||
*/
|
*/
|
||||||
@IsOptional()
|
@IsOptional()
|
||||||
@ManyToOne(() => Runner, runner => runner.cards)
|
@ManyToOne(() => Runner, runner => runner.cards, { nullable: true })
|
||||||
runner: Runner;
|
runner: Runner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -51,6 +51,6 @@ export class RunnerCard {
|
|||||||
/**
|
/**
|
||||||
* Used to link cards to a track scans.
|
* Used to link cards to a track scans.
|
||||||
*/
|
*/
|
||||||
@OneToMany(() => TrackScan, scan => scan.track)
|
@OneToMany(() => TrackScan, scan => scan.track, { nullable: true })
|
||||||
scans: TrackScan[];
|
scans: TrackScan[];
|
||||||
}
|
}
|
||||||
|
@ -35,12 +35,12 @@ export abstract class RunnerGroup {
|
|||||||
* Optional
|
* Optional
|
||||||
*/
|
*/
|
||||||
@IsOptional()
|
@IsOptional()
|
||||||
@ManyToOne(() => GroupContact, contact => contact.groups)
|
@ManyToOne(() => GroupContact, contact => contact.groups, { nullable: true })
|
||||||
contact?: GroupContact;
|
contact?: GroupContact;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to link runners to a runner group.
|
* Used to link runners to a runner group.
|
||||||
*/
|
*/
|
||||||
@OneToMany(() => Runner, runner => runner.group)
|
@OneToMany(() => Runner, runner => runner.group, { nullable: true })
|
||||||
runners: Runner[];
|
runners: Runner[];
|
||||||
}
|
}
|
@ -15,12 +15,12 @@ export class RunnerOrganisation extends RunnerGroup {
|
|||||||
* Optional
|
* Optional
|
||||||
*/
|
*/
|
||||||
@IsOptional()
|
@IsOptional()
|
||||||
@ManyToOne(() => Address, address => address.groups)
|
@ManyToOne(() => Address, address => address.groups, { nullable: true })
|
||||||
address?: Address;
|
address?: Address;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to link teams to runner groups.
|
* Used to link teams to runner groups.
|
||||||
*/
|
*/
|
||||||
@OneToMany(() => RunnerTeam, team => team.parentGroup)
|
@OneToMany(() => RunnerTeam, team => team.parentGroup, { nullable: true })
|
||||||
teams: RunnerTeam[];
|
teams: RunnerTeam[];
|
||||||
}
|
}
|
@ -14,6 +14,6 @@ export class RunnerTeam extends RunnerGroup {
|
|||||||
* Optional
|
* Optional
|
||||||
*/
|
*/
|
||||||
@IsNotEmpty()
|
@IsNotEmpty()
|
||||||
@ManyToOne(() => RunnerOrganisation, org => org.teams)
|
@ManyToOne(() => RunnerOrganisation, org => org.teams, { nullable: true })
|
||||||
parentGroup?: RunnerOrganisation;
|
parentGroup?: RunnerOrganisation;
|
||||||
}
|
}
|
@ -25,7 +25,7 @@ export abstract class Scan {
|
|||||||
* The associated runner.
|
* The associated runner.
|
||||||
*/
|
*/
|
||||||
@IsNotEmpty()
|
@IsNotEmpty()
|
||||||
@ManyToOne(() => Runner, runner => runner.scans)
|
@ManyToOne(() => Runner, runner => runner.scans, { nullable: true })
|
||||||
runner: Runner;
|
runner: Runner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -34,7 +34,7 @@ export class ScanStation {
|
|||||||
* The track this station is associated with.
|
* The track this station is associated with.
|
||||||
*/
|
*/
|
||||||
@IsNotEmpty()
|
@IsNotEmpty()
|
||||||
@ManyToOne(() => Track, track => track.stations)
|
@ManyToOne(() => Track, track => track.stations, { nullable: true })
|
||||||
track: Track;
|
track: Track;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -56,6 +56,6 @@ export class ScanStation {
|
|||||||
/**
|
/**
|
||||||
* Used to link track scans to a scan station.
|
* Used to link track scans to a scan station.
|
||||||
*/
|
*/
|
||||||
@OneToMany(() => TrackScan, scan => scan.track)
|
@OneToMany(() => TrackScan, scan => scan.track, { nullable: true })
|
||||||
scans: TrackScan[];
|
scans: TrackScan[];
|
||||||
}
|
}
|
||||||
|
@ -41,12 +41,12 @@ export class Track {
|
|||||||
/**
|
/**
|
||||||
* Used to link scan stations to track.
|
* Used to link scan stations to track.
|
||||||
*/
|
*/
|
||||||
@OneToMany(() => ScanStation, station => station.track)
|
@OneToMany(() => ScanStation, station => station.track, { nullable: true })
|
||||||
stations: ScanStation[];
|
stations: ScanStation[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to link track scans to a track.
|
* Used to link track scans to a track.
|
||||||
*/
|
*/
|
||||||
@OneToMany(() => TrackScan, scan => scan.track)
|
@OneToMany(() => TrackScan, scan => scan.track, { nullable: true })
|
||||||
scans: TrackScan[];
|
scans: TrackScan[];
|
||||||
}
|
}
|
||||||
|
@ -22,21 +22,21 @@ export class TrackScan extends Scan {
|
|||||||
* The associated track.
|
* The associated track.
|
||||||
*/
|
*/
|
||||||
@IsNotEmpty()
|
@IsNotEmpty()
|
||||||
@ManyToOne(() => Track, track => track.scans)
|
@ManyToOne(() => Track, track => track.scans, { nullable: true })
|
||||||
track: Track;
|
track: Track;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The associated card.
|
* The associated card.
|
||||||
*/
|
*/
|
||||||
@IsNotEmpty()
|
@IsNotEmpty()
|
||||||
@ManyToOne(() => RunnerCard, card => card.scans)
|
@ManyToOne(() => RunnerCard, card => card.scans, { nullable: true })
|
||||||
card: RunnerCard;
|
card: RunnerCard;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The scanning station.
|
* The scanning station.
|
||||||
*/
|
*/
|
||||||
@IsNotEmpty()
|
@IsNotEmpty()
|
||||||
@ManyToOne(() => ScanStation, station => station.scans)
|
@ManyToOne(() => ScanStation, station => station.scans, { nullable: true })
|
||||||
station: ScanStation;
|
station: ScanStation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,109 +1,123 @@
|
|||||||
import { Entity, Column, OneToMany, ManyToOne, PrimaryGeneratedColumn, Generated, Unique, JoinTable, ManyToMany } from "typeorm";
|
import { Entity, Column, OneToMany, ManyToOne, PrimaryGeneratedColumn, Generated, Unique, JoinTable, ManyToMany } from "typeorm";
|
||||||
import { IsBoolean, IsEmail, IsInt, IsNotEmpty, IsOptional, IsString, isUUID, } from "class-validator";
|
import { IsBoolean, IsEmail, IsInt, IsNotEmpty, IsOptional, IsString, isUUID, } from "class-validator";
|
||||||
import { UserGroup } from './UserGroup';
|
import { UserGroup } from './UserGroup';
|
||||||
import { Permission } from './Permission';
|
import { Permission } from './Permission';
|
||||||
|
import { UserAction } from './UserAction';
|
||||||
/**
|
|
||||||
* Defines a admin user.
|
/**
|
||||||
*/
|
* Defines a admin user.
|
||||||
@Entity()
|
*/
|
||||||
export class User {
|
@Entity()
|
||||||
/**
|
export class User {
|
||||||
* autogenerated unique id (primary key).
|
/**
|
||||||
*/
|
* autogenerated unique id (primary key).
|
||||||
@PrimaryGeneratedColumn()
|
*/
|
||||||
@IsOptional()
|
@PrimaryGeneratedColumn()
|
||||||
@IsInt()
|
@IsOptional()
|
||||||
id: number;
|
@IsInt()
|
||||||
|
id: number;
|
||||||
/**
|
|
||||||
* autogenerated uuid
|
/**
|
||||||
*/
|
* autogenerated uuid
|
||||||
@IsOptional()
|
*/
|
||||||
@IsInt()
|
@IsOptional()
|
||||||
@Generated("uuid")
|
@IsInt()
|
||||||
uuid: string;
|
@Generated("uuid")
|
||||||
|
uuid: string;
|
||||||
/**
|
|
||||||
* user email
|
/**
|
||||||
*/
|
* user email
|
||||||
@IsEmail()
|
*/
|
||||||
email: string;
|
@IsEmail()
|
||||||
|
email: string;
|
||||||
/**
|
|
||||||
* username
|
/**
|
||||||
*/
|
* username
|
||||||
@IsString()
|
*/
|
||||||
username: string;
|
@IsString()
|
||||||
|
username: string;
|
||||||
/**
|
|
||||||
* firstname
|
/**
|
||||||
*/
|
* firstname
|
||||||
@IsString()
|
*/
|
||||||
@IsNotEmpty()
|
@IsString()
|
||||||
firstname: string;
|
@IsNotEmpty()
|
||||||
|
firstname: string;
|
||||||
/**
|
|
||||||
* middlename
|
/**
|
||||||
*/
|
* middlename
|
||||||
@IsString()
|
*/
|
||||||
@IsOptional()
|
@IsString()
|
||||||
middlename: string;
|
@IsOptional()
|
||||||
|
middlename: string;
|
||||||
/**
|
|
||||||
* lastname
|
/**
|
||||||
*/
|
* lastname
|
||||||
@IsString()
|
*/
|
||||||
@IsNotEmpty()
|
@IsString()
|
||||||
lastname: string;
|
@IsNotEmpty()
|
||||||
|
lastname: string;
|
||||||
/**
|
|
||||||
* password
|
/**
|
||||||
*/
|
* password
|
||||||
@IsString()
|
*/
|
||||||
@IsNotEmpty()
|
@IsString()
|
||||||
password: string;
|
@IsNotEmpty()
|
||||||
|
password: string;
|
||||||
/**
|
|
||||||
* permissions
|
/**
|
||||||
*/
|
* permissions
|
||||||
@ManyToOne(() => Permission, permission => permission.users)
|
*/
|
||||||
permissions: Permission[];
|
@ManyToOne(() => Permission, permission => permission.users, { nullable: true })
|
||||||
|
permissions: Permission[];
|
||||||
/**
|
|
||||||
* groups
|
/**
|
||||||
*/
|
* groups
|
||||||
@ManyToMany(() => UserGroup)
|
*/
|
||||||
@JoinTable()
|
@ManyToMany(() => UserGroup)
|
||||||
groups: UserGroup[];
|
@JoinTable()
|
||||||
|
groups: UserGroup[];
|
||||||
/**
|
|
||||||
* is user enabled?
|
/**
|
||||||
*/
|
* is user enabled?
|
||||||
@IsBoolean()
|
*/
|
||||||
enabled: boolean;
|
@IsBoolean()
|
||||||
|
enabled: boolean;
|
||||||
/**
|
|
||||||
* jwt refresh count
|
/**
|
||||||
*/
|
* jwt refresh count
|
||||||
@IsInt()
|
*/
|
||||||
@Column({ default: 1 })
|
@IsInt()
|
||||||
refreshTokenCount: number;
|
@Column({ default: 1 })
|
||||||
|
refreshTokenCount: number;
|
||||||
/**
|
|
||||||
* profilepic
|
/**
|
||||||
*/
|
* profilepic
|
||||||
@IsString()
|
*/
|
||||||
profilepic: string;
|
@IsString()
|
||||||
|
profilepic: string;
|
||||||
/**
|
|
||||||
* calculate all permissions
|
/**
|
||||||
*/
|
* actions
|
||||||
public get calc_permissions(): Permission[] {
|
*/
|
||||||
let final_permissions = this.groups.forEach((permission) => {
|
@OneToMany(() => UserAction, action => action.user)
|
||||||
console.log(permission);
|
actions: UserAction
|
||||||
})
|
|
||||||
// TODO: add user permissions on top of group permissions + return
|
/**
|
||||||
return []
|
* calculate all permissions
|
||||||
}
|
*/
|
||||||
}
|
public get calc_permissions(): Permission[] {
|
||||||
|
let final_permissions = []
|
||||||
|
this.groups.forEach((permission) => {
|
||||||
|
if (!final_permissions.includes(permission)) {
|
||||||
|
final_permissions.push(permission)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.permissions.forEach((permission) => {
|
||||||
|
if (!final_permissions.includes(permission)) {
|
||||||
|
final_permissions.push(permission)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return final_permissions
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import { PrimaryGeneratedColumn, Column, OneToMany, Entity } from "typeorm";
|
import { PrimaryGeneratedColumn, Column, OneToMany, Entity, ManyToOne } from "typeorm";
|
||||||
import {
|
import {
|
||||||
IsInt,
|
IsInt,
|
||||||
IsNotEmpty,
|
IsNotEmpty,
|
||||||
IsOptional,
|
IsOptional,
|
||||||
IsString,
|
IsString,
|
||||||
} from "class-validator";
|
} from "class-validator";
|
||||||
|
import { User } from './User';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines the UserAction interface.
|
* Defines the UserAction interface.
|
||||||
@ -19,8 +20,11 @@ export class UserAction {
|
|||||||
@IsInt()
|
@IsInt()
|
||||||
id: number;
|
id: number;
|
||||||
|
|
||||||
// TODO:
|
/**
|
||||||
// user: relation
|
* user
|
||||||
|
*/
|
||||||
|
@ManyToOne(() => User, user => user.actions)
|
||||||
|
user: User
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The actions's target (e.g. Track#2)
|
* The actions's target (e.g. Track#2)
|
||||||
@ -41,7 +45,7 @@ export class UserAction {
|
|||||||
/**
|
/**
|
||||||
* The description of change (before-> after; e.g. distance:15->17)
|
* The description of change (before-> after; e.g. distance:15->17)
|
||||||
*/
|
*/
|
||||||
@Column({nullable: true})
|
@Column({ nullable: true })
|
||||||
@IsOptional()
|
@IsOptional()
|
||||||
@IsString()
|
@IsString()
|
||||||
changed: string;
|
changed: string;
|
||||||
|
@ -23,7 +23,7 @@ export abstract class UserGroup {
|
|||||||
/**
|
/**
|
||||||
* permissions
|
* permissions
|
||||||
*/
|
*/
|
||||||
@ManyToOne(() => Permission, permission => permission.groups)
|
@ManyToOne(() => Permission, permission => permission.groups, { nullable: true })
|
||||||
permissions: Permission[];
|
permissions: Permission[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user