import { randomUUID } from 'node:crypto' import { Collection, Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' import { Character } from './character' import { Sprite } from './sprite' import { BaseEntity } from '#application/base/baseEntity' import { CharacterGender, CharacterRace } from '#application/enums' import { UUID } from '#application/types' @Entity() export class CharacterType extends BaseEntity { @PrimaryKey() id = randomUUID() @Property() name!: string @Enum(() => CharacterGender) gender!: CharacterGender @Enum(() => CharacterRace) race!: CharacterRace @Property() isSelectable = false @OneToMany(() => Character, (character) => character.characterType) characters = new Collection(this) @ManyToOne(() => Sprite, { nullable: true }) sprite?: Sprite @Property() createdAt = new Date() @Property() updatedAt = new Date() setId(id: UUID) { this.id = id return this } getId() { return this.id } setName(name: string) { this.name = name return this } getName() { return this.name } setGender(gender: CharacterGender) { this.gender = gender return this } getGender() { return this.gender } setRace(race: CharacterRace) { this.race = race return this } getRace() { return this.race } setIsSelectable(isSelectable: boolean) { this.isSelectable = isSelectable return this } getIsSelectable() { return this.isSelectable } setSprite(sprite: Sprite) { this.sprite = sprite return this } getSprite() { return this.sprite } setCreatedAt(createdAt: Date) { this.createdAt = createdAt return this } getCreatedAt() { return this.createdAt } setUpdatedAt(updatedAt: Date) { this.updatedAt = updatedAt return this } getUpdatedAt() { return this.updatedAt } setCharacters(characters: Collection) { this.characters = characters return this } getCharacters() { return this.characters } }