import { IsInt, IsPositive } from 'class-validator'; import { BeforeInsert, BeforeUpdate, Column, Entity, OneToMany, PrimaryGeneratedColumn, TableInheritance } from 'typeorm'; import { ResponsePrincipal } from '../responses/ResponsePrincipal'; import { Permission } from './Permission'; /** * Defines the principal entity. * A principal basicly is any entity that can receive permissions for the api (users and their groups). */ @Entity() @TableInheritance({ column: { name: "type", type: "varchar" } }) export abstract class Principal { /** * Autogenerated unique id (primary key). */ @PrimaryGeneratedColumn() @IsInt() id: number; /** * The participant's permissions. */ @OneToMany(() => Permission, permission => permission.principal, { nullable: true }) permissions: Permission[]; @Column({ type: 'bigint', nullable: true, readonly: true }) @IsInt() @IsPositive() created_at: number; @Column({ type: 'bigint', nullable: true }) @IsInt() @IsPositive() updated_at: number; @BeforeInsert() public setCreatedAt() { this.created_at = Math.floor(Date.now() / 1000); this.updated_at = Math.floor(Date.now() / 1000); } @BeforeUpdate() public setUpdatedAt() { this.updated_at = Math.floor(Date.now() / 1000); } /** * Turns this entity into it's response class. */ public abstract toResponse(): ResponsePrincipal; }