Merge branch 'dev' into feature/12-jwt-creation
This commit is contained in:
commit
52dfe83354
|
@ -7,26 +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
|
||||
|
||||
//TODO: ProfilePics
|
||||
|
||||
/**
|
||||
* Converts this to a User Entity.
|
||||
*/
|
||||
public async toUser(): Promise<User> {
|
||||
let newUser: User = new User();
|
||||
|
||||
|
@ -58,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,7 +13,6 @@ export class User {
|
|||
* autogenerated unique id (primary key).
|
||||
*/
|
||||
@PrimaryGeneratedColumn()
|
||||
@IsOptional()
|
||||
@IsInt()
|
||||
id: number;
|
||||
|
||||
|
@ -21,30 +20,30 @@ export class User {
|
|||
* uuid
|
||||
*/
|
||||
@Column()
|
||||
@IsUUID("4")
|
||||
@IsUUID(4)
|
||||
uuid: string;
|
||||
|
||||
/**
|
||||
* user email
|
||||
*/
|
||||
@Column()
|
||||
@Column({ nullable: true })
|
||||
@IsEmail()
|
||||
email: string;
|
||||
email?: string;
|
||||
|
||||
/**
|
||||
* user phone
|
||||
*/
|
||||
@Column()
|
||||
@IsPhoneNumber("ZZ")
|
||||
@Column({ nullable: true })
|
||||
@IsOptional()
|
||||
phone: string;
|
||||
@IsPhoneNumber("ZZ")
|
||||
phone?: string;
|
||||
|
||||
/**
|
||||
* username
|
||||
*/
|
||||
@Column()
|
||||
@Column({ nullable: true })
|
||||
@IsString()
|
||||
username: string;
|
||||
username?: string;
|
||||
|
||||
/**
|
||||
* firstname
|
||||
|
@ -57,10 +56,10 @@ export class User {
|
|||
/**
|
||||
* middlename
|
||||
*/
|
||||
@Column()
|
||||
@Column({ nullable: true })
|
||||
@IsString()
|
||||
@IsOptional()
|
||||
middlename: string;
|
||||
middlename?: string;
|
||||
|
||||
/**
|
||||
* lastname
|
||||
|
@ -81,13 +80,15 @@ 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[];
|
||||
|
||||
|
@ -96,27 +97,29 @@ export class User {
|
|||
*/
|
||||
@Column()
|
||||
@IsBoolean()
|
||||
enabled: boolean;
|
||||
enabled: boolean = true;
|
||||
|
||||
/**
|
||||
* jwt refresh count
|
||||
*/
|
||||
@IsInt()
|
||||
@Column({ default: 1 })
|
||||
refreshTokenCount: number;
|
||||
refreshTokenCount?: number;
|
||||
|
||||
/**
|
||||
* profilepic
|
||||
*/
|
||||
@Column()
|
||||
@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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue