From 39f4e79a88470e90bd767b1e6774c7cfa96da12a Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Sat, 24 Aug 2024 03:08:43 +0200 Subject: [PATCH] Major refractor, cleaning and improvements. --- package-lock.json | 6 +-- .../chat/{gm => gameMaster}/alertCommand.ts | 0 src/events/disconnect.ts | 2 +- .../assetManager}/object/list.ts | 4 +- .../assetManager}/object/remove.ts | 4 +- .../assetManager}/object/update.ts | 4 +- .../assetManager}/object/upload.ts | 4 +- .../assetManager}/sprite/create.ts | 4 +- .../assetManager}/sprite/list.ts | 4 +- .../assetManager}/sprite/remove.ts | 4 +- .../assetManager}/sprite/update.ts | 4 +- .../assetManager}/tile/list.ts | 4 +- .../assetManager}/tile/remove.ts | 4 +- .../assetManager}/tile/update.ts | 4 +- .../assetManager}/tile/upload.ts | 4 +- .../zone => gameMaster/zoneEditor}/create.ts | 6 +-- .../zone => gameMaster/zoneEditor}/delete.ts | 2 +- .../zone => gameMaster/zoneEditor}/list.ts | 0 .../zone => gameMaster/zoneEditor}/request.ts | 2 +- .../zone => gameMaster/zoneEditor}/update.ts | 12 +++--- .../zoneRequest.ts => zone/characterJoin.ts} | 9 ++--- .../zoneLeave.ts => zone/characterLeave.ts} | 2 +- .../move.ts => zone/characterMove.ts} | 0 src/managers/zoneManager.ts | 40 ++++++++++++++++--- src/middleware/authentication.ts | 12 +++++- src/repositories/userRepository.ts | 1 + src/repositories/zoneRepository.ts | 31 +++++++------- src/server.ts | 2 +- src/services/userService.ts | 15 +++++++ src/services/zoneService.ts | 2 +- 30 files changed, 123 insertions(+), 69 deletions(-) rename src/events/chat/{gm => gameMaster}/alertCommand.ts (100%) rename src/events/{gm => gameMaster/assetManager}/object/list.ts (81%) rename src/events/{gm => gameMaster/assetManager}/object/remove.ts (90%) rename src/events/{gm => gameMaster/assetManager}/object/update.ts (90%) rename src/events/{gm => gameMaster/assetManager}/object/upload.ts (92%) rename src/events/{gm => gameMaster/assetManager}/sprite/create.ts (90%) rename src/events/{gm => gameMaster/assetManager}/sprite/list.ts (81%) rename src/events/{gm => gameMaster/assetManager}/sprite/remove.ts (90%) rename src/events/{gm => gameMaster/assetManager}/sprite/update.ts (97%) rename src/events/{gm => gameMaster/assetManager}/tile/list.ts (81%) rename src/events/{gm => gameMaster/assetManager}/tile/remove.ts (90%) rename src/events/{gm => gameMaster/assetManager}/tile/update.ts (86%) rename src/events/{gm => gameMaster/assetManager}/tile/upload.ts (92%) rename src/events/{gm/zone => gameMaster/zoneEditor}/create.ts (91%) rename src/events/{gm/zone => gameMaster/zoneEditor}/delete.ts (95%) rename src/events/{gm/zone => gameMaster/zoneEditor}/list.ts (100%) rename src/events/{gm/zone => gameMaster/zoneEditor}/request.ts (95%) rename src/events/{gm/zone => gameMaster/zoneEditor}/update.ts (92%) rename src/events/{character/zoneRequest.ts => zone/characterJoin.ts} (81%) rename src/events/{character/zoneLeave.ts => zone/characterLeave.ts} (96%) rename src/events/{character/move.ts => zone/characterMove.ts} (100%) diff --git a/package-lock.json b/package-lock.json index 5039467..812db1f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2546,9 +2546,9 @@ } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "license": "0BSD", "optional": true }, diff --git a/src/events/chat/gm/alertCommand.ts b/src/events/chat/gameMaster/alertCommand.ts similarity index 100% rename from src/events/chat/gm/alertCommand.ts rename to src/events/chat/gameMaster/alertCommand.ts diff --git a/src/events/disconnect.ts b/src/events/disconnect.ts index d6186a6..360b0b3 100644 --- a/src/events/disconnect.ts +++ b/src/events/disconnect.ts @@ -20,7 +20,7 @@ export default function (socket: TSocket, io: Server) { ZoneManager.removeCharacterFromZone(socket.character.zoneId, socket.character) - io.in(socket.character.zoneId.toString()).emit('zone:character:leave', socket.character.id) + io.in(socket.character.zoneId.toString()).emit('zoneEditor:character:leave', socket.character.id) io.emit('character:disconnect', socket.character.id) }) } diff --git a/src/events/gm/object/list.ts b/src/events/gameMaster/assetManager/object/list.ts similarity index 81% rename from src/events/gm/object/list.ts rename to src/events/gameMaster/assetManager/object/list.ts index 1500103..57c5edf 100644 --- a/src/events/gm/object/list.ts +++ b/src/events/gameMaster/assetManager/object/list.ts @@ -1,7 +1,7 @@ import { Server } from 'socket.io' -import { TSocket } from '../../../utilities/types' +import { TSocket } from '../../../../utilities/types' import { Object } from '@prisma/client' -import ObjectRepository from '../../../repositories/objectRepository' +import ObjectRepository from '../../../../repositories/objectRepository' interface IPayload {} diff --git a/src/events/gm/object/remove.ts b/src/events/gameMaster/assetManager/object/remove.ts similarity index 90% rename from src/events/gm/object/remove.ts rename to src/events/gameMaster/assetManager/object/remove.ts index 0417827..ba1fb9e 100644 --- a/src/events/gm/object/remove.ts +++ b/src/events/gameMaster/assetManager/object/remove.ts @@ -1,8 +1,8 @@ import { Server } from 'socket.io' -import { TSocket } from '../../../utilities/types' +import { TSocket } from '../../../../utilities/types' import path from 'path' import fs from 'fs' -import prisma from '../../../utilities/prisma' +import prisma from '../../../../utilities/prisma' interface IPayload { object: string diff --git a/src/events/gm/object/update.ts b/src/events/gameMaster/assetManager/object/update.ts similarity index 90% rename from src/events/gm/object/update.ts rename to src/events/gameMaster/assetManager/object/update.ts index 28be49c..47341ef 100644 --- a/src/events/gm/object/update.ts +++ b/src/events/gameMaster/assetManager/object/update.ts @@ -1,6 +1,6 @@ import { Server } from 'socket.io' -import { TSocket } from '../../../utilities/types' -import prisma from '../../../utilities/prisma' +import { TSocket } from '../../../../utilities/types' +import prisma from '../../../../utilities/prisma' type Payload = { id: string diff --git a/src/events/gm/object/upload.ts b/src/events/gameMaster/assetManager/object/upload.ts similarity index 92% rename from src/events/gm/object/upload.ts rename to src/events/gameMaster/assetManager/object/upload.ts index b93de02..70f40eb 100644 --- a/src/events/gm/object/upload.ts +++ b/src/events/gameMaster/assetManager/object/upload.ts @@ -1,9 +1,9 @@ import { Server } from 'socket.io' -import { TSocket } from '../../../utilities/types' +import { TSocket } from '../../../../utilities/types' import { writeFile } from 'node:fs/promises' import path from 'path' import fs from 'fs/promises' -import prisma from '../../../utilities/prisma' +import prisma from '../../../../utilities/prisma' interface IObjectData { [key: string]: Buffer diff --git a/src/events/gm/sprite/create.ts b/src/events/gameMaster/assetManager/sprite/create.ts similarity index 90% rename from src/events/gm/sprite/create.ts rename to src/events/gameMaster/assetManager/sprite/create.ts index e1cbdae..d90424e 100644 --- a/src/events/gm/sprite/create.ts +++ b/src/events/gameMaster/assetManager/sprite/create.ts @@ -1,8 +1,8 @@ import { Server } from 'socket.io' -import { TSocket } from '../../../utilities/types' +import { TSocket } from '../../../../utilities/types' import path from 'path' import fs from 'fs/promises' -import prisma from '../../../utilities/prisma' +import prisma from '../../../../utilities/prisma' /** * Handle game master new sprite event diff --git a/src/events/gm/sprite/list.ts b/src/events/gameMaster/assetManager/sprite/list.ts similarity index 81% rename from src/events/gm/sprite/list.ts rename to src/events/gameMaster/assetManager/sprite/list.ts index 642dd49..4133ea4 100644 --- a/src/events/gm/sprite/list.ts +++ b/src/events/gameMaster/assetManager/sprite/list.ts @@ -1,7 +1,7 @@ import { Server } from 'socket.io' -import { TSocket } from '../../../utilities/types' +import { TSocket } from '../../../../utilities/types' import { Sprite } from '@prisma/client' -import SpriteRepository from '../../../repositories/spriteRepository' +import SpriteRepository from '../../../../repositories/spriteRepository' interface IPayload {} diff --git a/src/events/gm/sprite/remove.ts b/src/events/gameMaster/assetManager/sprite/remove.ts similarity index 90% rename from src/events/gm/sprite/remove.ts rename to src/events/gameMaster/assetManager/sprite/remove.ts index ea1710f..ca2e12b 100644 --- a/src/events/gm/sprite/remove.ts +++ b/src/events/gameMaster/assetManager/sprite/remove.ts @@ -1,8 +1,8 @@ import { Server } from 'socket.io' -import { TSocket } from '../../../utilities/types' +import { TSocket } from '../../../../utilities/types' import fs from 'fs' import path from 'path' -import prisma from '../../../utilities/prisma' +import prisma from '../../../../utilities/prisma' type Payload = { id: string diff --git a/src/events/gm/sprite/update.ts b/src/events/gameMaster/assetManager/sprite/update.ts similarity index 97% rename from src/events/gm/sprite/update.ts rename to src/events/gameMaster/assetManager/sprite/update.ts index 6407b3c..3f1a634 100644 --- a/src/events/gm/sprite/update.ts +++ b/src/events/gameMaster/assetManager/sprite/update.ts @@ -1,6 +1,6 @@ import { Server } from 'socket.io' -import { TSocket } from '../../../utilities/types' -import prisma from '../../../utilities/prisma' +import { TSocket } from '../../../../utilities/types' +import prisma from '../../../../utilities/prisma' import type { Prisma, SpriteAction } from '@prisma/client' import path from 'path' import { writeFile, mkdir } from 'node:fs/promises' diff --git a/src/events/gm/tile/list.ts b/src/events/gameMaster/assetManager/tile/list.ts similarity index 81% rename from src/events/gm/tile/list.ts rename to src/events/gameMaster/assetManager/tile/list.ts index f951bf5..aa9c1ed 100644 --- a/src/events/gm/tile/list.ts +++ b/src/events/gameMaster/assetManager/tile/list.ts @@ -1,7 +1,7 @@ import { Server } from 'socket.io' -import { TSocket } from '../../../utilities/types' +import { TSocket } from '../../../../utilities/types' import { Tile } from '@prisma/client' -import TileRepository from '../../../repositories/tileRepository' +import TileRepository from '../../../../repositories/tileRepository' interface IPayload {} diff --git a/src/events/gm/tile/remove.ts b/src/events/gameMaster/assetManager/tile/remove.ts similarity index 90% rename from src/events/gm/tile/remove.ts rename to src/events/gameMaster/assetManager/tile/remove.ts index 3e999a6..510c533 100644 --- a/src/events/gm/tile/remove.ts +++ b/src/events/gameMaster/assetManager/tile/remove.ts @@ -1,8 +1,8 @@ import { Server } from 'socket.io' -import { TSocket } from '../../../utilities/types' +import { TSocket } from '../../../../utilities/types' import path from 'path' import fs from 'fs' -import prisma from '../../../utilities/prisma' +import prisma from '../../../../utilities/prisma' type Payload = { id: string diff --git a/src/events/gm/tile/update.ts b/src/events/gameMaster/assetManager/tile/update.ts similarity index 86% rename from src/events/gm/tile/update.ts rename to src/events/gameMaster/assetManager/tile/update.ts index 884333b..8b8a58e 100644 --- a/src/events/gm/tile/update.ts +++ b/src/events/gameMaster/assetManager/tile/update.ts @@ -1,6 +1,6 @@ import { Server } from 'socket.io' -import { TSocket } from '../../../utilities/types' -import prisma from '../../../utilities/prisma' +import { TSocket } from '../../../../utilities/types' +import prisma from '../../../../utilities/prisma' type Payload = { id: string diff --git a/src/events/gm/tile/upload.ts b/src/events/gameMaster/assetManager/tile/upload.ts similarity index 92% rename from src/events/gm/tile/upload.ts rename to src/events/gameMaster/assetManager/tile/upload.ts index fb1a086..1b9d0d3 100644 --- a/src/events/gm/tile/upload.ts +++ b/src/events/gameMaster/assetManager/tile/upload.ts @@ -1,9 +1,9 @@ import { Server } from 'socket.io' -import { TSocket } from '../../../utilities/types' +import { TSocket } from '../../../../utilities/types' import { writeFile } from 'node:fs/promises' import path from 'path' import fs from 'fs/promises' -import prisma from '../../../utilities/prisma' +import prisma from '../../../../utilities/prisma' interface ITileData { [key: string]: Buffer diff --git a/src/events/gm/zone/create.ts b/src/events/gameMaster/zoneEditor/create.ts similarity index 91% rename from src/events/gm/zone/create.ts rename to src/events/gameMaster/zoneEditor/create.ts index a55b563..1420d6f 100644 --- a/src/events/gm/zone/create.ts +++ b/src/events/gameMaster/zoneEditor/create.ts @@ -11,7 +11,7 @@ type Payload = { } /** - * Handle game master zone create event + * Handle game master zoneEditor create event * @param socket * @param io */ @@ -36,10 +36,10 @@ export default function (socket: TSocket, io: Server) { zoneList = await ZoneRepository.getAll() callback(zoneList) - // send over zone and characters to socket + // send over zoneEditor and characters to socket } catch (e) { console.error(e) - socket.emit('notification', { message: 'Failed to create zone.' }) + socket.emit('notification', { message: 'Failed to create zoneEditor.' }) callback(zoneList) } }) diff --git a/src/events/gm/zone/delete.ts b/src/events/gameMaster/zoneEditor/delete.ts similarity index 95% rename from src/events/gm/zone/delete.ts rename to src/events/gameMaster/zoneEditor/delete.ts index 4e737f2..6655c29 100644 --- a/src/events/gm/zone/delete.ts +++ b/src/events/gameMaster/zoneEditor/delete.ts @@ -8,7 +8,7 @@ type Payload = { } /** - * Handle game master zone delete event + * Handle game master zoneEditor delete event * @param socket * @param io */ diff --git a/src/events/gm/zone/list.ts b/src/events/gameMaster/zoneEditor/list.ts similarity index 100% rename from src/events/gm/zone/list.ts rename to src/events/gameMaster/zoneEditor/list.ts diff --git a/src/events/gm/zone/request.ts b/src/events/gameMaster/zoneEditor/request.ts similarity index 95% rename from src/events/gm/zone/request.ts rename to src/events/gameMaster/zoneEditor/request.ts index a5d35e2..1deb30c 100644 --- a/src/events/gm/zone/request.ts +++ b/src/events/gameMaster/zoneEditor/request.ts @@ -8,7 +8,7 @@ interface IPayload { } /** - * Handle game master zone request event + * Handle game master zoneEditor request event * @param socket * @param io */ diff --git a/src/events/gm/zone/update.ts b/src/events/gameMaster/zoneEditor/update.ts similarity index 92% rename from src/events/gm/zone/update.ts rename to src/events/gameMaster/zoneEditor/update.ts index de4df14..69f0bfd 100644 --- a/src/events/gm/zone/update.ts +++ b/src/events/gameMaster/zoneEditor/update.ts @@ -26,7 +26,7 @@ interface IPayload { } /** - * Handle game master zone update event + * Handle game master zoneEditor update event * @param socket * @param io */ @@ -66,9 +66,9 @@ export default function (socket: TSocket, io: Server) { pvp: data.pvp, zoneEventTiles: { deleteMany: { - zoneId: data.zoneId // Ensure only event tiles related to the zone are deleted + zoneId: data.zoneId // Ensure only event tiles related to the zoneEditor are deleted }, - // Save new zone event tiles + // Save new zoneEditor event tiles create: data.zoneEventTiles.map((zoneEventTile) => ({ type: zoneEventTile.type, positionX: zoneEventTile.positionX, @@ -86,9 +86,9 @@ export default function (socket: TSocket, io: Server) { }, zoneObjects: { deleteMany: { - zoneId: data.zoneId // Ensure only objects related to the zone are deleted + zoneId: data.zoneId // Ensure only objects related to the zoneEditor are deleted }, - // Save new zone objects + // Save new zoneEditor objects create: data.zoneObjects.map((zoneObject) => ({ objectId: zoneObject.objectId, depth: zoneObject.depth, @@ -106,7 +106,7 @@ export default function (socket: TSocket, io: Server) { return } - // send over zone and characters to socket + // send over zoneEditor and characters to socket socket.emit('gm:zone_editor:zone:load', zone) zoneManager.unloadZone(data.zoneId) diff --git a/src/events/character/zoneRequest.ts b/src/events/zone/characterJoin.ts similarity index 81% rename from src/events/character/zoneRequest.ts rename to src/events/zone/characterJoin.ts index 06303e0..f934fa0 100644 --- a/src/events/character/zoneRequest.ts +++ b/src/events/zone/characterJoin.ts @@ -1,5 +1,5 @@ import { Server } from 'socket.io' -import { TSocket } from '../../utilities/types' +import { ExtendedCharacter, TSocket } from '../../utilities/types' import ZoneRepository from '../../repositories/zoneRepository' import ZoneManager from '../../managers/zoneManager' import { Character, Zone } from '@prisma/client' @@ -20,7 +20,7 @@ interface IResponse { * @param io */ export default function (socket: TSocket, io: Server) { - socket.on('character:zone:request', async (data: IPayload, callback: (response: IResponse) => void) => { + socket.on('zone:characterJoin', async (data: IPayload, callback: (response: IResponse) => void) => { try { console.log(`---User ${socket.character?.id} has requested zone.`) @@ -43,11 +43,10 @@ export default function (socket: TSocket, io: Server) { io.to(socket.character.zoneId.toString()).emit('zone:character:leave', socket.character) } - socket.character.zoneId = zone.id socket.join(zone.id.toString()) // let other clients know of new character - io.to(zone.id.toString()).emit('zone:character:join', socket.character) + io.to(zone.id.toString()).emit('zone:characterJoin', socket.character) // add character to zone manager ZoneManager.addCharacterToZone(zone.id, socket.character as Character) @@ -55,8 +54,8 @@ export default function (socket: TSocket, io: Server) { // send over zone and characters to socket callback({ zone, characters: ZoneManager.getCharactersInZone(zone.id) }) } catch (error: any) { - console.log(`Error requesting zone: ${error.message}`) logger.error(`Error requesting zone: ${error.message}`) + socket.disconnect(); } }) } diff --git a/src/events/character/zoneLeave.ts b/src/events/zone/characterLeave.ts similarity index 96% rename from src/events/character/zoneLeave.ts rename to src/events/zone/characterLeave.ts index adb5308..4881720 100644 --- a/src/events/character/zoneLeave.ts +++ b/src/events/zone/characterLeave.ts @@ -10,7 +10,7 @@ import { Character, Zone } from '@prisma/client' * @param io */ export default function (socket: TSocket, io: Server) { - socket.on('character:zone:leave', async () => { + socket.on('zone:characterLeave', async () => { console.log(`---Socket ${socket.character?.id} has leaved zone.`) if (!socket.character) { diff --git a/src/events/character/move.ts b/src/events/zone/characterMove.ts similarity index 100% rename from src/events/character/move.ts rename to src/events/zone/characterMove.ts diff --git a/src/managers/zoneManager.ts b/src/managers/zoneManager.ts index 216d9b2..dd68d44 100644 --- a/src/managers/zoneManager.ts +++ b/src/managers/zoneManager.ts @@ -13,7 +13,7 @@ type TLoadedZone = { class ZoneManager { private loadedZones: TLoadedZone[] = [] - // Method to initialize zone manager + // Method to initialize zoneEditor manager public async boot() { if (!(await ZoneRepository.getById(1))) { const zoneService = new ZoneService() @@ -29,9 +29,9 @@ class ZoneManager { logger.info('Zone manager loaded') } - // Method to handle individual zone loading + // Method to handle individual zoneEditor loading public async loadZone(zone: Zone) { - const grid = await this.getGrid(zone.id) // Create the grid for the zone + const grid = await this.getGrid(zone.id) // Create the grid for the zoneEditor this.loadedZones.push({ zone, characters: [], @@ -40,7 +40,7 @@ class ZoneManager { logger.info(`Zone ID ${zone.id} loaded`) } - // Method to handle individual zone unloading + // Method to handle individual zoneEditor unloading public unloadZone(zoneId: number) { this.loadedZones = this.loadedZones.filter((loadedZone) => { return loadedZone.zone.id !== zoneId @@ -56,15 +56,43 @@ class ZoneManager { // Check if position is walkable private isPositionWalkable(zoneId: number, x: number, y: number): boolean { const loadedZone = this.loadedZones.find((lz) => lz.zone.id === zoneId) - return loadedZone ? loadedZone.grid[y][x] === 0 : false + if (!loadedZone) { + console.log(`Zone ${zoneId} not found in loadedZones`); + return false; + } + if (!loadedZone.grid) { + console.log(`Grid for zone ${zoneId} is undefined`); + return false; + } + if (!loadedZone.grid[y]) { + console.log(`Row ${y} in grid for zone ${zoneId} is undefined`); + return false; + } + return loadedZone.grid[y][x] === 0; } public addCharacterToZone(zoneId: number, character: Character) { + console.log(`Adding character ${character.id} to zone ${zoneId}`); + console.log(`Character position: x=${character.positionX}, y=${character.positionY}`); + const loadedZone = this.loadedZones.find((loadedZone) => { return loadedZone.zone.id === zoneId }) - if (loadedZone && this.isPositionWalkable(zoneId, character.positionX, character.positionY)) { + + if (!loadedZone) { + console.log(`Zone ${zoneId} not found in loadedZones`); + return; + } + + if (this.isPositionWalkable(zoneId, character.positionX, character.positionY)) { loadedZone.characters.push(character) + console.log(`Character ${character.id} added to zone ${zoneId}`); + } else { + // set position to 0,0 if not walkable + console.log(`Position (${character.positionX}, ${character.positionY}) is not walkable in zone ${zoneId}`); + character.positionX = 0; + character.positionY = 0; + loadedZone.characters.push(character); } } diff --git a/src/middleware/authentication.ts b/src/middleware/authentication.ts index 5109e09..e3df21c 100644 --- a/src/middleware/authentication.ts +++ b/src/middleware/authentication.ts @@ -1,16 +1,23 @@ -// socket io jwt auth middleware import { verify } from 'jsonwebtoken' import { TSocket } from '../utilities/types' import config from '../utilities/config' import UserRepository from '../repositories/userRepository' import { User } from '@prisma/client' +/** + * Socket io jwt auth middleware + * @param socket + * @param next + */ export async function Authentication(socket: TSocket, next: any) { if (!socket.request.headers.cookie) { console.log('No cookie provided') return next(new Error('Authentication error')) } + /** + * Parse cookies + */ const cookies = socket.request.headers.cookie.split('; ').reduce((prev: any, current: any) => { const [name, value] = current.split('=') prev[name] = value @@ -19,6 +26,9 @@ export async function Authentication(socket: TSocket, next: any) { const token = cookies['token'] + /** + * Verify token, if valid, set user on socket and continue + */ if (token) { verify(token, config.JWT_SECRET, async (err: any, decoded: any) => { if (err) { diff --git a/src/repositories/userRepository.ts b/src/repositories/userRepository.ts index 36dc280..37dbf69 100644 --- a/src/repositories/userRepository.ts +++ b/src/repositories/userRepository.ts @@ -14,6 +14,7 @@ class UserRepository { throw new Error(`Failed to get user by ID: ${error.message}`) } } + async getByUsername(username: string): Promise { try { return await prisma.user.findUnique({ diff --git a/src/repositories/zoneRepository.ts b/src/repositories/zoneRepository.ts index 695d75b..57fdd0d 100644 --- a/src/repositories/zoneRepository.ts +++ b/src/repositories/zoneRepository.ts @@ -1,13 +1,14 @@ -import { Zone } from '@prisma/client' -import prisma from '../utilities/prisma' // Import the global Prisma instance +import { Zone, ZoneEventTile, ZoneObject } from '@prisma/client' +import prisma from '../utilities/prisma' +import logger from '../utilities/logger' class ZoneRepository { async getFirst(): Promise { try { return await prisma.zone.findFirst() } catch (error: any) { - // Handle error - throw new Error(`Failed to get first zone: ${error.message}`) + logger.error(`Failed to get first zone: ${error.message}`) + return null } } @@ -15,12 +16,12 @@ class ZoneRepository { try { return await prisma.zone.findMany() } catch (error: any) { - // Handle error - throw new Error(`Failed to get all zone: ${error.message}`) + logger.error(`Failed to get all zone: ${error.message}`) + return [] } } - async getById(id: number) { + async getById(id: number): Promise { try { return await prisma.zone.findUnique({ where: { @@ -41,12 +42,12 @@ class ZoneRepository { } }) } catch (error: any) { - // Handle error - throw new Error(`Failed to get zone by id: ${error.message}`) + logger.error(`Failed to get zone by id: ${error.message}`) + return null } } - async getEventTiles(id: number) { + async getEventTiles(id: number): Promise { try { return await prisma.zoneEventTile.findMany({ where: { @@ -54,12 +55,12 @@ class ZoneRepository { } }) } catch (error: any) { - // Handle error - throw new Error(`Failed to get zone event tiles: ${error.message}`) + logger.error(`Failed to get zone event tiles: ${error.message}`) + return [] } } - async getObjects(id: number) { + async getObjects(id: number): Promise { try { return await prisma.zoneObject.findMany({ where: { @@ -67,8 +68,8 @@ class ZoneRepository { } }) } catch (error: any) { - // Handle error - throw new Error(`Failed to get zone objects: ${error.message}`) + logger.error(`Failed to get zone objects: ${error.message}`) + return [] } } } diff --git a/src/server.ts b/src/server.ts index 89760e1..162d254 100644 --- a/src/server.ts +++ b/src/server.ts @@ -59,7 +59,7 @@ export class Server { // Load user manager await UserManager.boot() - // Load zone manager + // Load zoneEditor manager await ZoneManager.boot() // Load command manager - Disabled for now diff --git a/src/services/userService.ts b/src/services/userService.ts index 4215076..576fe05 100644 --- a/src/services/userService.ts +++ b/src/services/userService.ts @@ -3,7 +3,17 @@ import UserRepository from '../repositories/userRepository' import prisma from '../utilities/prisma' import { User } from '@prisma/client' +/** + * User service + * Handles user login and registration + * @class UserService + */ class UserService { + /** + * Login user + * @param username + * @param password + */ async login(username: string, password: string): Promise { const user = await UserRepository.getByUsername(username) if (!user) { @@ -18,6 +28,11 @@ class UserService { return user } + /** + * Register user + * @param username + * @param password + */ async register(username: string, password: string): Promise { const user = await UserRepository.getByUsername(username) if (user) { diff --git a/src/services/zoneService.ts b/src/services/zoneService.ts index 4a5d601..440b8e9 100644 --- a/src/services/zoneService.ts +++ b/src/services/zoneService.ts @@ -24,7 +24,7 @@ class ZoneService { } }) - console.log('Demo zone created.') + console.log('Demo zoneEditor created.') return true } }