import { randomUUID } from 'node:crypto' import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' import { Character } from './character' import { Chat } from './chat' import { MapEffect } from './mapEffect' import { MapEventTile } from './mapEventTile' import { MapEventTileTeleport } from './mapEventTileTeleport' import { BaseEntity } from '#application/base/baseEntity' import { UUID } from '#application/types' import { placedMapObject } from '#entities/placedMapObject' @Entity() export class Map extends BaseEntity { @PrimaryKey() id = randomUUID() @Property() name!: string @Property() width = 10 @Property() height = 10 @Property({ type: 'json', nullable: true }) tiles?: any @Property() pvp = false @Property() createdAt = new Date() @Property() updatedAt = new Date() @OneToMany(() => MapEffect, (effect) => effect.map) mapEffects = new Collection(this) @OneToMany(() => MapEventTile, (tile) => tile.map) mapEventTiles = new Collection(this) @OneToMany(() => MapEventTileTeleport, (teleport) => teleport.toMap) mapEventTileTeleports = new Collection(this) @OneToMany(() => placedMapObject, (object) => object.map) placedMapObjects = new Collection(this) @OneToMany(() => Character, (character) => character.map) characters = new Collection(this) @OneToMany(() => Chat, (chat) => chat.map) chats = new Collection(this) setId(id: UUID) { this.id = id return this } getId() { return this.id } setName(name: string) { this.name = name return this } getName() { return this.name } setWidth(width: number) { this.width = width return this } getWidth() { return this.width } setHeight(height: number) { this.height = height return this } getHeight() { return this.height } setTiles(tiles: any) { this.tiles = tiles return this } getTiles() { return this.tiles } setPvp(pvp: boolean) { this.pvp = pvp return this } getPvp() { return this.pvp } setCreatedAt(createdAt: Date) { this.createdAt = createdAt return this } getCreatedAt() { return this.createdAt } setUpdatedAt(updatedAt: Date) { this.updatedAt = updatedAt return this } getUpdatedAt() { return this.updatedAt } setMapEffects(mapEffects: Collection) { this.mapEffects = mapEffects return this } getMapEffects() { return this.mapEffects } setMapEventTiles(mapEventTiles: Collection) { this.mapEventTiles = mapEventTiles return this } getMapEventTiles() { return this.mapEventTiles } setMapEventTileTeleports(mapEventTileTeleports: Collection) { this.mapEventTileTeleports = mapEventTileTeleports return this } getMapEventTileTeleports() { return this.mapEventTileTeleports } setPlacedMapObjects(placedMapObjects: Collection) { this.placedMapObjects = placedMapObjects return this } getPlacedMapObjects() { return this.placedMapObjects } setCharacters(characters: Collection) { this.characters = characters return this } getCharacters() { return this.characters } setChats(chats: Collection) { this.chats = chats return this } getChats() { return this.chats } }