import { Server } from 'socket.io' import { TSocket } from '../../../utilities/Types' import prisma from '../../../utilities/Prisma' import type { SpriteAction } from '@prisma/client' import path from 'path' import { writeFile } from 'node:fs/promises' import fs from 'fs/promises' import spriteRepository from '../../../repositories/SpriteRepository' type Payload = { id: string name: string spriteActions: SpriteAction[] } export default function (socket: TSocket, io: Server) { socket.on('gm:sprite:update', async (data: Payload, callback: (success: boolean) => void) => { if (socket.character?.role !== 'gm') { return } try { await prisma.sprite.update({ where: { id: data.id }, data: { name: data.name, spriteActions: { deleteMany: { spriteId: data.id }, create: data.spriteActions.map((spriteAction) => ({ action: spriteAction.action, origin_x: spriteAction.origin_x, origin_y: spriteAction.origin_y, isAnimated: spriteAction.isAnimated, isLooping: spriteAction.isLooping, sprites: spriteAction.sprites as string[], })) } } }) const public_folder = path.join(process.cwd(), 'public', 'sprites', data.id) // Ensure the folder exists await fs.mkdir(public_folder, { recursive: true }) const sprite = await spriteRepository.getById(data.id) callback(true) } catch (error) { console.error(error) callback(false) } }) }