From 9c80efbb51df352d1cfb9e015994f360b9a42507 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Thu, 4 Jul 2024 13:38:12 +0200 Subject: [PATCH] object stuff --- .../migration.sql | 0 .../gm/{tiles => object}/GmObjectDetails.ts | 0 src/app/events/gm/object/GmObjectList.ts | 26 ++++++++++++ .../gm/{tiles => object}/GmObjectRemove.ts | 0 .../gm/{tiles => object}/GmObjectUpload.ts | 6 ++- .../events/gm/{objects => tile}/GmTileList.ts | 4 +- .../gm/{objects => tile}/GmTileRemove.ts | 0 .../events/gm/{objects => tile}/GmTileTags.ts | 0 .../gm/{objects => tile}/GmTileTagsUpdate.ts | 0 .../gm/{objects => tile}/GmTileUpload.ts | 2 +- src/app/events/gm/tiles/GmObjectList.ts | 42 ------------------- src/app/repositories/ObjectRepository.ts | 35 ++++++++++++++-- src/app/utilities/Http.ts | 4 +- 13 files changed, 67 insertions(+), 52 deletions(-) rename prisma/migrations/{20240703230300_init => 20240704113526_init}/migration.sql (100%) rename src/app/events/gm/{tiles => object}/GmObjectDetails.ts (100%) create mode 100644 src/app/events/gm/object/GmObjectList.ts rename src/app/events/gm/{tiles => object}/GmObjectRemove.ts (100%) rename src/app/events/gm/{tiles => object}/GmObjectUpload.ts (83%) rename src/app/events/gm/{objects => tile}/GmTileList.ts (90%) rename src/app/events/gm/{objects => tile}/GmTileRemove.ts (100%) rename src/app/events/gm/{objects => tile}/GmTileTags.ts (100%) rename src/app/events/gm/{objects => tile}/GmTileTagsUpdate.ts (100%) rename src/app/events/gm/{objects => tile}/GmTileUpload.ts (95%) delete mode 100644 src/app/events/gm/tiles/GmObjectList.ts diff --git a/prisma/migrations/20240703230300_init/migration.sql b/prisma/migrations/20240704113526_init/migration.sql similarity index 100% rename from prisma/migrations/20240703230300_init/migration.sql rename to prisma/migrations/20240704113526_init/migration.sql diff --git a/src/app/events/gm/tiles/GmObjectDetails.ts b/src/app/events/gm/object/GmObjectDetails.ts similarity index 100% rename from src/app/events/gm/tiles/GmObjectDetails.ts rename to src/app/events/gm/object/GmObjectDetails.ts diff --git a/src/app/events/gm/object/GmObjectList.ts b/src/app/events/gm/object/GmObjectList.ts new file mode 100644 index 0000000..6c3a51c --- /dev/null +++ b/src/app/events/gm/object/GmObjectList.ts @@ -0,0 +1,26 @@ +import { Server } from "socket.io"; +import {TSocket} from "../../../utilities/Types"; +import { Object } from '@prisma/client' +import ObjectRepository from '../../../repositories/ObjectRepository' + +interface IPayload { +} + +/** + * Handle game master list object event + * @param socket + * @param io + */ +export default function (socket: TSocket, io: Server) { + socket.on('gm:object:list', async (data: any, callback: (response: Object[]) => void) => { + + if (socket.character?.role !== 'gm') { + console.log(`---Character #${socket.character?.id} is not a game master.`); + return; + } + + // get all objects + const objects = await ObjectRepository.getAll(); + callback(objects); + }); +} \ No newline at end of file diff --git a/src/app/events/gm/tiles/GmObjectRemove.ts b/src/app/events/gm/object/GmObjectRemove.ts similarity index 100% rename from src/app/events/gm/tiles/GmObjectRemove.ts rename to src/app/events/gm/object/GmObjectRemove.ts diff --git a/src/app/events/gm/tiles/GmObjectUpload.ts b/src/app/events/gm/object/GmObjectUpload.ts similarity index 83% rename from src/app/events/gm/tiles/GmObjectUpload.ts rename to src/app/events/gm/object/GmObjectUpload.ts index 642231a..3dcc128 100644 --- a/src/app/events/gm/tiles/GmObjectUpload.ts +++ b/src/app/events/gm/object/GmObjectUpload.ts @@ -4,6 +4,7 @@ import { writeFile } from "node:fs/promises"; import path from "path"; import fs from "fs/promises"; import { randomUUID } from 'node:crypto'; +import objectRepository from '../../../repositories/ObjectRepository' interface IObjectData { [key: string]: Buffer; @@ -28,7 +29,8 @@ export default function (socket: TSocket, io: Server) { await fs.mkdir(public_folder, { recursive: true }); const uploadPromises = Object.entries(data).map(async ([key, objectData]) => { - const uuid = randomUUID(); + const object = await objectRepository.create('New object', 0, 0); + const uuid = object.id; const filename = `${uuid}.png`; const finalFilePath = path.join(public_folder, filename); await writeFile(finalFilePath, objectData); @@ -38,7 +40,7 @@ export default function (socket: TSocket, io: Server) { callback(true); } catch (error) { - console.error('Error uploading objects:', error); + console.error('Error uploading tile:', error); callback(false); } }); diff --git a/src/app/events/gm/objects/GmTileList.ts b/src/app/events/gm/tile/GmTileList.ts similarity index 90% rename from src/app/events/gm/objects/GmTileList.ts rename to src/app/events/gm/tile/GmTileList.ts index 053c9e9..c48baa6 100644 --- a/src/app/events/gm/objects/GmTileList.ts +++ b/src/app/events/gm/tile/GmTileList.ts @@ -7,7 +7,7 @@ interface IPayload { } /** - * Handle game master list tiles event + * Handle game master list object event * @param socket * @param io */ @@ -35,7 +35,7 @@ export default function (socket: TSocket, io: Server) { tiles.push(file.replace('.png', '')); }); - // send over the list of tiles to the socket + // send over the list of object to the socket callback(tiles); }); }); diff --git a/src/app/events/gm/objects/GmTileRemove.ts b/src/app/events/gm/tile/GmTileRemove.ts similarity index 100% rename from src/app/events/gm/objects/GmTileRemove.ts rename to src/app/events/gm/tile/GmTileRemove.ts diff --git a/src/app/events/gm/objects/GmTileTags.ts b/src/app/events/gm/tile/GmTileTags.ts similarity index 100% rename from src/app/events/gm/objects/GmTileTags.ts rename to src/app/events/gm/tile/GmTileTags.ts diff --git a/src/app/events/gm/objects/GmTileTagsUpdate.ts b/src/app/events/gm/tile/GmTileTagsUpdate.ts similarity index 100% rename from src/app/events/gm/objects/GmTileTagsUpdate.ts rename to src/app/events/gm/tile/GmTileTagsUpdate.ts diff --git a/src/app/events/gm/objects/GmTileUpload.ts b/src/app/events/gm/tile/GmTileUpload.ts similarity index 95% rename from src/app/events/gm/objects/GmTileUpload.ts rename to src/app/events/gm/tile/GmTileUpload.ts index 7207ab6..671e0fc 100644 --- a/src/app/events/gm/objects/GmTileUpload.ts +++ b/src/app/events/gm/tile/GmTileUpload.ts @@ -38,7 +38,7 @@ export default function (socket: TSocket, io: Server) { callback(true); } catch (error) { - console.error('Error uploading tiles:', error); + console.error('Error uploading object:', error); callback(false); } }); diff --git a/src/app/events/gm/tiles/GmObjectList.ts b/src/app/events/gm/tiles/GmObjectList.ts deleted file mode 100644 index 0b7a893..0000000 --- a/src/app/events/gm/tiles/GmObjectList.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Server } from "socket.io"; -import {TSocket} from "../../../utilities/Types"; -import fs from 'fs'; -import path from "path"; - -interface IPayload { -} - -/** - * Handle game master list objects event - * @param socket - * @param io - */ -export default function (socket: TSocket, io: Server) { - socket.on('gm:object:list', async (data: any, callback: (response: string[]) => void) => { - - if (socket.character?.role !== 'gm') { - console.log(`---Character #${socket.character?.id} is not a game master.`); - return; - } - - // get root path - const folder = path.join(process.cwd(), 'public', 'objects'); - - // list the files in the folder - let objects: string[] = []; - - fs.readdir(folder, (err, files) => { - if (err) { - console.log(err); - return; - } - - files.forEach(file => { - objects.push(file.replace('.png', '')); - }); - - // send over the list of objects to the socket - callback(objects); - }); - }); -} \ No newline at end of file diff --git a/src/app/repositories/ObjectRepository.ts b/src/app/repositories/ObjectRepository.ts index e8fa5fc..c534277 100644 --- a/src/app/repositories/ObjectRepository.ts +++ b/src/app/repositories/ObjectRepository.ts @@ -2,13 +2,42 @@ import prisma from '../utilities/Prisma'; // Import the global Prisma instance import { Object } from '@prisma/client' class ObjectRepository { - getById(id: string): Promise { + async getById(id: string): Promise { return prisma.object.findUnique({ - where: { - id, + where: { id }, + }); + } + + async getAll(): Promise { + return prisma.object.findMany(); + } + + async create(name: string, origin_x: number, origin_y: number): Promise { + return prisma.object.create({ + data: { + name, + origin_x, + origin_y }, }); } + + async update(id: string, name: string, origin_x: number, origin_y: number): Promise { + return prisma.object.update({ + where: { id }, + data: { + name, + origin_x, + origin_y + }, + }); + } + + async delete(id: string): Promise { + return prisma.object.delete({ + where: { id }, + }); + } } export default new ObjectRepository(); \ No newline at end of file diff --git a/src/app/utilities/Http.ts b/src/app/utilities/Http.ts index a857a97..e484393 100644 --- a/src/app/utilities/Http.ts +++ b/src/app/utilities/Http.ts @@ -16,12 +16,12 @@ async function addHttpRoutes(app: Application) { let assets: TAsset[] = []; const tiles = listTiles(); tiles.forEach(tile => { - assets.push({key: tile, value: '/tiles/' + tile, group: 'tiles', type: 'link'}); + assets.push({key: tile, value: '/object/' + tile, group: 'tiles', type: 'link'}); }); const objects = listObjects(); objects.forEach(object => { - assets.push({key: object, value: '/objects/' + object, group: 'objects', type: 'link'}); + assets.push({key: object, value: '/tile/' + object, group: 'objects', type: 'link'}); }); res.json(assets);