import {
  BaseEntity,
  Column,
  Entity,
  Index,
  JoinColumn,
  ManyToOne,
  PrimaryGeneratedColumn,
} from 'typeorm';
import { PermissionEntity } from './permission.entity';
import { RoleEntity } from './role.entity';

@Index('fk_role_permission_permissions1_idx', ['permissionId'], {})
@Index('fk_role_permission_roles1_idx', ['roleId'], {})
@Entity('roles_map_permissions')
export class RoleMapPermissionEntity extends BaseEntity {
  @PrimaryGeneratedColumn({ type: 'int', name: 'id' })
  id: number;

  @Column('int', { name: 'roleId' })
  roleId: number;

  @Column('int', { name: 'permissionId' })
  permissionId: number;

  /**
   * Relations
   */
  @ManyToOne(
    () => PermissionEntity,
    (permissions) => permissions.roleMapPermissions,
    { onDelete: 'NO ACTION', onUpdate: 'NO ACTION' },
  )
  @JoinColumn([{ name: 'permissionId', referencedColumnName: 'id' }])
  permission: PermissionEntity;

  @ManyToOne(() => RoleEntity, (roles) => roles.roleMapPermissions, {
    onDelete: 'NO ACTION',
    onUpdate: 'NO ACTION',
  })
  @JoinColumn([{ name: 'roleId', referencedColumnName: 'id' }])
  role: RoleEntity;
}
