Merge branch 'dev' into feature/13-runner_controllers
This commit is contained in:
		@@ -1,5 +1,5 @@
 | 
			
		||||
import * as argon2 from "argon2";
 | 
			
		||||
import { IsEmail, IsOptional, IsPhoneNumber, IsString, IsUUID } from 'class-validator';
 | 
			
		||||
import { IsEmail, IsOptional, IsPhoneNumber, IsString } from 'class-validator';
 | 
			
		||||
import { getConnectionManager } from 'typeorm';
 | 
			
		||||
import * as uuid from 'uuid';
 | 
			
		||||
import { UserGroupNotFoundError, UsernameOrEmailNeededError } from '../../errors/UserErrors';
 | 
			
		||||
@@ -7,28 +7,71 @@ import { User } from '../entities/User';
 | 
			
		||||
import { UserGroup } from '../entities/UserGroup';
 | 
			
		||||
 | 
			
		||||
export class CreateUser {
 | 
			
		||||
    /**
 | 
			
		||||
     * The new user's first name.
 | 
			
		||||
     */
 | 
			
		||||
    @IsString()
 | 
			
		||||
    firstname: string;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The new user's middle name.
 | 
			
		||||
     * Optinal.
 | 
			
		||||
     */
 | 
			
		||||
    @IsString()
 | 
			
		||||
    @IsOptional()
 | 
			
		||||
    middlename?: string;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The new user's last name.
 | 
			
		||||
     */
 | 
			
		||||
    @IsString()
 | 
			
		||||
    lastname: string;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The new user's username.
 | 
			
		||||
     * You have to provide at least one of: {email, username}.
 | 
			
		||||
     */
 | 
			
		||||
    @IsOptional()
 | 
			
		||||
    @IsString()
 | 
			
		||||
    username?: string;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The new user's email address.
 | 
			
		||||
     * You have to provide at least one of: {email, username}.
 | 
			
		||||
     */
 | 
			
		||||
    @IsEmail()
 | 
			
		||||
    @IsString()
 | 
			
		||||
    @IsOptional()
 | 
			
		||||
    email?: string;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The new user's phone number.
 | 
			
		||||
     * Optional
 | 
			
		||||
     */
 | 
			
		||||
    @IsPhoneNumber("ZZ")
 | 
			
		||||
    @IsOptional()
 | 
			
		||||
    phone?: string;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The new user's password.
 | 
			
