import { Server } from 'socket.io' import prisma from '#application/prisma' import { TSocket } from '#application/types' import characterRepository from '#repositories/characterRepository' type Payload = { id: string name: string tags: string[] originX: number originY: number isAnimated: boolean frameRate: number frameWidth: number frameHeight: number } export default class ObjectUpdateEvent { constructor( private readonly io: Server, private readonly socket: TSocket ) {} public listen(): void { this.socket.on('gm:object:update', this.handleEvent.bind(this)) } private async handleEvent(data: Payload, callback: (success: boolean) => void): Promise { const character = await characterRepository.getById(this.socket.characterId as number) if (!character) return callback(false) if (character.role !== 'gm') { return callback(false) } try { const object = await prisma.object.update({ where: { id: data.id }, data: { name: data.name, tags: data.tags, originX: data.originX, originY: data.originY, isAnimated: data.isAnimated, frameRate: data.frameRate, frameWidth: data.frameWidth, frameHeight: data.frameHeight } }) callback(true) } catch (error) { console.error(error) callback(false) } } }