Skip to content
Snippets Groups Projects
game.dto.ts 2.66 KiB
Newer Older
import {
  IsNotEmpty,
Samuli Virtapohja's avatar
Samuli Virtapohja committed
  IsString,
Samuli Virtapohja's avatar
Samuli Virtapohja committed
  IsDateString,
L4168's avatar
L4168 committed
  IsNumber,
  ValidateNested,
  Allow,
L4168's avatar
L4168 committed
  IsUUID,
  IsIn,
L4168's avatar
L4168 committed
  IsOptional,
} from 'class-validator';
L4168's avatar
L4168 committed

Samuli Virtapohja's avatar
Samuli Virtapohja committed
import { ObjectivePointEntity } from './game.entity';
import { FactionDTO } from '../faction/faction.dto';
import { Type } from 'class-transformer';
Ronnie Friman's avatar
Ronnie Friman committed
export class NodeCoreSettingsDTO {
  @IsNumber()
  capture_time: number;
  @IsNumber()
  confirmation_time: number;
  @IsNumber()
  owner: number;
  @IsNumber()
  capture: number;
  @IsNumber()
  buttons_available: number;
  @IsNumber()
  heartbeat_interval: number;
}

export class CenterDTO {
  @IsNumber()
  lat: number;
  @IsNumber()
  lng: number;
}

export class NodeSettingsDTO {
  @ValidateNested()
  @Type(() => NodeCoreSettingsDTO)
  node_settings: NodeCoreSettingsDTO;
}

export class GameDTO {
L4168's avatar
L4168 committed
  @IsOptional()
L4168's avatar
L4168 committed
  id: string;
  @IsString()
  @IsNotEmpty()
Samuli Virtapohja's avatar
Samuli Virtapohja committed
  @Length(3, 30)
  name: string;
  @IsNotEmpty()
  @Length(1, 255)
  desc: string;
  @ValidateNested()
  @Type(() => CenterDTO)
  center: CenterDTO;
  @Allow()
  @ValidateNested()
  @Type(() => NodeSettingsDTO)
  nodesettings?: NodeSettingsDTO;
  @Allow()
  map?: JSON;
  @IsDateString()
  @IsNotEmpty()
  startdate: string;
  @IsDateString()
  @IsNotEmpty()
  enddate: string;
  @ValidateNested()
  @Type(() => FactionDTO)
Samuli Virtapohja's avatar
Samuli Virtapohja committed
  factions?: FactionDTO[];
  @ValidateNested()
  @Type(() => FlagboxDTO)
L4168's avatar
L4168 committed
  objective_points?: FlagboxDTO[];
L4168's avatar
L4168 committed
export class newGameDTO {
  @IsString()
  @IsNotEmpty()
  @Length(3, 30)
  name: string;
  @IsString()
  @IsNotEmpty()
  @Length(1, 255)
  desc: string;
Ronnie Friman's avatar
Ronnie Friman committed
  @ValidateNested()
  @Type(() => CenterDTO)
  center: CenterDTO;
L4168's avatar
L4168 committed
  @IsDateString()
  @IsNotEmpty()
  startdate: string;
  @IsDateString()
  @IsNotEmpty()
  enddate: string;
Ronnie Friman's avatar
Ronnie Friman committed
  @Length(0, 65)
  image: string;
L4168's avatar
L4168 committed
  @Allow()
  map?: JSON;
L4168's avatar
L4168 committed
}

L4168's avatar
L4168 committed
export class GameStateDTO {
  @IsUUID('4')
  id: string;
  @IsIn(['CREATED', 'STARTED', 'PAUSED', 'ENDED', 'ONGOING'])
L4168's avatar
L4168 committed
  state: string;
}

L4168's avatar
L4168 committed
export class FlagboxDTO {
  @IsOptional()
  @IsUUID('4')
  objectivePointId: string;
L4168's avatar
L4168 committed
  @IsString()
  @IsNotEmpty()
  @Length(7, 7)
L4168's avatar
L4168 committed
  objectivePointDescription: string;
  @IsNumber()
  objectivePointMultiplier: number;
  @IsOptional()
  data: JSON;
L4168's avatar
L4168 committed
}

export class FlagboxEventDTO {
  @IsString()
  @IsNotEmpty()
  @Length(7, 7)
L4168's avatar
L4168 committed
  node_id: string;
  @IsNumber()
  @Min(0)
  @Max(3)
  owner: number; // owner = 0, => no owner, owner = 1, => first entry in faction db
  @IsNumber()
  @Min(0)
  @Max(3)
  action: number; // 0=no capture ongoing, 1=captured, 2=capture ongoing
  @IsNumber()
  @Min(0)
  @Max(3)
  capture: number; // which faction is capturing, same logic as in owner with numbers
  oP_HistoryTimestamp?: number;
L4168's avatar
L4168 committed
  objective_point?: ObjectivePointEntity;
L4168's avatar
L4168 committed
}