		||||
     * This will of course not be saved in plaintext :)
 | 
			
		||||
     */
 | 
			
		||||
    @IsString()
 | 
			
		||||
    password: string;
 | 
			
		||||
    @IsString()
 | 
			
		||||
    lastname: string;
 | 
			
		||||
    @IsEmail()
 | 
			
		||||
    @IsString()
 | 
			
		||||
    email?: string;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The new user's groups' id(s).
 | 
			
		||||
     * You can provide either one groupId or an array of groupIDs.
 | 
			
		||||
     * Optional.
 | 
			
		||||
     */
 | 
			
		||||
    @IsOptional()
 | 
			
		||||
    groupId?: number[] | number
 | 
			
		||||
    @IsUUID("4")
 | 
			
		||||
    uuid: string;
 | 
			
		||||
 | 
			
		||||
    //TODO: ProfilePics
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Converts this to a User Entity.
 | 
			
		||||
     */
 | 
			
		||||
    public async toUser(): Promise<User> {
 | 
			
		||||
        let newUser: User = new User();
 | 
			
		||||
 | 
			
		||||
@@ -60,17 +103,16 @@ export class CreateUser {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const new_uuid = uuid.v4()
 | 
			
		||||
 | 
			
		||||
        newUser.email = this.email
 | 
			
		||||
        newUser.username = this.username
 | 
			
		||||
        newUser.firstname = this.firstname
 | 
			
		||||
        newUser.middlename = this.middlename
 | 
			
		||||
        newUser.lastname = this.lastname
 | 
			
		||||
        newUser.uuid = new_uuid
 | 
			
		||||
        newUser.password = await argon2.hash(this.password + new_uuid);
 | 
			
		||||
        newUser.uuid = uuid.v4()
 | 
			
		||||
        newUser.phone = this.phone
 | 
			
		||||
        newUser.password = await argon2.hash(this.password + newUser.uuid);
 | 
			
		||||
        //TODO: ProfilePics
 | 
			
		||||
 | 
			
		||||
        console.log(newUser)
 | 
			
		||||
        return newUser;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,28 +1,30 @@
 | 
			
		||||
import { IsOptional, IsString } from 'class-validator';
 | 
			
		||||
import { GroupNameNeededError } from '../../errors/UserGroupErrors';
 | 
			
		||||
import { UserGroup } from '../entities/UserGroup';
 | 
			
		||||
 | 
			
		||||
export class CreateUserGroup {
 | 
			
		||||
    @IsOptional()
 | 
			
		||||
    /**
 | 
			
		||||
     * The new group's name.
 | 
			
		||||
     */
 | 
			
		||||
    @IsString()
 | 
			
		||||
    name: string;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The new group's description.
 | 
			
		||||
     * Optinal.
 | 
			
		||||
     */
 | 
			
		||||
    @IsOptional()
 | 
			
		||||
    @IsString()
 | 
			
		||||
    description?: string;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Converts this to a UserGroup entity.
 | 
			
		||||
     */
 | 
			
		||||
    public async toUserGroup(): Promise<UserGroup> {
 | 
			
		||||
        let newUserGroup: UserGroup = new UserGroup();
 | 
			
		||||
 | 
			
		||||
        if (this.name === undefined) {
 | 
			
		||||
            throw new GroupNameNeededError();
 | 
			
		||||
        }
 | 
			
		||||
        newUserGroup.name = this.name;
 | 
			
		||||
        newUserGroup.description = this.description;
 | 
			
		||||
 | 
			
		||||
        newUserGroup.name = this.name
 | 
			
		||||
        if (this.description) {
 | 
			
		||||
            newUserGroup.description = this.description
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        console.log(newUserGroup)
 | 
			
		||||
        return newUserGroup;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from "typeorm";
 | 
			
		||||
import {
 | 
			
		||||
  IsInt,
 | 
			
		||||
  IsNotEmpty,
 | 
			
		||||
  IsOptional,
 | 
			
		||||
  IsPostalCode,
 | 
			
		||||
  IsString,
 | 
			
		||||
  IsString
 | 
			
		||||
} from "class-validator";
 | 
			
		||||
import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm";
 | 
			
		||||
import { Participant } from "./Participant";
 | 
			
		||||
import { RunnerOrganisation } from "./RunnerOrganisation";
 | 
			
		||||
 | 
			
		||||
@@ -18,14 +18,13 @@ export class Address {
 | 
			
		||||
   * Autogenerated unique id (primary key).
 | 
			
		||||
   */
 | 
			
		||||
  @PrimaryGeneratedColumn()
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  id: number;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * The address's description.
 | 
			
		||||
   */
 | 
			
		||||
  @Column({nullable: true})
 | 
			
		||||
  @Column({ nullable: true })
 | 
			
		||||
  @IsString()
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  description?: string;
 | 
			
		||||
@@ -43,7 +42,7 @@ export class Address {
 | 
			
		||||
   * The address's second line.
 | 
			
		||||
   * Containing optional information.
 | 
			
		||||
   */
 | 
			
		||||
  @Column({nullable: true})
 | 
			
		||||
  @Column({ nullable: true })
 | 
			
		||||
  @IsString()
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  address2?: string;
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ export class DistanceDonation extends Donation {
 | 
			
		||||
   * The runner associated.
 | 
			
		||||
   */
 | 
			
		||||
  @IsNotEmpty()
 | 
			
		||||
  @ManyToOne(() => Runner, runner => runner.distanceDonations, { nullable: true })
 | 
			
		||||
  @ManyToOne(() => Runner, runner => runner.distanceDonations)
 | 
			
		||||
  runner: Runner;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
import {
 | 
			
		||||
  IsInt,
 | 
			
		||||
  IsNotEmpty,
 | 
			
		||||
  IsOptional
 | 
			
		||||
  IsNotEmpty
 | 
			
		||||
} from "class-validator";
 | 
			
		||||
import { Entity, ManyToOne, PrimaryGeneratedColumn, TableInheritance } from "typeorm";
 | 
			
		||||
import { Participant } from "./Participant";
 | 
			
		||||
@@ -16,7 +15,6 @@ export abstract class Donation {
 | 
			
		||||
   * Autogenerated unique id (primary key).
 | 
			
		||||
   */
 | 
			
		||||
  @PrimaryGeneratedColumn()
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  id: number;
 | 
			
		||||
 | 
			
		||||
@@ -24,7 +22,7 @@ export abstract class Donation {
 | 
			
		||||
   * The donations's donor.
 | 
			
		||||
   */
 | 
			
		||||
  @IsNotEmpty()
 | 
			
		||||
  @ManyToOne(() => Participant, donor => donor.donations, { nullable: true })
 | 
			
		||||
  @ManyToOne(() => Participant, donor => donor.donations)
 | 
			
		||||
  donor: Participant;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
import { Entity, Column, ChildEntity } from "typeorm";
 | 
			
		||||
import { IsBoolean } from "class-validator";
 | 
			
		||||
import { ChildEntity, Column } from "typeorm";
 | 
			
		||||
import { Participant } from "./Participant";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
import { Entity, Column, ChildEntity } from "typeorm";
 | 
			
		||||
import { IsInt, IsPositive, } from "class-validator";
 | 
			
		||||
import { IsInt, IsPositive } from "class-validator";
 | 
			
		||||
import { ChildEntity, Column } from "typeorm";
 | 
			
		||||
import { Donation } from "./Donation";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,14 @@
 | 
			
		||||
import { PrimaryGeneratedColumn, Column, OneToMany, ManyToOne, Entity } from "typeorm";
 | 
			
		||||
import {
 | 
			
		||||
  IsEmail,
 | 
			
		||||
  IsInt,
 | 
			
		||||
  IsNotEmpty,
 | 
			
		||||
  IsOptional,
 | 
			
		||||
  IsPhoneNumber,
 | 
			
		||||
  IsPositive,
 | 
			
		||||
  IsString,
 | 
			
		||||
 | 
			
		||||
  IsString
 | 
			
		||||
} from "class-validator";
 | 
			
		||||
import { Column, Entity, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm";
 | 
			
		||||
import { Address } from "./Address";
 | 
			
		||||
import { Donation } from "./Donation";
 | 
			
		||||
import { RunnerGroup } from "./RunnerGroup";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -17,11 +16,10 @@ import { RunnerGroup } from "./RunnerGroup";
 | 
			
		||||
*/
 | 
			
		||||
@Entity()
 | 
			
		||||
export class GroupContact {
 | 
			
		||||
    /**
 | 
			
		||||
   * Autogenerated unique id (primary key).
 | 
			
		||||
   */
 | 
			
		||||
  /**
 | 
			
		||||
 * Autogenerated unique id (primary key).
 | 
			
		||||
 */
 | 
			
		||||
  @PrimaryGeneratedColumn()
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  id: number;
 | 
			
		||||
 | 
			
		||||
@@ -37,7 +35,7 @@ export class GroupContact {
 | 
			
		||||
   * The contact's middle name.
 | 
			
		||||
   * Optional
 | 
			
		||||
   */
 | 
			
		||||
  @Column({nullable: true})
 | 
			
		||||
  @Column({ nullable: true })
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @IsString()
 | 
			
		||||
  middlename?: string;
 | 
			
		||||
@@ -62,7 +60,7 @@ export class GroupContact {
 | 
			
		||||
   * The contact's phone number.
 | 
			
		||||
   * Optional
 | 
			
		||||
   */
 | 
			
		||||
  @Column({nullable: true})
 | 
			
		||||
  @Column({ nullable: true })
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @IsPhoneNumber("DE")
 | 
			
		||||
  phone?: string;
 | 
			
		||||
@@ -71,19 +69,13 @@ export class GroupContact {
 | 
			
		||||
   * The contact's email address.
 | 
			
		||||
   * Optional
 | 
			
		||||
   */
 | 
			
		||||
  @Column({nullable: true})
 | 
			
		||||
  @Column({ nullable: true })
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @IsEmail()
 | 
			
		||||
  email?: string;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Used to link the contact as the donor of a donation.
 | 
			
		||||
   */
 | 
			
		||||
  @OneToMany(() => Donation, donation => donation.donor, { nullable: true })
 | 
			
		||||
  donations: Donation[];
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
    * Used to link runners to donations.
 | 
			
		||||
    * Used to link contacts to groups.
 | 
			
		||||
    */
 | 
			
		||||
  @OneToMany(() => RunnerGroup, group => group.contact, { nullable: true })
 | 
			
		||||
  groups: RunnerGroup[];
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,13 @@
 | 
			
		||||
import { PrimaryGeneratedColumn, Column, OneToMany, ManyToOne, Entity, TableInheritance } from "typeorm";
 | 
			
		||||
import {
 | 
			
		||||
  IsEmail,
 | 
			
		||||
  IsInt,
 | 
			
		||||
  IsNotEmpty,
 | 
			
		||||
  IsOptional,
 | 
			
		||||
  IsPhoneNumber,
 | 
			
		||||
  IsPositive,
 | 
			
		||||
  IsString,
 | 
			
		||||
 | 
			
		||||
  IsString
 | 
			
		||||
} from "class-validator";
 | 
			
		||||
import { Column, Entity, ManyToOne, OneToMany, PrimaryGeneratedColumn, TableInheritance } from "typeorm";
 | 
			
		||||
import { Address } from "./Address";
 | 
			
		||||
import { Donation } from "./Donation";
 | 
			
		||||
 | 
			
		||||
@@ -21,7 +21,6 @@ export abstract class Participant {
 | 
			
		||||
   * Autogenerated unique id (primary key).
 | 
			
		||||
   */
 | 
			
		||||
  @PrimaryGeneratedColumn()
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  id: number;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
import { PrimaryGeneratedColumn, Column, OneToMany, Entity, ManyToOne } from "typeorm";
 | 
			
		||||
import {
 | 
			
		||||
  IsInt,
 | 
			
		||||
  IsNotEmpty,
 | 
			
		||||
  IsOptional,
 | 
			
		||||
  IsString,
 | 
			
		||||
 | 
			
		||||
  IsString
 | 
			
		||||
} from "class-validator";
 | 
			
		||||
import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm";
 | 
			
		||||
import { User } from './User';
 | 
			
		||||
import { UserGroup } from './UserGroup';
 | 
			
		||||
/**
 | 
			
		||||
@@ -16,7 +16,6 @@ export abstract class Permission {
 | 
			
		||||
   * Autogenerated unique id (primary key).
 | 
			
		||||
   */
 | 
			
		||||
  @PrimaryGeneratedColumn()
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  id: number;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ export class Runner extends Participant {
 | 
			
		||||
   * The runner's associated group.
 | 
			
		||||
   */
 | 
			
		||||
  @IsNotEmpty()
 | 
			
		||||
  @ManyToOne(() => RunnerGroup, group => group.runners, { nullable: true })
 | 
			
		||||
  @ManyToOne(() => RunnerGroup, group => group.runners, { nullable: false })
 | 
			
		||||
  group: RunnerGroup;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,12 @@
 | 
			
		||||
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, OneToMany } from "typeorm";
 | 
			
		||||
import {
 | 
			
		||||
  IsBoolean,
 | 
			
		||||
  IsEAN,
 | 
			
		||||
  IsInt,
 | 
			
		||||
  IsNotEmpty,
 | 
			
		||||
  IsOptional,
 | 
			
		||||
  IsString,
 | 
			
		||||
  IsString
 | 
			
		||||
} from "class-validator";
 | 
			
		||||
import { Column, Entity, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm";
 | 
			
		||||
import { Runner } from "./Runner";
 | 
			
		||||
import { TrackScan } from "./TrackScan";
 | 
			
		||||
 | 
			
		||||
@@ -19,7 +19,6 @@ export class RunnerCard {
 | 
			
		||||
   * Autogenerated unique id (primary key).
 | 
			
		||||
   */
 | 
			
		||||
  @PrimaryGeneratedColumn()
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  id: number;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -18,12 +18,11 @@ export abstract class RunnerGroup {
 | 
			
		||||
   * Autogenerated unique id (primary key).
 | 
			
		||||
   */
 | 
			
		||||
  @PrimaryGeneratedColumn()
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  id: number;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * The group's first name.
 | 
			
		||||
   * The group's name.
 | 
			
		||||
   */
 | 
			
		||||
  @Column()
 | 
			
		||||
  @IsNotEmpty()
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ export class RunnerTeam extends RunnerGroup {
 | 
			
		||||
   * Optional
 | 
			
		||||
   */
 | 
			
		||||
  @IsNotEmpty()
 | 
			
		||||
  @ManyToOne(() => RunnerOrganisation, org => org.teams, { nullable: true })
 | 
			
		||||
  @ManyToOne(() => RunnerOrganisation, org => org.teams, { nullable: false })
 | 
			
		||||
  parentGroup?: RunnerOrganisation;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
import { PrimaryGeneratedColumn, Column, ManyToOne, Entity, TableInheritance } from "typeorm";
 | 
			
		||||
import {
 | 
			
		||||
  IsBoolean,
 | 
			
		||||
  IsInt,
 | 
			
		||||
  IsNotEmpty,
 | 
			
		||||
  IsOptional,
 | 
			
		||||
  IsPositive,
 | 
			
		||||
 | 
			
		||||
  IsPositive
 | 
			
		||||
} from "class-validator";
 | 
			
		||||
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn, TableInheritance } from "typeorm";
 | 
			
		||||
import { Runner } from "./Runner";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -18,7 +18,6 @@ export abstract class Scan {
 | 
			
		||||
   * Autogenerated unique id (primary key).
 | 
			
		||||
   */
 | 
			
		||||
  @PrimaryGeneratedColumn()
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  id: number;
 | 
			
		||||
 | 
			
		||||
@@ -26,7 +25,7 @@ export abstract class Scan {
 | 
			
		||||
   * The associated runner.
 | 
			
		||||
   */
 | 
			
		||||
  @IsNotEmpty()
 | 
			
		||||
  @ManyToOne(() => Runner, runner => runner.scans, { nullable: true })
 | 
			
		||||
  @ManyToOne(() => Runner, runner => runner.scans, { nullable: false })
 | 
			
		||||
  runner: Runner;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
@@ -43,12 +42,4 @@ export abstract class Scan {
 | 
			
		||||
  @Column()
 | 
			
		||||
  @IsBoolean()
 | 
			
		||||
  valid: boolean = true;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * seconds since last scan
 | 
			
		||||
   */
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  secondsSinceLastScan: number;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, OneToMany } from "typeorm";
 | 
			
		||||
import {
 | 
			
		||||
  IsBoolean,
 | 
			
		||||
  IsInt,
 | 
			
		||||
  IsNotEmpty,
 | 
			
		||||
  IsOptional,
 | 
			
		||||
  IsString,
 | 
			
		||||
  IsString
 | 
			
		||||
} from "class-validator";
 | 
			
		||||
import { Column, Entity, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm";
 | 
			
		||||
import { Track } from "./Track";
 | 
			
		||||
import { TrackScan } from "./TrackScan";
 | 
			
		||||
 | 
			
		||||
@@ -18,14 +18,13 @@ export class ScanStation {
 | 
			
		||||
   * Autogenerated unique id (primary key).
 | 
			
		||||
   */
 | 
			
		||||
  @PrimaryGeneratedColumn()
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  id: number;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * The station's description.
 | 
			
		||||
   */
 | 
			
		||||
  @Column({nullable: true})
 | 
			
		||||
  @Column({ nullable: true })
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @IsString()
 | 
			
		||||
  description?: string;
 | 
			
		||||
@@ -34,7 +33,7 @@ export class ScanStation {
 | 
			
		||||
   * The track this station is associated with.
 | 
			
		||||
   */
 | 
			
		||||
  @IsNotEmpty()
 | 
			
		||||
  @ManyToOne(() => Track, track => track.stations, { nullable: true })
 | 
			
		||||
  @ManyToOne(() => Track, track => track.stations, { nullable: false })
 | 
			
		||||
  track: Track;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from "typeorm";
 | 
			
		||||
import {
 | 
			
		||||
  IsInt,
 | 
			
		||||
  IsNotEmpty,
 | 
			
		||||
  IsOptional,
 | 
			
		||||
 | 
			
		||||
  IsPositive,
 | 
			
		||||
  IsString,
 | 
			
		||||
  IsString
 | 
			
		||||
} from "class-validator";
 | 
			
		||||
import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm";
 | 
			
		||||
import { ScanStation } from "./ScanStation";
 | 
			
		||||
import { TrackScan } from "./TrackScan";
 | 
			
		||||
 | 
			
		||||
@@ -18,7 +18,6 @@ export class Track {
 | 
			
		||||
   * Autogenerated unique id (primary key).
 | 
			
		||||
   */
 | 
			
		||||
  @PrimaryGeneratedColumn()
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  id: number;;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,17 +1,15 @@
 | 
			
		||||
import { PrimaryGeneratedColumn, Column, ManyToOne, Entity, ChildEntity } from "typeorm";
 | 
			
		||||
import {
 | 
			
		||||
  IsBoolean,
 | 
			
		||||
  IsDateString,
 | 
			
		||||
  IsInt,
 | 
			
		||||
  IsNotEmpty,
 | 
			
		||||
  IsOptional,
 | 
			
		||||
  IsPositive,
 | 
			
		||||
 | 
			
		||||
  IsPositive
 | 
			
		||||
} from "class-validator";
 | 
			
		||||
import { Scan } from "./Scan";
 | 
			
		||||
import { Runner } from "./Runner";
 | 
			
		||||
import { Track } from "./Track";
 | 
			
		||||
import { ChildEntity, Column, ManyToOne } from "typeorm";
 | 
			
		||||
import { RunnerCard } from "./RunnerCard";
 | 
			
		||||
import { Scan } from "./Scan";
 | 
			
		||||
import { ScanStation } from "./ScanStation";
 | 
			
		||||
import { Track } from "./Track";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Defines the scan interface.
 | 
			
		||||
 
 | 
			
		||||
@@ -13,38 +13,42 @@ export class User {
 | 
			
		||||
  * autogenerated unique id (primary key).
 | 
			
		||||
  */
 | 
			
		||||
  @PrimaryGeneratedColumn()
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  id: number;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
  * uuid
 | 
			
		||||
  */
 | 
			
		||||
  @IsUUID("4")
 | 
			
		||||
  @Column()
 | 
			
		||||
  @IsUUID(4)
 | 
			
		||||
  uuid: string;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
  * user email
 | 
			
		||||
  */
 | 
			
		||||
  @Column({ nullable: true })
 | 
			
		||||
  @IsEmail()
 | 
			
		||||
  email: string;
 | 
			
		||||
  email?: string;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
  * user phone
 | 
			
		||||
  */
 | 
			
		||||
  @IsPhoneNumber("ZZ")
 | 
			
		||||
  @Column({ nullable: true })
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  phone: string;
 | 
			
		||||
  @IsPhoneNumber("ZZ")
 | 
			
		||||
  phone?: string;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
  * username
 | 
			
		||||
  */
 | 
			
		||||
  @Column({ nullable: true })
 | 
			
		||||
  @IsString()
 | 
			
		||||
  username: string;
 | 
			
		||||
  username?: string;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
  * firstname
 | 
			
		||||
  */
 | 
			
		||||
  @Column()
 | 
			
		||||
  @IsString()
 | 
			
		||||
  @IsNotEmpty()
 | 
			
		||||
  firstname: string;
 | 
			
		||||
@@ -52,13 +56,15 @@ export class User {
 | 
			
		||||
  /**
 | 
			
		||||
  * middlename
 | 
			
		||||
  */
 | 
			
		||||
  @Column({ nullable: true })
 | 
			
		||||
  @IsString()
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  middlename: string;
 | 
			
		||||
  middlename?: string;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
  * lastname
 | 
			
		||||
  */
 | 
			
		||||
  @Column()
 | 
			
		||||
  @IsString()
 | 
			
		||||
  @IsNotEmpty()
 | 
			
		||||
  lastname: string;
 | 
			
		||||
@@ -66,6 +72,7 @@ export class User {
 | 
			
		||||
  /**
 | 
			
		||||
  * password
 | 
			
		||||
  */
 | 
			
		||||
  @Column()
 | 
			
		||||
  @IsString()
 | 
			
		||||
  @IsNotEmpty()
 | 
			
		||||
  password: string;
 | 
			
		||||
@@ -73,40 +80,46 @@ export class User {
 | 
			
		||||
  /**
 | 
			
		||||
  * permissions
 | 
			
		||||
  */
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @ManyToOne(() => Permission, permission => permission.users, { nullable: true })
 | 
			
		||||
  permissions: Permission[];
 | 
			
		||||
  permissions?: Permission[];
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
  * groups
 | 
			
		||||
  */
 | 
			
		||||
  @ManyToMany(() => UserGroup)
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @ManyToMany(() => UserGroup, { nullable: true })
 | 
			
		||||
  @JoinTable()
 | 
			
		||||
  groups: UserGroup[];
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
  * is user enabled?
 | 
			
		||||
  */
 | 
			
		||||
  @Column()
 | 
			
		||||
  @IsBoolean()
 | 
			
		||||
  enabled: boolean;
 | 
			
		||||
  enabled: boolean = true;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
  * jwt refresh count
 | 
			
		||||
  */
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  @Column({ default: 1 })
 | 
			
		||||
  refreshTokenCount: number;
 | 
			
		||||
  refreshTokenCount?: number;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
  * profilepic
 | 
			
		||||
  */
 | 
			
		||||
  @Column({ nullable: true })
 | 
			
		||||
  @IsString()
 | 
			
		||||
  profilepic: string;
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  profilePic?: string;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * actions
 | 
			
		||||
   */
 | 
			
		||||
  @OneToMany(() => UserAction, action => action.user)
 | 
			
		||||
  actions: UserAction
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @OneToMany(() => UserAction, action => action.user, { nullable: true })
 | 
			
		||||
  actions: UserAction[]
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * calculate all permissions
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
import { PrimaryGeneratedColumn, Column, OneToMany, Entity, ManyToOne } from "typeorm";
 | 
			
		||||
import {
 | 
			
		||||
  IsInt,
 | 
			
		||||
  IsNotEmpty,
 | 
			
		||||
  IsOptional,
 | 
			
		||||
  IsString,
 | 
			
		||||
  IsString
 | 
			
		||||
} from "class-validator";
 | 
			
		||||
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from "typeorm";
 | 
			
		||||
import { User } from './User';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -16,7 +16,6 @@ export class UserAction {
 | 
			
		||||
   * Autogenerated unique id (primary key).
 | 
			
		||||
   */
 | 
			
		||||
  @PrimaryGeneratedColumn()
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  id: number;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,6 @@ export class UserGroup {
 | 
			
		||||
   * Autogenerated unique id (primary key).
 | 
			
		||||
   */
 | 
			
		||||
  @PrimaryGeneratedColumn()
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  id: number;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user