2025-02-12 00:50:51 +01:00

42 lines
1.2 KiB
TypeScript

import fs from 'fs'
import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums'
import Storage from '@/application/storage'
import type { UUID } from '@/application/types'
import SpriteRepository from '@/repositories/spriteRepository'
type Payload = {
id: UUID
}
export default class GMSpriteDeleteEvent extends BaseEvent {
public listen(): void {
this.socket.on(SocketEvent.GM_SPRITE_DELETE, this.handleEvent.bind(this))
}
private async handleEvent(data: Payload, callback: (response: boolean) => void): Promise<void> {
try {
if (!(await this.isCharacterGM())) return
await this.deleteSpriteFolder(data.id)
const spriteRepository = new SpriteRepository()
await (await spriteRepository.getById(data.id))?.delete()
this.logger.info(`Sprite ${data.id} deleted.`)
return callback(true)
} catch (error: any) {
this.logger.error('gm:sprite:delete error', error.message)
return callback(false)
}
}
private async deleteSpriteFolder(spriteId: string): Promise<void> {
const finalFilePath = Storage.getPublicPath('sprites', spriteId)
if (fs.existsSync(finalFilePath)) {
await fs.promises.rmdir(finalFilePath, { recursive: true })
}
}
}