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