import { IsInt } from 'class-validator';
import { 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[];

  /**
   * Turns this entity into it's response class.
   */
  public abstract toResponse(): ResponsePrincipal;
}