import { BaseEvent } from '#application/base/baseEvent' import { UUID } from '#application/types' import { Character } from '#entities/character' import { Zone } from '#entities/zone' import CharacterRepository from '#repositories/characterRepository' type TypePayload = { characterId: UUID } type TypeResponse = { zone: Zone characters: Character[] } export default class CharacterDeleteEvent extends BaseEvent { public listen(): void { this.socket.on('character:delete', this.handleEvent.bind(this)) } private async handleEvent(data: TypePayload, callback: (response: TypeResponse) => void): Promise { try { const character = await CharacterRepository.getByUserAndId(this.socket.userId!, data.characterId) if (character) { await character.delete() } const characters: Character[] = await CharacterRepository.getByUserId(this.socket.userId!) this.socket.emit('character:list', characters) } catch (error: any) { return this.socket.emit('notification', { message: 'Character delete failed. Please try again.' }) } } }