Skip to content
Snippets Groups Projects
coordinate.entity.ts 1.87 KiB
Newer Older
import { Entity, Column, PrimaryGeneratedColumn, ManyToOne } from 'typeorm';
L4168's avatar
L4168 committed

L4168's avatar
L4168 committed
import { GameEntity } from '../game/game.entity';
Samuli Virtapohja's avatar
Samuli Virtapohja committed
import { FactionEntity } from '../faction/faction.entity';
Ronnie Friman's avatar
Ronnie Friman committed
import { DataDTO } from './mapdrawing.dto';
L4168's avatar
L4168 committed

L4072's avatar
L4072 committed
///////////////////////////////////////////////////////////////////////////
/// MapDrawingEntity & MapDrawingHistoryEntity reflect database tables. ///
///                                                                     ///
/// MapDrawing ownershipCheck checks users rights to MapDrawing         ///
///////////////////////////////////////////////////////////////////////////
L4072's avatar
L4072 committed

L4168's avatar
L4168 committed
@Entity('MapDrawing')
export class MapDrawingEntity {
  @PrimaryGeneratedColumn('uuid') mapDrawingId: string;
L4168's avatar
L4168 committed
  @Column({ type: 'bool', nullable: true }) drawingIsActive: boolean;
Ronnie Friman's avatar
Ronnie Friman committed
  @Column({ type: 'json', nullable: true }) data: DataDTO;
L4168's avatar
L4168 committed

  // When Faction or game that has the drawing in question is deleted from
L4072's avatar
L4072 committed
  // the database, the drawing is also deleted
L4168's avatar
L4168 committed
  @ManyToOne(type => FactionEntity, faction => faction.mapDrawings, {
    onDelete: 'CASCADE',
  })
L4168's avatar
L4168 committed
  faction: FactionEntity;
Ronnie Friman's avatar
Ronnie Friman committed
  @ManyToOne(type => GameEntity, gameEntity => gameEntity.id, {
    onDelete: 'CASCADE',
  })
L4168's avatar
L4168 committed
  gameId: GameEntity;
L4168's avatar
L4168 committed

L4168's avatar
L4168 committed
  async ownershipCheck(factionEntity, role) {
    if (role === 'admin') {
      return factionEntity == this.faction;
    } else {
      return this.faction && factionEntity.factionId === this.faction.factionId
        ? true
        : false;
    }
  }
L4168's avatar
L4168 committed
}

@Entity('MapDrawingHistory')
export class MapDrawingHistoryEntity {
  @PrimaryGeneratedColumn('uuid') mapDrawingHistoryId: string;
L4168's avatar
L4168 committed
  @Column('float') timestamp: number;
  @Column('bool') drawingIsActive: boolean;
  @Column('json') data: JSON;

L4072's avatar
L4072 committed
  // If drawing is deleted, it's histories are deleted also
  @ManyToOne(() => MapDrawingEntity, mapDrawing => mapDrawing.mapDrawingId, {
    onDelete: 'CASCADE',
  })
  mapdrawing: string;
}