1
0
forked from noxious/server

Tile CRUD works again

This commit is contained in:
Dennis Postma 2025-01-02 01:38:52 +01:00
parent 664a74c973
commit ab89d0cbb0
3 changed files with 23 additions and 52 deletions

View File

@ -1,24 +1,17 @@
import { Tile } from '@prisma/client'
import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository' import characterRepository from '#repositories/characterRepository'
import TileRepository from '#repositories/tileRepository' import TileRepository from '#repositories/tileRepository'
import { BaseEvent } from '#application/base/baseEvent'
import { Tile } from '#entities/tile'
interface IPayload {} interface IPayload {}
export default class TileListEvent { export default class TileListEven extends BaseEvent {
constructor(
private readonly io: Server,
private readonly socket: TSocket
) {}
public listen(): void { public listen(): void {
this.socket.on('gm:tile:list', this.handleEvent.bind(this)) this.socket.on('gm:tile:list', this.handleEvent.bind(this))
} }
private async handleEvent(data: any, callback: (response: Tile[]) => void): Promise<void> { private async handleEvent(data: IPayload, callback: (response: Tile[]) => void): Promise<void> {
const character = await characterRepository.getById(this.socket.characterId as number) const character = await characterRepository.getById(this.socket.characterId!)
if (!character) return if (!character) return
if (character.role !== 'gm') { if (character.role !== 'gm') {

View File

@ -1,27 +1,21 @@
import { Server } from 'socket.io'
import prisma from '#application/prisma'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository' import characterRepository from '#repositories/characterRepository'
import { BaseEvent } from '#application/base/baseEvent'
import TileRepository from '#repositories/tileRepository'
import { UUID } from '#application/types'
type Payload = { type Payload = {
id: string id: UUID
name: string name: string
tags: string[] tags: string[]
} }
export default class TileUpdateEvent { export default class TileUpdateEvent extends BaseEvent{
constructor(
private readonly io: Server,
private readonly socket: TSocket
) {}
public listen(): void { public listen(): void {
this.socket.on('gm:tile:update', this.handleEvent.bind(this)) this.socket.on('gm:tile:update', this.handleEvent.bind(this))
} }
private async handleEvent(data: Payload, callback: (success: boolean) => void): Promise<void> { private async handleEvent(data: Payload, callback: (success: boolean) => void): Promise<void> {
const character = await characterRepository.getById(this.socket.characterId as number) const character = await characterRepository.getById(this.socket.characterId!)
if (!character) return callback(false) if (!character) return callback(false)
if (character.role !== 'gm') { if (character.role !== 'gm') {
@ -29,15 +23,10 @@ export default class TileUpdateEvent {
} }
try { try {
const Tile = await prisma.tile.update({ const tile = await TileRepository.getById(data.id)
where: { if (!tile) return callback(false)
id: data.id
}, await tile.setName(data.name).setTags(data.tags).update()
data: {
name: data.name,
tags: data.tags
}
})
callback(true) callback(true)
} catch (error) { } catch (error) {

View File

@ -1,31 +1,23 @@
import fs from 'fs/promises' import fs from 'fs/promises'
import { writeFile } from 'node:fs/promises' import { writeFile } from 'node:fs/promises'
import { Server } from 'socket.io'
import { gameMasterLogger } from '#application/logger'
import prisma from '#application/prisma'
import Storage from '#application/storage' import Storage from '#application/storage'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository' import characterRepository from '#repositories/characterRepository'
import { BaseEvent } from '#application/base/baseEvent'
import { Tile } from '#entities/tile'
interface ITileData { interface ITileData {
[key: string]: Buffer [key: string]: Buffer
} }
export default class TileUploadEvent { export default class TileUploadEvent extends BaseEvent {
constructor(
private readonly io: Server,
private readonly socket: TSocket
) {}
public listen(): void { public listen(): void {
this.socket.on('gm:tile:upload', this.handleEvent.bind(this)) this.socket.on('gm:tile:upload', this.handleEvent.bind(this))
} }
private async handleEvent(data: ITileData, callback: (response: boolean) => void): Promise<void> { private async handleEvent(data: ITileData, callback: (response: boolean) => void): Promise<void> {
try { try {
const character = await characterRepository.getById(this.socket.characterId as number) const character = await characterRepository.getById(this.socket.characterId!)
if (!character) return callback(false) if (!character) return callback(false)
if (character.role !== 'gm') { if (character.role !== 'gm') {
@ -38,12 +30,9 @@ export default class TileUploadEvent {
await fs.mkdir(public_folder, { recursive: true }) await fs.mkdir(public_folder, { recursive: true })
const uploadPromises = Object.entries(data).map(async ([key, tileData]) => { const uploadPromises = Object.entries(data).map(async ([key, tileData]) => {
const tile = await prisma.tile.create({ const tile = new Tile()
data: { await tile.setName('New tile').save()
name: 'New tile' const uuid = tile.getId()
}
})
const uuid = tile.id
const filename = `${uuid}.png` const filename = `${uuid}.png`
const finalFilePath = Storage.getPublicPath('tiles', filename) const finalFilePath = Storage.getPublicPath('tiles', filename)
await writeFile(finalFilePath, tileData) await writeFile(finalFilePath, tileData)
@ -53,7 +42,7 @@ export default class TileUploadEvent {
callback(true) callback(true)
} catch (error) { } catch (error) {
gameMasterLogger.error('Error uploading tile:', error) this.logger.error('Error uploading tile:', error)
callback(false) callback(false)
} }
} }