From f4746722af300d285a212ad47870c31afa0473ad Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Wed, 25 Dec 2024 16:50:01 +0100 Subject: [PATCH] Renamed folder utilities > application, added baseEntity class, updated baseRepo class, removed prisma helper --- .env.example | 2 +- mikro-orm.config.ts | 2 +- src/application/bases/baseEntity.ts | 67 +++++++++++++++ .../bases}/baseRepository.ts | 4 +- .../character/aStar.ts | 0 .../character/rotation.ts | 0 src/{utilities => application}/chat.ts | 0 src/{utilities => application}/config.ts | 0 src/application/database.ts | 27 ++++++ src/{utilities => application}/enums.ts | 0 src/{utilities => application}/logger.ts | 0 src/{utilities => application}/storage.ts | 0 src/{utilities => application}/types.ts | 0 src/{utilities => application}/utilities.ts | 0 src/{utilities => application}/zodTypes.ts | 0 src/{utilities => application}/zone.ts | 0 src/commands/init.ts | 4 +- src/commands/tiles.ts | 4 +- src/entities/character.ts | 3 +- src/entities/characterEquipment.ts | 5 +- src/entities/characterHair.ts | 5 +- src/entities/characterItem.ts | 3 +- src/entities/characterType.ts | 5 +- src/entities/chat.ts | 3 +- src/entities/item.ts | 5 +- src/entities/mapObject.ts | 3 +- src/entities/passwordResetToken.ts | 3 +- src/entities/sprite.ts | 3 +- src/entities/spriteAction.ts | 3 +- src/entities/tile.ts | 3 +- src/entities/user.ts | 3 +- src/entities/world.ts | 3 +- src/entities/zone.ts | 3 +- src/entities/zoneEffect.ts | 3 +- src/entities/zoneEventTile.ts | 5 +- src/entities/zoneEventTileTeleport.ts | 5 +- src/entities/zoneObject.ts | 3 +- src/http/assets.ts | 6 +- src/http/auth.ts | 4 +- src/http/avatar.ts | 2 +- src/http/index.ts | 4 +- src/jobs/SomeJob.ts | 2 +- src/managers/commandManager.ts | 4 +- src/managers/dateManager.ts | 5 +- src/managers/queueManager.ts | 8 +- src/managers/userManager.ts | 2 +- src/managers/weatherManager.ts | 8 +- src/managers/zoneManager.ts | 2 +- src/middleware/authentication.ts | 6 +- src/repositories/characterHairRepository.ts | 4 +- src/repositories/characterRepository.ts | 4 +- src/repositories/characterTypeRepository.ts | 4 +- src/repositories/chatRepository.ts | 4 +- src/repositories/itemRepository.ts | 4 +- src/repositories/objectRepository.ts | 2 +- .../passwordResetTokenRepository.ts | 4 +- src/repositories/spriteRepository.ts | 2 +- src/repositories/tileRepository.ts | 6 +- src/repositories/userRepository.ts | 4 +- src/repositories/worldRepository.ts | 8 +- src/repositories/zoneEventTileRepository.ts | 4 +- src/repositories/zoneRepository.ts | 4 +- src/server.ts | 23 ++--- src/services/characterService.ts | 85 +++++++++++-------- src/services/chatService.ts | 6 +- src/services/passwordResetTokenService.ts | 4 +- src/services/userService.ts | 6 +- src/services/worldService.ts | 45 +++++----- src/services/zoneEventTileService.ts | 6 +- src/services/zoneService.ts | 4 +- .../charactersScreen/character_hair_list.ts | 6 +- src/socketEvents/character/connect.ts | 4 +- src/socketEvents/character/create.ts | 8 +- src/socketEvents/character/delete.ts | 5 +- src/socketEvents/character/list.ts | 6 +- .../chat/gameMaster/alertCommand.ts | 6 +- .../chat/gameMaster/setTimeCommand.ts | 6 +- .../chat/gameMaster/teleportCommand.ts | 6 +- .../chat/gameMaster/toggleFogCommand.ts | 6 +- .../chat/gameMaster/toggleRainCommand.ts | 6 +- src/socketEvents/chat/message.ts | 6 +- src/socketEvents/disconnect.ts | 4 +- .../assetManager/characterHair/create.ts | 4 +- .../assetManager/characterHair/delete.ts | 6 +- .../assetManager/characterHair/list.ts | 4 +- .../assetManager/characterHair/update.ts | 6 +- .../assetManager/characterType/create.ts | 4 +- .../assetManager/characterType/delete.ts | 6 +- .../assetManager/characterType/list.ts | 4 +- .../assetManager/characterType/update.ts | 4 +- .../gameMaster/assetManager/item/create.ts | 4 +- .../gameMaster/assetManager/item/delete.ts | 6 +- .../gameMaster/assetManager/item/list.ts | 4 +- .../gameMaster/assetManager/item/update.ts | 6 +- .../gameMaster/assetManager/object/list.ts | 2 +- .../gameMaster/assetManager/object/remove.ts | 8 +- .../gameMaster/assetManager/object/update.ts | 4 +- .../gameMaster/assetManager/object/upload.ts | 8 +- .../gameMaster/assetManager/sprite/copy.ts | 6 +- .../gameMaster/assetManager/sprite/create.ts | 6 +- .../gameMaster/assetManager/sprite/delete.ts | 8 +- .../gameMaster/assetManager/sprite/list.ts | 2 +- .../gameMaster/assetManager/sprite/update.ts | 8 +- .../gameMaster/assetManager/tile/delete.ts | 8 +- .../gameMaster/assetManager/tile/list.ts | 2 +- .../gameMaster/assetManager/tile/update.ts | 4 +- .../gameMaster/assetManager/tile/upload.ts | 8 +- .../gameMaster/zoneEditor/create.ts | 6 +- .../gameMaster/zoneEditor/delete.ts | 6 +- .../gameMaster/zoneEditor/list.ts | 4 +- .../gameMaster/zoneEditor/request.ts | 4 +- .../gameMaster/zoneEditor/update.ts | 6 +- src/socketEvents/login.ts | 4 +- src/socketEvents/zone/characterJoin.ts | 4 +- src/socketEvents/zone/characterLeave.ts | 4 +- src/socketEvents/zone/characterMove.ts | 6 +- src/socketEvents/zone/weather.ts | 4 +- src/utilities/database.ts | 78 ----------------- src/utilities/prisma.ts | 5 -- tsconfig.json | 4 +- 120 files changed, 423 insertions(+), 378 deletions(-) create mode 100644 src/application/bases/baseEntity.ts rename src/{repositories => application/bases}/baseRepository.ts (87%) rename src/{utilities => application}/character/aStar.ts (100%) rename src/{utilities => application}/character/rotation.ts (100%) rename src/{utilities => application}/chat.ts (100%) rename src/{utilities => application}/config.ts (100%) create mode 100644 src/application/database.ts rename src/{utilities => application}/enums.ts (100%) rename src/{utilities => application}/logger.ts (100%) rename src/{utilities => application}/storage.ts (100%) rename src/{utilities => application}/types.ts (100%) rename src/{utilities => application}/utilities.ts (100%) rename src/{utilities => application}/zodTypes.ts (100%) rename src/{utilities => application}/zone.ts (100%) delete mode 100644 src/utilities/database.ts delete mode 100644 src/utilities/prisma.ts diff --git a/.env.example b/.env.example index 9b5e174..4e2d5ac 100644 --- a/.env.example +++ b/.env.example @@ -3,7 +3,7 @@ ENV=development HOST="0.0.0.0" PORT=4000 JWT_SECRET="secret" -CLIENT_URL="http://192.168.3.4:5173" +CLIENT_URL="http://192.168.2.34:5173" # Database configuration REDIS_URL="redis://@127.0.0.1:6379/4" diff --git a/mikro-orm.config.ts b/mikro-orm.config.ts index ecf8c5f..bd14c16 100644 --- a/mikro-orm.config.ts +++ b/mikro-orm.config.ts @@ -2,7 +2,7 @@ import { defineConfig, MySqlDriver } from '@mikro-orm/mysql' import { Migrator } from '@mikro-orm/migrations' import { TsMorphMetadataProvider } from '@mikro-orm/reflection' -import serverConfig from './src/utilities/config' +import serverConfig from './src/application/config' export default defineConfig({ extensions: [Migrator], diff --git a/src/application/bases/baseEntity.ts b/src/application/bases/baseEntity.ts new file mode 100644 index 0000000..0befbd2 --- /dev/null +++ b/src/application/bases/baseEntity.ts @@ -0,0 +1,67 @@ +import { Database } from '#application/database' +import { appLogger } from '#application/logger' + +export abstract class BaseEntity { + async save(): Promise { + try { + const orm = await Database.getInstance() + const em = orm.em.fork() + + await em.begin() + try { + em.persist(this) + await em.flush() + await em.commit() + return this + } catch (error) { + await em.rollback() + throw error + } + } catch (error) { + appLogger.error(`Failed to save entity: ${error instanceof Error ? error.message : String(error)}`) + throw error + } + } + + async update(): Promise { + try { + const orm = await Database.getInstance() + const em = orm.em.fork() + + await em.begin() + try { + em.merge(this) + await em.flush() + await em.commit() + return this + } catch (error) { + await em.rollback() + throw error + } + } catch (error) { + appLogger.error(`Failed to update entity: ${error instanceof Error ? error.message : String(error)}`) + throw error + } + } + + async delete(): Promise { + try { + const orm = await Database.getInstance() + const em = orm.em.fork() + + await em.begin() + try { + em.remove(this) + await em.flush() + await em.commit() + return this + } catch (error) { + await em.rollback() + throw error + } + } catch (error) { + appLogger.error(`Failed to remove entity: ${error instanceof Error ? error.message : String(error)}`) + throw error + } + } +} \ No newline at end of file diff --git a/src/repositories/baseRepository.ts b/src/application/bases/baseRepository.ts similarity index 87% rename from src/repositories/baseRepository.ts rename to src/application/bases/baseRepository.ts index e50ae0f..ff487a3 100644 --- a/src/repositories/baseRepository.ts +++ b/src/application/bases/baseRepository.ts @@ -1,5 +1,5 @@ -import { appLogger } from '#utilities/logger' -import { Database } from '#utilities/database' +import { appLogger } from '../logger' +import { Database } from '../database' import { EntityManager, MikroORM } from '@mikro-orm/core' export abstract class BaseRepository { diff --git a/src/utilities/character/aStar.ts b/src/application/character/aStar.ts similarity index 100% rename from src/utilities/character/aStar.ts rename to src/application/character/aStar.ts diff --git a/src/utilities/character/rotation.ts b/src/application/character/rotation.ts similarity index 100% rename from src/utilities/character/rotation.ts rename to src/application/character/rotation.ts diff --git a/src/utilities/chat.ts b/src/application/chat.ts similarity index 100% rename from src/utilities/chat.ts rename to src/application/chat.ts diff --git a/src/utilities/config.ts b/src/application/config.ts similarity index 100% rename from src/utilities/config.ts rename to src/application/config.ts diff --git a/src/application/database.ts b/src/application/database.ts new file mode 100644 index 0000000..0208203 --- /dev/null +++ b/src/application/database.ts @@ -0,0 +1,27 @@ +import config from '../../mikro-orm.config' +// import { MikroORM } from '@mikro-orm/mariadb' +import { MikroORM } from '@mikro-orm/mysql' +import { appLogger } from './logger' + +/** + * Singleton class for initializing and managing the database connection + */ +export class Database { + private static instance: MikroORM | undefined + + private static async init(): Promise { + try { + return await MikroORM.init(config) + } catch (error) { + appLogger.error(`MikroORM connection failed: ${error}`) + throw error + } + } + + public static async getInstance(): Promise { + if (!Database.instance) { + Database.instance = await Database.init() + } + return Database.instance + } +} diff --git a/src/utilities/enums.ts b/src/application/enums.ts similarity index 100% rename from src/utilities/enums.ts rename to src/application/enums.ts diff --git a/src/utilities/logger.ts b/src/application/logger.ts similarity index 100% rename from src/utilities/logger.ts rename to src/application/logger.ts diff --git a/src/utilities/storage.ts b/src/application/storage.ts similarity index 100% rename from src/utilities/storage.ts rename to src/application/storage.ts diff --git a/src/utilities/types.ts b/src/application/types.ts similarity index 100% rename from src/utilities/types.ts rename to src/application/types.ts diff --git a/src/utilities/utilities.ts b/src/application/utilities.ts similarity index 100% rename from src/utilities/utilities.ts rename to src/application/utilities.ts diff --git a/src/utilities/zodTypes.ts b/src/application/zodTypes.ts similarity index 100% rename from src/utilities/zodTypes.ts rename to src/application/zodTypes.ts diff --git a/src/utilities/zone.ts b/src/application/zone.ts similarity index 100% rename from src/utilities/zone.ts rename to src/application/zone.ts diff --git a/src/commands/init.ts b/src/commands/init.ts index ea77318..85b0e20 100644 --- a/src/commands/init.ts +++ b/src/commands/init.ts @@ -1,7 +1,7 @@ import { Server } from 'socket.io' -import prisma from '#utilities/prisma' +import prisma from '#application/prisma' import fs from 'fs' -import { getPublicPath, getRootPath } from '#utilities/storage' +import { getPublicPath, getRootPath } from '#application/storage' import sharp from 'sharp' import { CharacterEquipmentSlotType, CharacterGender, CharacterRace } from '@prisma/client' import bcrypt from 'bcryptjs' diff --git a/src/commands/tiles.ts b/src/commands/tiles.ts index 771ef08..5d4834f 100644 --- a/src/commands/tiles.ts +++ b/src/commands/tiles.ts @@ -1,8 +1,8 @@ import fs from 'fs' import sharp from 'sharp' -import { commandLogger } from '#utilities/logger' +import { commandLogger } from '#application/logger' import { Server } from 'socket.io' -import { getPublicPath } from '#utilities/storage' +import { getPublicPath } from '#application/storage' import path from 'path' export default class TilesCommand { diff --git a/src/entities/character.ts b/src/entities/character.ts index f81fdab..af4e67e 100644 --- a/src/entities/character.ts +++ b/src/entities/character.ts @@ -1,4 +1,5 @@ import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' import { User } from './user' import { Zone } from './zone' import { CharacterType } from './characterType' @@ -8,7 +9,7 @@ import { CharacterEquipment } from './characterEquipment' import { Chat } from './chat' @Entity() -export class Character { +export class Character extends BaseEntity { @PrimaryKey() id!: number diff --git a/src/entities/characterEquipment.ts b/src/entities/characterEquipment.ts index f887ae1..a82ef7a 100644 --- a/src/entities/characterEquipment.ts +++ b/src/entities/characterEquipment.ts @@ -1,10 +1,11 @@ import { Entity, Enum, ManyToOne, PrimaryKey } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' import { Character } from './character' import { CharacterItem } from './characterItem' -import { CharacterEquipmentSlotType } from '#utilities/enums' +import { CharacterEquipmentSlotType } from '#application/enums' @Entity() -export class CharacterEquipment { +export class CharacterEquipment extends BaseEntity { @PrimaryKey() id!: number diff --git a/src/entities/characterHair.ts b/src/entities/characterHair.ts index ff5e0be..a5e66c3 100644 --- a/src/entities/characterHair.ts +++ b/src/entities/characterHair.ts @@ -1,10 +1,11 @@ import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' import { Character } from './character' import { Sprite } from './sprite' -import { CharacterGender } from '#utilities/enums' +import { CharacterGender } from '#application/enums' @Entity() -export class CharacterHair { +export class CharacterHair extends BaseEntity { @PrimaryKey() id!: number diff --git a/src/entities/characterItem.ts b/src/entities/characterItem.ts index 9efa23c..e008029 100644 --- a/src/entities/characterItem.ts +++ b/src/entities/characterItem.ts @@ -1,10 +1,11 @@ import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' import { Character } from './character' import { Item } from './item' import { CharacterEquipment } from './characterEquipment' @Entity() -export class CharacterItem { +export class CharacterItem extends BaseEntity { @PrimaryKey() id!: number diff --git a/src/entities/characterType.ts b/src/entities/characterType.ts index 823ea8d..8fd907a 100644 --- a/src/entities/characterType.ts +++ b/src/entities/characterType.ts @@ -1,10 +1,11 @@ import { Collection, Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' import { Character } from './character' import { Sprite } from './sprite' -import { CharacterGender, CharacterRace } from '#utilities/enums' +import { CharacterGender, CharacterRace } from '#application/enums' @Entity() -export class CharacterType { +export class CharacterType extends BaseEntity { @PrimaryKey() id!: number diff --git a/src/entities/chat.ts b/src/entities/chat.ts index bc601f5..8182425 100644 --- a/src/entities/chat.ts +++ b/src/entities/chat.ts @@ -1,9 +1,10 @@ import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' import { Character } from './character' import { Zone } from './zone' @Entity() -export class Chat { +export class Chat extends BaseEntity { @PrimaryKey() id!: number diff --git a/src/entities/item.ts b/src/entities/item.ts index 6340332..9cc08e0 100644 --- a/src/entities/item.ts +++ b/src/entities/item.ts @@ -1,10 +1,11 @@ import { Collection, Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' import { Sprite } from './sprite' import { CharacterItem } from './characterItem' -import { ItemType, ItemRarity } from '#utilities/enums' +import { ItemType, ItemRarity } from '#application/enums' @Entity() -export class Item { +export class Item extends BaseEntity { @PrimaryKey() id!: string diff --git a/src/entities/mapObject.ts b/src/entities/mapObject.ts index e00fe6a..e1edd77 100644 --- a/src/entities/mapObject.ts +++ b/src/entities/mapObject.ts @@ -1,9 +1,10 @@ import { randomUUID } from 'node:crypto' import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' import { ZoneObject } from './zoneObject' @Entity() -export class MapObject { +export class MapObject extends BaseEntity { @PrimaryKey() id = randomUUID() diff --git a/src/entities/passwordResetToken.ts b/src/entities/passwordResetToken.ts index 46e190d..96d215b 100644 --- a/src/entities/passwordResetToken.ts +++ b/src/entities/passwordResetToken.ts @@ -1,8 +1,9 @@ import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' import { User } from './user' @Entity() -export class PasswordResetToken { +export class PasswordResetToken extends BaseEntity { @PrimaryKey() id!: number diff --git a/src/entities/sprite.ts b/src/entities/sprite.ts index 80557c9..91fda82 100644 --- a/src/entities/sprite.ts +++ b/src/entities/sprite.ts @@ -1,12 +1,13 @@ import { randomUUID } from 'node:crypto' import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' import { SpriteAction } from './spriteAction' import { CharacterType } from './characterType' import { CharacterHair } from './characterHair' import { Item } from './item' @Entity() -export class Sprite { +export class Sprite extends BaseEntity { @PrimaryKey() id = randomUUID() diff --git a/src/entities/spriteAction.ts b/src/entities/spriteAction.ts index f63e8d9..4ecb019 100644 --- a/src/entities/spriteAction.ts +++ b/src/entities/spriteAction.ts @@ -1,9 +1,10 @@ import { randomUUID } from 'node:crypto' import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' import { Sprite } from './sprite' @Entity() -export class SpriteAction { +export class SpriteAction extends BaseEntity { @PrimaryKey() id = randomUUID() diff --git a/src/entities/tile.ts b/src/entities/tile.ts index a04bff7..a2a9b45 100644 --- a/src/entities/tile.ts +++ b/src/entities/tile.ts @@ -1,8 +1,9 @@ import { randomUUID } from 'node:crypto' import { Entity, PrimaryKey, Property } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' @Entity() -export class Tile { +export class Tile extends BaseEntity { @PrimaryKey() id = randomUUID() diff --git a/src/entities/user.ts b/src/entities/user.ts index af09636..446c13a 100644 --- a/src/entities/user.ts +++ b/src/entities/user.ts @@ -1,9 +1,10 @@ import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' import { Character } from './character' import { PasswordResetToken } from './passwordResetToken' @Entity() -export class User { +export class User extends BaseEntity { @PrimaryKey() id!: number diff --git a/src/entities/world.ts b/src/entities/world.ts index 68fc1a9..28dab9a 100644 --- a/src/entities/world.ts +++ b/src/entities/world.ts @@ -1,7 +1,8 @@ import { Entity, PrimaryKey, Property } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' @Entity() -export class World { +export class World extends BaseEntity { @PrimaryKey() date = new Date() diff --git a/src/entities/zone.ts b/src/entities/zone.ts index 5c06e3a..494f0a6 100644 --- a/src/entities/zone.ts +++ b/src/entities/zone.ts @@ -1,4 +1,5 @@ import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' import { ZoneEffect } from './zoneEffect' import { ZoneEventTile } from './zoneEventTile' import { ZoneEventTileTeleport } from './zoneEventTileTeleport' @@ -7,7 +8,7 @@ import { Character } from './character' import { Chat } from './chat' @Entity() -export class Zone { +export class Zone extends BaseEntity { @PrimaryKey() id!: number diff --git a/src/entities/zoneEffect.ts b/src/entities/zoneEffect.ts index f42ba0a..b9e4f27 100644 --- a/src/entities/zoneEffect.ts +++ b/src/entities/zoneEffect.ts @@ -1,8 +1,9 @@ import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' import { Zone } from './zone' @Entity() -export class ZoneEffect { +export class ZoneEffect extends BaseEntity { @PrimaryKey() id!: string diff --git a/src/entities/zoneEventTile.ts b/src/entities/zoneEventTile.ts index a1e7ee4..0387e4f 100644 --- a/src/entities/zoneEventTile.ts +++ b/src/entities/zoneEventTile.ts @@ -1,10 +1,11 @@ import { Entity, Enum, ManyToOne, OneToOne, PrimaryKey, Property } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' import { Zone } from './zone' -import { ZoneEventTileType } from '#utilities/enums' +import { ZoneEventTileType } from '#application/enums' import { ZoneEventTileTeleport } from './zoneEventTileTeleport' @Entity() -export class ZoneEventTile { +export class ZoneEventTile extends BaseEntity { @PrimaryKey() id!: string diff --git a/src/entities/zoneEventTileTeleport.ts b/src/entities/zoneEventTileTeleport.ts index a119ae0..3c84c29 100644 --- a/src/entities/zoneEventTileTeleport.ts +++ b/src/entities/zoneEventTileTeleport.ts @@ -1,10 +1,11 @@ import { randomUUID } from 'node:crypto' import { Entity, ManyToOne, OneToOne, PrimaryKey, Property } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' import { Zone } from './zone' -import { ZoneEventTile } from './ZoneEventTile' +import { ZoneEventTile } from './zoneEventTile' @Entity() -export class ZoneEventTileTeleport { +export class ZoneEventTileTeleport extends BaseEntity { @PrimaryKey() id = randomUUID() diff --git a/src/entities/zoneObject.ts b/src/entities/zoneObject.ts index 0d04cf9..98f5f06 100644 --- a/src/entities/zoneObject.ts +++ b/src/entities/zoneObject.ts @@ -1,10 +1,11 @@ import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' +import { BaseEntity } from '#application/bases/baseEntity' import { Zone } from './zone' import { MapObject } from '#entities/mapObject' //@TODO : Rename mapObject @Entity() -export class ZoneObject { +export class ZoneObject extends BaseEntity { @PrimaryKey() id!: string diff --git a/src/http/assets.ts b/src/http/assets.ts index 38f2fb0..4f3c3ae 100644 --- a/src/http/assets.ts +++ b/src/http/assets.ts @@ -1,11 +1,11 @@ import { Router, Request, Response } from 'express' import fs from 'fs' -import { httpLogger } from '#utilities/logger' -import { getPublicPath } from '#utilities/storage' +import { httpLogger } from '#application/logger' +import { getPublicPath } from '#application/storage' import TileRepository from '#repositories/tileRepository' import ZoneRepository from '#repositories/zoneRepository' import SpriteRepository from '#repositories/spriteRepository' -import { AssetData } from '#utilities/types' +import { AssetData } from '#application/types' import { FilterValue } from '@mikro-orm/core' const router = Router() diff --git a/src/http/auth.ts b/src/http/auth.ts index a901a6e..2b120fb 100644 --- a/src/http/auth.ts +++ b/src/http/auth.ts @@ -1,8 +1,8 @@ import { Router, Request, Response } from 'express' import UserService from '#services/userService' import jwt from 'jsonwebtoken' -import config from '#utilities/config' -import { loginAccountSchema, registerAccountSchema, resetPasswordSchema, newPasswordSchema } from '#utilities/zodTypes' +import config from '#application/config' +import { loginAccountSchema, registerAccountSchema, resetPasswordSchema, newPasswordSchema } from '#application/zodTypes' const router = Router() diff --git a/src/http/avatar.ts b/src/http/avatar.ts index 41128ed..7bb40b4 100644 --- a/src/http/avatar.ts +++ b/src/http/avatar.ts @@ -7,7 +7,7 @@ import fs from 'fs' import CharacterRepository from '#repositories/characterRepository' import CharacterHairRepository from '#repositories/characterHairRepository' import CharacterTypeRepository from '#repositories/characterTypeRepository' -import { getPublicPath } from '#utilities/storage' +import { getPublicPath } from '#application/storage' const router = Router() diff --git a/src/http/index.ts b/src/http/index.ts index 7abfe37..0bd8724 100644 --- a/src/http/index.ts +++ b/src/http/index.ts @@ -1,8 +1,8 @@ import { Application } from 'express' -import { httpLogger } from '#utilities/logger' +import { httpLogger } from '#application/logger' import fs from 'fs' import path from 'path' -import { getAppPath } from '#utilities/storage' +import { getAppPath } from '#application/storage' async function addHttpRoutes(app: Application) { const routeFiles = fs.readdirSync(__dirname).filter((file) => { diff --git a/src/jobs/SomeJob.ts b/src/jobs/SomeJob.ts index abdc9b5..359f4a3 100644 --- a/src/jobs/SomeJob.ts +++ b/src/jobs/SomeJob.ts @@ -1,4 +1,4 @@ -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import { Server as SocketServer } from 'socket.io' export default class SomeJob { diff --git a/src/managers/commandManager.ts b/src/managers/commandManager.ts index c4b92ad..7917660 100644 --- a/src/managers/commandManager.ts +++ b/src/managers/commandManager.ts @@ -2,8 +2,8 @@ import * as readline from 'readline' import * as fs from 'fs' import * as path from 'path' import { Server } from 'socket.io' -import { commandLogger } from '#utilities/logger' -import { getAppPath } from '#utilities/storage' +import { commandLogger } from '#application/logger' +import { getAppPath } from '#application/storage' class CommandManager { private commands: Map = new Map() diff --git a/src/managers/dateManager.ts b/src/managers/dateManager.ts index 339485d..2e15650 100644 --- a/src/managers/dateManager.ts +++ b/src/managers/dateManager.ts @@ -1,5 +1,5 @@ import { Server } from 'socket.io' -import { appLogger } from '#utilities/logger' +import { appLogger } from '#application/logger' import worldService from '#services/worldService' import worldRepository from '#repositories/worldRepository' @@ -64,6 +64,9 @@ class DateManager { } private advanceGameTime(): void { + if (!this.currentDate) { + this.currentDate = new Date() + } const advanceMilliseconds = DateManager.GAME_SPEED * DateManager.UPDATE_INTERVAL this.currentDate = new Date(this.currentDate.getTime() + advanceMilliseconds) } diff --git a/src/managers/queueManager.ts b/src/managers/queueManager.ts index f679174..73ca4cb 100644 --- a/src/managers/queueManager.ts +++ b/src/managers/queueManager.ts @@ -1,11 +1,11 @@ import IORedis from 'ioredis' import { Job, Queue, Worker } from 'bullmq' -import config from '#utilities/config' +import config from '#application/config' import { Server as SocketServer } from 'socket.io' -import { TSocket } from '#utilities/types' -import { queueLogger } from '#utilities/logger' +import { TSocket } from '#application/types' +import { queueLogger } from '#application/logger' import fs from 'fs' -import { getAppPath } from '#utilities/storage' +import { getAppPath } from '#application/storage' class QueueManager { private connection!: IORedis diff --git a/src/managers/userManager.ts b/src/managers/userManager.ts index 20b235e..ec8a5ad 100644 --- a/src/managers/userManager.ts +++ b/src/managers/userManager.ts @@ -1,5 +1,5 @@ import { User } from '@prisma/client' -import { appLogger } from '#utilities/logger' +import { appLogger } from '#application/logger' type TLoggedInUsers = { users: User[] diff --git a/src/managers/weatherManager.ts b/src/managers/weatherManager.ts index d722536..195bca4 100644 --- a/src/managers/weatherManager.ts +++ b/src/managers/weatherManager.ts @@ -1,5 +1,5 @@ import { Server } from 'socket.io' -import { appLogger } from '#utilities/logger' +import { appLogger } from '#application/logger' import worldService from '#services/worldService' import worldRepository from '#repositories/worldRepository' @@ -25,9 +25,9 @@ class WeatherManager { } public async boot(io: Server): Promise { - this.io = io - await this.loadWeather() - this.startWeatherLoop() + // this.io = io + // await this.loadWeather() + // this.startWeatherLoop() appLogger.info('Weather manager loaded') } diff --git a/src/managers/zoneManager.ts b/src/managers/zoneManager.ts index 486ac3d..8dd7dce 100644 --- a/src/managers/zoneManager.ts +++ b/src/managers/zoneManager.ts @@ -2,7 +2,7 @@ import { Zone } from '@prisma/client' import ZoneRepository from '#repositories/zoneRepository' import ZoneService from '#services/zoneService' import LoadedZone from '#models/loadedZone' -import { gameLogger } from '#utilities/logger' +import { gameLogger } from '#application/logger' import ZoneCharacter from '#models/zoneCharacter' class ZoneManager { diff --git a/src/middleware/authentication.ts b/src/middleware/authentication.ts index 1581d1d..252c9fb 100644 --- a/src/middleware/authentication.ts +++ b/src/middleware/authentication.ts @@ -1,9 +1,9 @@ import { verify } from 'jsonwebtoken' -import { TSocket } from '#utilities/types' -import config from '#utilities/config' +import { TSocket } from '#application/types' +import config from '#application/config' import UserRepository from '#repositories/userRepository' import { User } from '@prisma/client' -import { gameLogger } from '#utilities/logger' +import { gameLogger } from '#application/logger' /** * Socket io jwt auth middleware diff --git a/src/repositories/characterHairRepository.ts b/src/repositories/characterHairRepository.ts index 7a8d49f..130363a 100644 --- a/src/repositories/characterHairRepository.ts +++ b/src/repositories/characterHairRepository.ts @@ -1,5 +1,5 @@ -import { appLogger } from '#utilities/logger' -import { BaseRepository } from './baseRepository' +import { appLogger } from '#application/logger' +import { BaseRepository } from '#application/bases/baseRepository' import { CharacterHair } from '#entities/characterHair' class CharacterHairRepository extends BaseRepository { diff --git a/src/repositories/characterRepository.ts b/src/repositories/characterRepository.ts index 3957a6d..b59a947 100644 --- a/src/repositories/characterRepository.ts +++ b/src/repositories/characterRepository.ts @@ -1,5 +1,5 @@ -import { appLogger } from '#utilities/logger' -import { BaseRepository } from '#repositories/baseRepository' +import { appLogger } from '#application/logger' +import { BaseRepository } from '#application/bases/baseRepository' import { Character } from '#entities/character' class CharacterRepository extends BaseRepository { diff --git a/src/repositories/characterTypeRepository.ts b/src/repositories/characterTypeRepository.ts index 43c453f..b51e5fa 100644 --- a/src/repositories/characterTypeRepository.ts +++ b/src/repositories/characterTypeRepository.ts @@ -1,5 +1,5 @@ -import { appLogger } from '#utilities/logger' -import { BaseRepository } from '#repositories/baseRepository' +import { appLogger } from '#application/logger' +import { BaseRepository } from '#application/bases/baseRepository' import { CharacterType } from '#entities/characterType' class CharacterTypeRepository extends BaseRepository { diff --git a/src/repositories/chatRepository.ts b/src/repositories/chatRepository.ts index b229fc5..dba603e 100644 --- a/src/repositories/chatRepository.ts +++ b/src/repositories/chatRepository.ts @@ -1,5 +1,5 @@ -import { appLogger } from '#utilities/logger' -import { BaseRepository } from '#repositories/baseRepository' +import { appLogger } from '#application/logger' +import { BaseRepository } from '#application/bases/baseRepository' import { Chat } from '#entities/chat' class ChatRepository extends BaseRepository { diff --git a/src/repositories/itemRepository.ts b/src/repositories/itemRepository.ts index 8811abc..49fc99d 100644 --- a/src/repositories/itemRepository.ts +++ b/src/repositories/itemRepository.ts @@ -1,5 +1,5 @@ -import { appLogger } from '#utilities/logger' -import { BaseRepository } from '#repositories/baseRepository' +import { appLogger } from '#application/logger' +import { BaseRepository } from '#application/bases/baseRepository' import { Item } from '#entities/item' class ItemRepository extends BaseRepository { diff --git a/src/repositories/objectRepository.ts b/src/repositories/objectRepository.ts index 7ebe628..5b0eb26 100644 --- a/src/repositories/objectRepository.ts +++ b/src/repositories/objectRepository.ts @@ -1,4 +1,4 @@ -import { BaseRepository } from '#repositories/baseRepository' +import { BaseRepository } from '#application/bases/baseRepository' class ObjectRepository extends BaseRepository { async getById(id: string): Promise { diff --git a/src/repositories/passwordResetTokenRepository.ts b/src/repositories/passwordResetTokenRepository.ts index 15ed509..e6a4846 100644 --- a/src/repositories/passwordResetTokenRepository.ts +++ b/src/repositories/passwordResetTokenRepository.ts @@ -1,5 +1,5 @@ -import { appLogger } from '#utilities/logger' -import { BaseRepository } from '#repositories/baseRepository' // Import the global Prisma instance +import { appLogger } from '#application/logger' +import { BaseRepository } from '#application/bases/baseRepository' // Import the global Prisma instance import { PasswordResetToken } from '#entities/passwordResetToken' class PasswordResetTokenRepository extends BaseRepository { diff --git a/src/repositories/spriteRepository.ts b/src/repositories/spriteRepository.ts index 58014a8..bc458a0 100644 --- a/src/repositories/spriteRepository.ts +++ b/src/repositories/spriteRepository.ts @@ -1,5 +1,5 @@ import { FilterValue } from '@mikro-orm/core' -import { BaseRepository } from '#repositories/baseRepository' +import { BaseRepository } from '#application/bases/baseRepository' import { Sprite } from '#entities/sprite' class SpriteRepository extends BaseRepository { diff --git a/src/repositories/tileRepository.ts b/src/repositories/tileRepository.ts index ca0d34c..a7815d4 100644 --- a/src/repositories/tileRepository.ts +++ b/src/repositories/tileRepository.ts @@ -1,9 +1,9 @@ import { FilterValue } from '@mikro-orm/core' -import { BaseRepository } from '#repositories/baseRepository' +import { BaseRepository } from '#application/bases/baseRepository' import { Tile } from '#entities/tile' import { Zone } from '#entities/zone' -import { unduplicateArray } from '#utilities/utilities' -import { FlattenZoneArray } from '#utilities/zone' +import { unduplicateArray } from '#application/utilities' +import { FlattenZoneArray } from '#application/zone' class TileRepository extends BaseRepository { async getById(id: FilterValue<`${string}-${string}-${string}-${string}-${string}`>): Promise { diff --git a/src/repositories/userRepository.ts b/src/repositories/userRepository.ts index 01af965..e2d2d12 100644 --- a/src/repositories/userRepository.ts +++ b/src/repositories/userRepository.ts @@ -1,5 +1,5 @@ -import { appLogger } from '#utilities/logger' -import { BaseRepository } from './baseRepository' +import { appLogger } from '#application/logger' +import { BaseRepository } from '#application/bases/baseRepository' import { User } from '#entities/user' class UserRepository extends BaseRepository { diff --git a/src/repositories/worldRepository.ts b/src/repositories/worldRepository.ts index 6791953..3e1c4ec 100644 --- a/src/repositories/worldRepository.ts +++ b/src/repositories/worldRepository.ts @@ -1,12 +1,12 @@ -import { gameLogger } from '#utilities/logger' -import { BaseRepository } from '#repositories/baseRepository' +import { gameLogger } from '#application/logger' +import { BaseRepository } from '#application/bases/baseRepository' import { World } from '#entities/world' class WorldRepository extends BaseRepository { - async getFirst(): Promise { + async getFirst() { try { const repository = this.em.getRepository(World) - return await repository.findOne({}) + return await repository.findOne({ date: { $exists: true }}) } catch (error: any) { gameLogger.error(`Failed to get first world: ${error instanceof Error ? error.message : String(error)}`) } diff --git a/src/repositories/zoneEventTileRepository.ts b/src/repositories/zoneEventTileRepository.ts index c6dca0d..af1aba6 100644 --- a/src/repositories/zoneEventTileRepository.ts +++ b/src/repositories/zoneEventTileRepository.ts @@ -1,5 +1,5 @@ -import { appLogger } from '#utilities/logger' -import { BaseRepository } from '#repositories/baseRepository' +import { appLogger } from '#application/logger' +import { BaseRepository } from '#application/bases/baseRepository' import { ZoneEventTile } from '#entities/zoneEventTile' class ZoneEventTileRepository extends BaseRepository { diff --git a/src/repositories/zoneRepository.ts b/src/repositories/zoneRepository.ts index ffcd717..1fc7a4f 100644 --- a/src/repositories/zoneRepository.ts +++ b/src/repositories/zoneRepository.ts @@ -1,5 +1,5 @@ -import { appLogger } from '#utilities/logger' -import { BaseRepository } from '#repositories/baseRepository' +import { appLogger } from '#application/logger' +import { BaseRepository } from '#application/bases/baseRepository' import { ZoneEventTile } from '#entities/zoneEventTile' import { ZoneObject } from '#entities/zoneObject' import { Zone } from '#entities/zone' diff --git a/src/server.ts b/src/server.ts index 9c9450f..bd448aa 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,16 +1,15 @@ import fs from 'fs' import express, { Application } from 'express' -import config from '#utilities/config' -import { getAppPath } from '#utilities/storage' +import config from '#application/config' +import { getAppPath } from '#application/storage' import { createServer as httpServer, Server as HTTPServer } from 'http' import { addHttpRoutes } from './http' import cors from 'cors' import { Server as SocketServer } from 'socket.io' import { Authentication } from '#middleware/authentication' -import { TSocket } from '#utilities/types' -import { Database } from '#utilities/database' -import prisma from '#utilities/prisma' // @TODO: Remove this -import { appLogger, watchLogs } from '#utilities/logger' +import { TSocket } from '#application/types' +import { Database } from '#application/database' +import { appLogger, watchLogs } from '#application/logger' import ZoneManager from '#managers/zoneManager' import UserManager from '#managers/userManager' import CommandManager from '#managers/commandManager' @@ -50,19 +49,11 @@ export class Server { // Read log file and print to console for debugging watchLogs() - // Check prisma connection - try { - await prisma.$connect() - appLogger.info('Database connected') - } catch (error: any) { - appLogger.error(`Database connection failed: ${error.message}`) - } - - // MikroORM + // Connect to database try { await Database.getInstance() } catch (error: any) { - appLogger.error(`Database 2 connection failed: ${error.message}`) + appLogger.error(`Database connection failed: ${error.message}`) } // Start the server diff --git a/src/services/characterService.ts b/src/services/characterService.ts index a206d5a..4e5083e 100644 --- a/src/services/characterService.ts +++ b/src/services/characterService.ts @@ -1,9 +1,14 @@ -import { AStar } from '#utilities/character/aStar' +import { AStar } from '#application/character/aStar' import ZoneManager from '#managers/zoneManager' -import prisma from '#utilities/prisma' -import Rotation from '#utilities/character/rotation' -import { appLogger, gameLogger } from '#utilities/logger' -import { Character } from '@prisma/client' +import Rotation from '#application/character/rotation' +import { appLogger, gameLogger } from '#application/logger' +import { Database } from '#application/database' +import { Character } from '#entities/character' +import UserRepository from '#repositories/userRepository' +import CharacterRepository from '#repositories/characterRepository' +import CharacterHairRepository from '#repositories/characterHairRepository' +import ZoneRepository from '#repositories/zoneRepository' +import { Zone } from '#entities/zone' interface Position { x: number @@ -14,32 +19,41 @@ export class CharacterService { private readonly MOVEMENT_DELAY_MS = 250 async create(name: string, userId: number) { - return prisma.character.create({ - data: { - name, - userId - // characterTypeId: 1 // @TODO set to chosen character type - } - }) + const user = await UserRepository.getById(userId) + if (!user) return null + + const character = new Character() + character.name = name + character.user = user + await Database.save(character) + + return character } async updateHair(characterId: number, characterHairId: number | null) { - await prisma.character.update({ - where: { id: characterId }, - data: { - characterHairId - } - }) + const character = await CharacterRepository.getById(characterId) + if (!character) return null + + if (characterHairId === null) { + character.characterHair = undefined + await Database.save(character) + return character + } + + const characterHair = await CharacterHairRepository.getById(characterHairId) + character.characterHair = characterHair ?? undefined + + await Database.save(character) + return character } async deleteByUserIdAndId(userId: number, characterId: number): Promise { try { - return await prisma.character.delete({ - where: { - userId, - id: characterId - } - }) + const character = await CharacterRepository.getByUserAndId(userId, characterId) + if (!character) return null + + await Database.delete(character) + return character } catch (error: any) { // Handle error appLogger.error(`Failed to delete character by user ID and character ID: ${error instanceof Error ? error.message : String(error)}`) @@ -48,15 +62,16 @@ export class CharacterService { } async updateCharacterPosition(id: number, positionX: number, positionY: number, rotation: number, zoneId: number) { - await prisma.character.update({ - where: { id }, - data: { - positionX, - positionY, - rotation, - zoneId - } - }) + const character = await CharacterRepository.getById(id) + if (!character) return null + + character.positionX = positionX + character.positionY = positionY + character.rotation = rotation + character.zone = await ZoneRepository.getById(zoneId) as Zone + + await Database.save(character) + return character } public updatePosition(character: Character, position: Position, newZoneId?: number): void { @@ -68,12 +83,12 @@ export class CharacterService { positionX: position.x, positionY: position.y, rotation: Rotation.calculate(character.positionX, character.positionY, position.x, position.y), - zoneId: newZoneId ?? character.zoneId + zoneId: newZoneId ?? character.zone.id }) } public async calculatePath(character: Character, targetX: number, targetY: number): Promise { - const zone = ZoneManager.getZoneById(character.zoneId) + const zone = ZoneManager.getZoneById(character.zone.id) const grid = await zone?.getGrid() if (!grid?.length) { diff --git a/src/services/chatService.ts b/src/services/chatService.ts index fe9bc37..4da47c8 100644 --- a/src/services/chatService.ts +++ b/src/services/chatService.ts @@ -1,7 +1,7 @@ -import prisma from '#utilities/prisma' -import { gameLogger } from '#utilities/logger' +import prisma from '#application/prisma' +import { gameLogger } from '#application/logger' import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import ChatRepository from '#repositories/chatRepository' class ChatService { diff --git a/src/services/passwordResetTokenService.ts b/src/services/passwordResetTokenService.ts index 467eb15..a0c4dca 100644 --- a/src/services/passwordResetTokenService.ts +++ b/src/services/passwordResetTokenService.ts @@ -1,6 +1,6 @@ -import prisma from '#utilities/prisma' +import prisma from '#application/prisma' import passwordResetTokenRepository from '#repositories/passwordResetTokenRepository' -import { appLogger } from '#utilities/logger' +import { appLogger } from '#application/logger' class PasswordResetTokenService { /** diff --git a/src/services/userService.ts b/src/services/userService.ts index feea80d..545cbaf 100644 --- a/src/services/userService.ts +++ b/src/services/userService.ts @@ -1,12 +1,12 @@ import bcrypt from 'bcryptjs' import UserRepository from '#repositories/userRepository' import PasswordResetTokenRepository from '#repositories/passwordResetTokenRepository' -import config from '#utilities/config' +import config from '#application/config' import NodeMailer from 'nodemailer' -import { httpLogger } from '#utilities/logger' +import { httpLogger } from '#application/logger' import PasswordResetTokenService from './passwordResetTokenService' // @TODO: Correctly implement this import { User } from '#entities/user' -import { Database } from '#utilities/database' +import { Database } from '#application/database' import { PasswordResetToken } from '#entities/passwordResetToken' /** diff --git a/src/services/worldService.ts b/src/services/worldService.ts index 5a42ce3..958583a 100644 --- a/src/services/worldService.ts +++ b/src/services/worldService.ts @@ -1,30 +1,35 @@ -import prisma from '#utilities/prisma' -import { gameLogger } from '#utilities/logger' -import { World } from '@prisma/client' +import { gameLogger } from '#application/logger' import WorldRepository from '#repositories/worldRepository' +import { World } from '#entities/world' class WorldService { async update(worldData: Partial): Promise { try { - const currentWorld = await WorldRepository.getFirst() - if (!currentWorld) { - // If no world exists, create first record - await prisma.world.create({ - data: { - ...worldData, - date: worldData.date || new Date() - } - }) - return true + let world = await WorldRepository.getFirst() + if (!world) { + world = new World() + + await world.save() } - // Update existing world using its date as unique identifier - await prisma.world.update({ - where: { - date: currentWorld.date - }, - data: worldData - }) + world.date = worldData.date || new Date() + + if (worldData.isRainEnabled) { + world.isRainEnabled = worldData.isRainEnabled + } + if (worldData.rainPercentage) { + world.rainPercentage = worldData.rainPercentage + } + if (worldData.isFogEnabled) { + world.isFogEnabled = worldData.isFogEnabled + } + if (worldData.fogDensity) { + world.fogDensity = worldData.fogDensity + } + + console.log(world.date) + + await world.update() return true } catch (error: any) { diff --git a/src/services/zoneEventTileService.ts b/src/services/zoneEventTileService.ts index d8db6e2..6f418fc 100644 --- a/src/services/zoneEventTileService.ts +++ b/src/services/zoneEventTileService.ts @@ -1,9 +1,9 @@ -import { ExtendedCharacter, TSocket } from '#utilities/types' -import prisma from '#utilities/prisma' +import { ExtendedCharacter, TSocket } from '#application/types' +import prisma from '#application/prisma' import { ZoneEventTileTeleport } from '@prisma/client' import { Server } from 'socket.io' import ZoneManager from '#managers/zoneManager' -import { gameLogger } from '#utilities/logger' +import { gameLogger } from '#application/logger' export class ZoneEventTileService { public async handleTeleport(io: Server, socket: TSocket, character: ExtendedCharacter, teleport: ZoneEventTileTeleport): Promise { diff --git a/src/services/zoneService.ts b/src/services/zoneService.ts index 4914750..17a4eeb 100644 --- a/src/services/zoneService.ts +++ b/src/services/zoneService.ts @@ -1,5 +1,5 @@ -import prisma from '#utilities/prisma' -import { gameLogger } from '#utilities/logger' +import prisma from '#application/prisma' +import { gameLogger } from '#application/logger' class ZoneService {} diff --git a/src/socketEvents/character/charactersScreen/character_hair_list.ts b/src/socketEvents/character/charactersScreen/character_hair_list.ts index 85e9204..eb882a8 100644 --- a/src/socketEvents/character/charactersScreen/character_hair_list.ts +++ b/src/socketEvents/character/charactersScreen/character_hair_list.ts @@ -1,7 +1,7 @@ import { Server } from 'socket.io' -import { CharacterHair } from '@prisma/client' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import characterHairRepository from '#repositories/characterHairRepository' +import { CharacterHair } from '#entities/characterHair' interface IPayload {} @@ -15,7 +15,7 @@ export default class characterHairListEvent { this.socket.on('character:hair:list', this.handleEvent.bind(this)) } - private async handleEvent(data: IPayload, callback: (response: CharacterHair[]) => void): Promise { + private async handleEvent(data: IPayload, callback: (response: CharacterHair[] | null) => void): Promise { const items = await characterHairRepository.getAllSelectable() callback(items) } diff --git a/src/socketEvents/character/connect.ts b/src/socketEvents/character/connect.ts index 321d965..e0a7054 100644 --- a/src/socketEvents/character/connect.ts +++ b/src/socketEvents/character/connect.ts @@ -1,7 +1,7 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import CharacterRepository from '#repositories/characterRepository' -import { gameLogger } from '#utilities/logger' +import { gameLogger } from '#application/logger' import ZoneManager from '#managers/zoneManager' import { CharacterService } from '#services/characterService' diff --git a/src/socketEvents/character/create.ts b/src/socketEvents/character/create.ts index 482fe9a..c4b20f7 100644 --- a/src/socketEvents/character/create.ts +++ b/src/socketEvents/character/create.ts @@ -1,10 +1,10 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import { Character } from '@prisma/client' +import { TSocket } from '#application/types' +import { Character } from '#entities/character' import CharacterRepository from '#repositories/characterRepository' import { CharacterService } from '#services/characterService' -import { ZCharacterCreate } from '#utilities/zodTypes' -import { gameLogger } from '#utilities/logger' +import { ZCharacterCreate } from '#application/zodTypes' +import { gameLogger } from '#application/logger' import { ZodError } from 'zod' export default class CharacterCreateEvent { diff --git a/src/socketEvents/character/delete.ts b/src/socketEvents/character/delete.ts index 2166424..08ee596 100644 --- a/src/socketEvents/character/delete.ts +++ b/src/socketEvents/character/delete.ts @@ -1,8 +1,9 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import { Character, Zone } from '@prisma/client' +import { TSocket } from '#application/types' import CharacterRepository from '#repositories/characterRepository' import { CharacterService } from '#services/characterService' +import { Character } from '#entities/character' +import { Zone } from '#entities/zone' type TypePayload = { characterId: number diff --git a/src/socketEvents/character/list.ts b/src/socketEvents/character/list.ts index 06e2437..92d0a6a 100644 --- a/src/socketEvents/character/list.ts +++ b/src/socketEvents/character/list.ts @@ -1,8 +1,8 @@ import { Socket, Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import { Character } from '@prisma/client' +import { TSocket } from '#application/types' import CharacterRepository from '#repositories/characterRepository' -import { gameLogger } from '#utilities/logger' +import { gameLogger } from '#application/logger' +import { Character } from '#entities/character' export default class CharacterListEvent { constructor( diff --git a/src/socketEvents/chat/gameMaster/alertCommand.ts b/src/socketEvents/chat/gameMaster/alertCommand.ts index 53e824d..82de9a7 100644 --- a/src/socketEvents/chat/gameMaster/alertCommand.ts +++ b/src/socketEvents/chat/gameMaster/alertCommand.ts @@ -1,8 +1,8 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import { getArgs, isCommand } from '#utilities/chat' +import { TSocket } from '#application/types' +import { getArgs, isCommand } from '#application/chat' import CharacterRepository from '#repositories/characterRepository' -import { gameLogger } from '#utilities/logger' +import { gameLogger } from '#application/logger' type TypePayload = { message: string diff --git a/src/socketEvents/chat/gameMaster/setTimeCommand.ts b/src/socketEvents/chat/gameMaster/setTimeCommand.ts index d4d90f9..4e5e711 100644 --- a/src/socketEvents/chat/gameMaster/setTimeCommand.ts +++ b/src/socketEvents/chat/gameMaster/setTimeCommand.ts @@ -1,8 +1,8 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import { getArgs, isCommand } from '#utilities/chat' +import { TSocket } from '#application/types' +import { getArgs, isCommand } from '#application/chat' import CharacterRepository from '#repositories/characterRepository' -import { gameLogger } from '#utilities/logger' +import { gameLogger } from '#application/logger' import DateManager from '#managers/dateManager' type TypePayload = { diff --git a/src/socketEvents/chat/gameMaster/teleportCommand.ts b/src/socketEvents/chat/gameMaster/teleportCommand.ts index 015c337..eb64233 100644 --- a/src/socketEvents/chat/gameMaster/teleportCommand.ts +++ b/src/socketEvents/chat/gameMaster/teleportCommand.ts @@ -1,8 +1,8 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import { getArgs, isCommand } from '#utilities/chat' +import { TSocket } from '#application/types' +import { getArgs, isCommand } from '#application/chat' import ZoneRepository from '#repositories/zoneRepository' -import { gameLogger, gameMasterLogger } from '#utilities/logger' +import { gameLogger, gameMasterLogger } from '#application/logger' import ZoneManager from '#managers/zoneManager' import ZoneCharacter from '#models/zoneCharacter' import zoneManager from '#managers/zoneManager' diff --git a/src/socketEvents/chat/gameMaster/toggleFogCommand.ts b/src/socketEvents/chat/gameMaster/toggleFogCommand.ts index 6cf6f41..927085a 100644 --- a/src/socketEvents/chat/gameMaster/toggleFogCommand.ts +++ b/src/socketEvents/chat/gameMaster/toggleFogCommand.ts @@ -1,8 +1,8 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import { isCommand } from '#utilities/chat' +import { TSocket } from '#application/types' +import { isCommand } from '#application/chat' import CharacterRepository from '#repositories/characterRepository' -import { gameLogger } from '#utilities/logger' +import { gameLogger } from '#application/logger' import WeatherManager from '#managers/weatherManager' type TypePayload = { diff --git a/src/socketEvents/chat/gameMaster/toggleRainCommand.ts b/src/socketEvents/chat/gameMaster/toggleRainCommand.ts index b136b24..936f98d 100644 --- a/src/socketEvents/chat/gameMaster/toggleRainCommand.ts +++ b/src/socketEvents/chat/gameMaster/toggleRainCommand.ts @@ -1,8 +1,8 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import { isCommand } from '#utilities/chat' +import { TSocket } from '#application/types' +import { isCommand } from '#application/chat' import CharacterRepository from '#repositories/characterRepository' -import { gameLogger } from '#utilities/logger' +import { gameLogger } from '#application/logger' import WeatherManager from '#managers/weatherManager' type TypePayload = { diff --git a/src/socketEvents/chat/message.ts b/src/socketEvents/chat/message.ts index 0e043ab..48e6a7e 100644 --- a/src/socketEvents/chat/message.ts +++ b/src/socketEvents/chat/message.ts @@ -1,8 +1,8 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import ZoneRepository from '#repositories/zoneRepository' -import { isCommand } from '#utilities/chat' -import { gameLogger } from '#utilities/logger' +import { isCommand } from '#application/chat' +import { gameLogger } from '#application/logger' import ZoneManager from '#managers/zoneManager' import ChatService from '#services/chatService' diff --git a/src/socketEvents/disconnect.ts b/src/socketEvents/disconnect.ts index d834ee0..425c28a 100644 --- a/src/socketEvents/disconnect.ts +++ b/src/socketEvents/disconnect.ts @@ -1,6 +1,6 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import { gameLogger } from '#utilities/logger' +import { TSocket } from '#application/types' +import { gameLogger } from '#application/logger' import ZoneManager from '#managers/zoneManager' export default class DisconnectEvent { diff --git a/src/socketEvents/gameMaster/assetManager/characterHair/create.ts b/src/socketEvents/gameMaster/assetManager/characterHair/create.ts index 2535a38..b5159dc 100644 --- a/src/socketEvents/gameMaster/assetManager/characterHair/create.ts +++ b/src/socketEvents/gameMaster/assetManager/characterHair/create.ts @@ -1,6 +1,6 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import prisma from '#utilities/prisma' +import { TSocket } from '#application/types' +import prisma from '#application/prisma' import characterRepository from '#repositories/characterRepository' export default class CharacterHairCreateEvent { diff --git a/src/socketEvents/gameMaster/assetManager/characterHair/delete.ts b/src/socketEvents/gameMaster/assetManager/characterHair/delete.ts index 79dcd41..5c59ca2 100644 --- a/src/socketEvents/gameMaster/assetManager/characterHair/delete.ts +++ b/src/socketEvents/gameMaster/assetManager/characterHair/delete.ts @@ -1,8 +1,8 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import prisma from '#utilities/prisma' +import { TSocket } from '#application/types' +import prisma from '#application/prisma' import characterRepository from '#repositories/characterRepository' -import { gameMasterLogger } from '#utilities/logger' +import { gameMasterLogger } from '#application/logger' interface IPayload { id: number diff --git a/src/socketEvents/gameMaster/assetManager/characterHair/list.ts b/src/socketEvents/gameMaster/assetManager/characterHair/list.ts index 79a4264..d0871bb 100644 --- a/src/socketEvents/gameMaster/assetManager/characterHair/list.ts +++ b/src/socketEvents/gameMaster/assetManager/characterHair/list.ts @@ -1,7 +1,7 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import { CharacterHair } from '@prisma/client' -import { gameMasterLogger } from '#utilities/logger' +import { gameMasterLogger } from '#application/logger' import characterRepository from '#repositories/characterRepository' import characterHairRepository from '#repositories/characterHairRepository' diff --git a/src/socketEvents/gameMaster/assetManager/characterHair/update.ts b/src/socketEvents/gameMaster/assetManager/characterHair/update.ts index 3019d49..d44f38a 100644 --- a/src/socketEvents/gameMaster/assetManager/characterHair/update.ts +++ b/src/socketEvents/gameMaster/assetManager/characterHair/update.ts @@ -1,9 +1,9 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import prisma from '#utilities/prisma' +import { TSocket } from '#application/types' +import prisma from '#application/prisma' import characterRepository from '#repositories/characterRepository' import { CharacterGender, CharacterRace } from '@prisma/client' -import { gameMasterLogger } from '#utilities/logger' +import { gameMasterLogger } from '#application/logger' type Payload = { id: number diff --git a/src/socketEvents/gameMaster/assetManager/characterType/create.ts b/src/socketEvents/gameMaster/assetManager/characterType/create.ts index 3e9069b..f32479d 100644 --- a/src/socketEvents/gameMaster/assetManager/characterType/create.ts +++ b/src/socketEvents/gameMaster/assetManager/characterType/create.ts @@ -1,6 +1,6 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import prisma from '#utilities/prisma' +import { TSocket } from '#application/types' +import prisma from '#application/prisma' import characterRepository from '#repositories/characterRepository' import { CharacterGender, CharacterRace } from '@prisma/client' diff --git a/src/socketEvents/gameMaster/assetManager/characterType/delete.ts b/src/socketEvents/gameMaster/assetManager/characterType/delete.ts index 314e3bc..edafb69 100644 --- a/src/socketEvents/gameMaster/assetManager/characterType/delete.ts +++ b/src/socketEvents/gameMaster/assetManager/characterType/delete.ts @@ -1,8 +1,8 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import prisma from '#utilities/prisma' +import { TSocket } from '#application/types' +import prisma from '#application/prisma' import characterRepository from '#repositories/characterRepository' -import { gameMasterLogger } from '#utilities/logger' +import { gameMasterLogger } from '#application/logger' interface IPayload { id: number diff --git a/src/socketEvents/gameMaster/assetManager/characterType/list.ts b/src/socketEvents/gameMaster/assetManager/characterType/list.ts index fb88bc4..7fa57c1 100644 --- a/src/socketEvents/gameMaster/assetManager/characterType/list.ts +++ b/src/socketEvents/gameMaster/assetManager/characterType/list.ts @@ -1,8 +1,8 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import { CharacterType } from '@prisma/client' import characterRepository from '#repositories/characterRepository' -import { gameMasterLogger } from '#utilities/logger' +import { gameMasterLogger } from '#application/logger' import CharacterTypeRepository from '#repositories/characterTypeRepository' interface IPayload {} diff --git a/src/socketEvents/gameMaster/assetManager/characterType/update.ts b/src/socketEvents/gameMaster/assetManager/characterType/update.ts index cd27c48..01b82a4 100644 --- a/src/socketEvents/gameMaster/assetManager/characterType/update.ts +++ b/src/socketEvents/gameMaster/assetManager/characterType/update.ts @@ -1,6 +1,6 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import prisma from '#utilities/prisma' +import { TSocket } from '#application/types' +import prisma from '#application/prisma' import characterRepository from '#repositories/characterRepository' import { CharacterGender, CharacterRace } from '@prisma/client' diff --git a/src/socketEvents/gameMaster/assetManager/item/create.ts b/src/socketEvents/gameMaster/assetManager/item/create.ts index 1544bc9..bacfba7 100644 --- a/src/socketEvents/gameMaster/assetManager/item/create.ts +++ b/src/socketEvents/gameMaster/assetManager/item/create.ts @@ -1,6 +1,6 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import prisma from '#utilities/prisma' +import { TSocket } from '#application/types' +import prisma from '#application/prisma' import characterRepository from '#repositories/characterRepository' export default class ItemCreateEvent { diff --git a/src/socketEvents/gameMaster/assetManager/item/delete.ts b/src/socketEvents/gameMaster/assetManager/item/delete.ts index 4fb995f..dda1488 100644 --- a/src/socketEvents/gameMaster/assetManager/item/delete.ts +++ b/src/socketEvents/gameMaster/assetManager/item/delete.ts @@ -1,8 +1,8 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import prisma from '#utilities/prisma' +import { TSocket } from '#application/types' +import prisma from '#application/prisma' import characterRepository from '#repositories/characterRepository' -import { gameMasterLogger } from '#utilities/logger' +import { gameMasterLogger } from '#application/logger' interface IPayload { id: string diff --git a/src/socketEvents/gameMaster/assetManager/item/list.ts b/src/socketEvents/gameMaster/assetManager/item/list.ts index 1f1f357..405a045 100644 --- a/src/socketEvents/gameMaster/assetManager/item/list.ts +++ b/src/socketEvents/gameMaster/assetManager/item/list.ts @@ -1,8 +1,8 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import { Item } from '@prisma/client' import characterRepository from '#repositories/characterRepository' -import { gameMasterLogger } from '#utilities/logger' +import { gameMasterLogger } from '#application/logger' import itemRepository from '#repositories/itemRepository' interface IPayload {} diff --git a/src/socketEvents/gameMaster/assetManager/item/update.ts b/src/socketEvents/gameMaster/assetManager/item/update.ts index 894df9b..01b95d3 100644 --- a/src/socketEvents/gameMaster/assetManager/item/update.ts +++ b/src/socketEvents/gameMaster/assetManager/item/update.ts @@ -1,9 +1,9 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import prisma from '#utilities/prisma' +import { TSocket } from '#application/types' +import prisma from '#application/prisma' import characterRepository from '#repositories/characterRepository' import { ItemType, ItemRarity } from '@prisma/client' -import { gameMasterLogger } from '#utilities/logger' +import { gameMasterLogger } from '#application/logger' type Payload = { id: string diff --git a/src/socketEvents/gameMaster/assetManager/object/list.ts b/src/socketEvents/gameMaster/assetManager/object/list.ts index 3f363e9..6b505af 100644 --- a/src/socketEvents/gameMaster/assetManager/object/list.ts +++ b/src/socketEvents/gameMaster/assetManager/object/list.ts @@ -1,5 +1,5 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import { Object } from '@prisma/client' import ObjectRepository from '#repositories/objectRepository' import characterRepository from '#repositories/characterRepository' diff --git a/src/socketEvents/gameMaster/assetManager/object/remove.ts b/src/socketEvents/gameMaster/assetManager/object/remove.ts index d633198..5b67659 100644 --- a/src/socketEvents/gameMaster/assetManager/object/remove.ts +++ b/src/socketEvents/gameMaster/assetManager/object/remove.ts @@ -1,10 +1,10 @@ import fs from 'fs' import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import prisma from '#utilities/prisma' +import { TSocket } from '#application/types' +import prisma from '#application/prisma' import characterRepository from '#repositories/characterRepository' -import { getPublicPath } from '#utilities/storage' -import { gameLogger, gameMasterLogger } from '#utilities/logger' +import { getPublicPath } from '#application/storage' +import { gameLogger, gameMasterLogger } from '#application/logger' interface IPayload { object: string diff --git a/src/socketEvents/gameMaster/assetManager/object/update.ts b/src/socketEvents/gameMaster/assetManager/object/update.ts index 6158dc8..ee74776 100644 --- a/src/socketEvents/gameMaster/assetManager/object/update.ts +++ b/src/socketEvents/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 '#application/types' +import prisma from '#application/prisma' import characterRepository from '#repositories/characterRepository' type Payload = { diff --git a/src/socketEvents/gameMaster/assetManager/object/upload.ts b/src/socketEvents/gameMaster/assetManager/object/upload.ts index 8191b4b..268e818 100644 --- a/src/socketEvents/gameMaster/assetManager/object/upload.ts +++ b/src/socketEvents/gameMaster/assetManager/object/upload.ts @@ -1,12 +1,12 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import { writeFile } from 'node:fs/promises' import fs from 'fs/promises' -import prisma from '#utilities/prisma' +import prisma from '#application/prisma' import sharp from 'sharp' import characterRepository from '#repositories/characterRepository' -import { gameMasterLogger } from '#utilities/logger' -import { getPublicPath } from '#utilities/storage' +import { gameMasterLogger } from '#application/logger' +import { getPublicPath } from '#application/storage' interface IObjectData { [key: string]: Buffer diff --git a/src/socketEvents/gameMaster/assetManager/sprite/copy.ts b/src/socketEvents/gameMaster/assetManager/sprite/copy.ts index c30b3fc..643ce79 100644 --- a/src/socketEvents/gameMaster/assetManager/sprite/copy.ts +++ b/src/socketEvents/gameMaster/assetManager/sprite/copy.ts @@ -1,8 +1,8 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import prisma from '#utilities/prisma' +import { TSocket } from '#application/types' +import prisma from '#application/prisma' import CharacterRepository from '#repositories/characterRepository' -import { gameMasterLogger } from '#utilities/logger' +import { gameMasterLogger } from '#application/logger' import type { Prisma } from '@prisma/client' interface CopyPayload { diff --git a/src/socketEvents/gameMaster/assetManager/sprite/create.ts b/src/socketEvents/gameMaster/assetManager/sprite/create.ts index 9d91bd2..ecd7a15 100644 --- a/src/socketEvents/gameMaster/assetManager/sprite/create.ts +++ b/src/socketEvents/gameMaster/assetManager/sprite/create.ts @@ -1,9 +1,9 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import fs from 'fs/promises' -import prisma from '#utilities/prisma' +import prisma from '#application/prisma' import characterRepository from '#repositories/characterRepository' -import { getPublicPath } from '#utilities/storage' +import { getPublicPath } from '#application/storage' export default class SpriteCreateEvent { constructor( diff --git a/src/socketEvents/gameMaster/assetManager/sprite/delete.ts b/src/socketEvents/gameMaster/assetManager/sprite/delete.ts index 9309136..246bd7b 100644 --- a/src/socketEvents/gameMaster/assetManager/sprite/delete.ts +++ b/src/socketEvents/gameMaster/assetManager/sprite/delete.ts @@ -1,9 +1,9 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import fs from 'fs' -import prisma from '#utilities/prisma' -import { gameMasterLogger } from '#utilities/logger' -import { getPublicPath } from '#utilities/storage' +import prisma from '#application/prisma' +import { gameMasterLogger } from '#application/logger' +import { getPublicPath } from '#application/storage' import CharacterRepository from '#repositories/characterRepository' type Payload = { diff --git a/src/socketEvents/gameMaster/assetManager/sprite/list.ts b/src/socketEvents/gameMaster/assetManager/sprite/list.ts index be2e906..c4985b9 100644 --- a/src/socketEvents/gameMaster/assetManager/sprite/list.ts +++ b/src/socketEvents/gameMaster/assetManager/sprite/list.ts @@ -1,5 +1,5 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import { Sprite } from '@prisma/client' import SpriteRepository from '#repositories/spriteRepository' import characterRepository from '#repositories/characterRepository' diff --git a/src/socketEvents/gameMaster/assetManager/sprite/update.ts b/src/socketEvents/gameMaster/assetManager/sprite/update.ts index 38099df..363c5ef 100644 --- a/src/socketEvents/gameMaster/assetManager/sprite/update.ts +++ b/src/socketEvents/gameMaster/assetManager/sprite/update.ts @@ -1,12 +1,12 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import prisma from '#utilities/prisma' +import { TSocket } from '#application/types' +import prisma from '#application/prisma' import type { Prisma, SpriteAction } from '@prisma/client' import { writeFile, mkdir } from 'node:fs/promises' import sharp from 'sharp' -import { getPublicPath } from '#utilities/storage' +import { getPublicPath } from '#application/storage' import CharacterRepository from '#repositories/characterRepository' -import { gameMasterLogger } from '#utilities/logger' +import { gameMasterLogger } from '#application/logger' // Constants const ISOMETRIC_CONFIG = { diff --git a/src/socketEvents/gameMaster/assetManager/tile/delete.ts b/src/socketEvents/gameMaster/assetManager/tile/delete.ts index 3e59fd6..415e20d 100644 --- a/src/socketEvents/gameMaster/assetManager/tile/delete.ts +++ b/src/socketEvents/gameMaster/assetManager/tile/delete.ts @@ -1,10 +1,10 @@ import fs from 'fs/promises' import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import prisma from '#utilities/prisma' +import { TSocket } from '#application/types' +import prisma from '#application/prisma' import characterRepository from '#repositories/characterRepository' -import { gameMasterLogger } from '#utilities/logger' -import { getPublicPath } from '#utilities/storage' +import { gameMasterLogger } from '#application/logger' +import { getPublicPath } from '#application/storage' type Payload = { id: string diff --git a/src/socketEvents/gameMaster/assetManager/tile/list.ts b/src/socketEvents/gameMaster/assetManager/tile/list.ts index 36ec5b5..e3f4e24 100644 --- a/src/socketEvents/gameMaster/assetManager/tile/list.ts +++ b/src/socketEvents/gameMaster/assetManager/tile/list.ts @@ -1,5 +1,5 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import { Tile } from '@prisma/client' import TileRepository from '#repositories/tileRepository' import characterRepository from '#repositories/characterRepository' diff --git a/src/socketEvents/gameMaster/assetManager/tile/update.ts b/src/socketEvents/gameMaster/assetManager/tile/update.ts index 688338c..f2757f9 100644 --- a/src/socketEvents/gameMaster/assetManager/tile/update.ts +++ b/src/socketEvents/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 '#application/types' +import prisma from '#application/prisma' import characterRepository from '#repositories/characterRepository' type Payload = { diff --git a/src/socketEvents/gameMaster/assetManager/tile/upload.ts b/src/socketEvents/gameMaster/assetManager/tile/upload.ts index b01290b..af51515 100644 --- a/src/socketEvents/gameMaster/assetManager/tile/upload.ts +++ b/src/socketEvents/gameMaster/assetManager/tile/upload.ts @@ -1,11 +1,11 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import { writeFile } from 'node:fs/promises' import fs from 'fs/promises' -import prisma from '#utilities/prisma' +import prisma from '#application/prisma' import characterRepository from '#repositories/characterRepository' -import { gameMasterLogger } from '#utilities/logger' -import { getPublicPath } from '#utilities/storage' +import { gameMasterLogger } from '#application/logger' +import { getPublicPath } from '#application/storage' interface ITileData { [key: string]: Buffer diff --git a/src/socketEvents/gameMaster/zoneEditor/create.ts b/src/socketEvents/gameMaster/zoneEditor/create.ts index 87654c2..3ec734e 100644 --- a/src/socketEvents/gameMaster/zoneEditor/create.ts +++ b/src/socketEvents/gameMaster/zoneEditor/create.ts @@ -1,10 +1,10 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import ZoneRepository from '#repositories/zoneRepository' import { Zone } from '@prisma/client' -import prisma from '#utilities/prisma' +import prisma from '#application/prisma' import CharacterRepository from '#repositories/characterRepository' -import { gameMasterLogger } from '#utilities/logger' +import { gameMasterLogger } from '#application/logger' type Payload = { name: string diff --git a/src/socketEvents/gameMaster/zoneEditor/delete.ts b/src/socketEvents/gameMaster/zoneEditor/delete.ts index 3580340..2d1edf4 100644 --- a/src/socketEvents/gameMaster/zoneEditor/delete.ts +++ b/src/socketEvents/gameMaster/zoneEditor/delete.ts @@ -1,9 +1,9 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import ZoneRepository from '#repositories/zoneRepository' -import prisma from '#utilities/prisma' +import prisma from '#application/prisma' import CharacterRepository from '#repositories/characterRepository' -import { gameMasterLogger } from '#utilities/logger' +import { gameMasterLogger } from '#application/logger' type Payload = { zoneId: number diff --git a/src/socketEvents/gameMaster/zoneEditor/list.ts b/src/socketEvents/gameMaster/zoneEditor/list.ts index 4ecdb51..0f23dc8 100644 --- a/src/socketEvents/gameMaster/zoneEditor/list.ts +++ b/src/socketEvents/gameMaster/zoneEditor/list.ts @@ -1,9 +1,9 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import { Zone } from '@prisma/client' import ZoneRepository from '#repositories/zoneRepository' import CharacterRepository from '#repositories/characterRepository' -import { gameMasterLogger } from '#utilities/logger' +import { gameMasterLogger } from '#application/logger' interface IPayload {} diff --git a/src/socketEvents/gameMaster/zoneEditor/request.ts b/src/socketEvents/gameMaster/zoneEditor/request.ts index 53895a0..8f48170 100644 --- a/src/socketEvents/gameMaster/zoneEditor/request.ts +++ b/src/socketEvents/gameMaster/zoneEditor/request.ts @@ -1,9 +1,9 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import ZoneRepository from '#repositories/zoneRepository' import { Zone } from '@prisma/client' import CharacterRepository from '#repositories/characterRepository' -import { gameMasterLogger } from '#utilities/logger' +import { gameMasterLogger } from '#application/logger' interface IPayload { zoneId: number diff --git a/src/socketEvents/gameMaster/zoneEditor/update.ts b/src/socketEvents/gameMaster/zoneEditor/update.ts index 261d20c..9e212da 100644 --- a/src/socketEvents/gameMaster/zoneEditor/update.ts +++ b/src/socketEvents/gameMaster/zoneEditor/update.ts @@ -1,11 +1,11 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import ZoneRepository from '#repositories/zoneRepository' import { Zone, ZoneEffect, ZoneEventTileType, ZoneObject } from '@prisma/client' -import prisma from '#utilities/prisma' +import prisma from '#application/prisma' import zoneManager from '#managers/zoneManager' import CharacterRepository from '#repositories/characterRepository' -import { gameMasterLogger } from '#utilities/logger' +import { gameMasterLogger } from '#application/logger' interface IPayload { zoneId: number diff --git a/src/socketEvents/login.ts b/src/socketEvents/login.ts index d6b0311..6e94702 100644 --- a/src/socketEvents/login.ts +++ b/src/socketEvents/login.ts @@ -1,6 +1,6 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import { gameLogger } from '#utilities/logger' +import { TSocket } from '#application/types' +import { gameLogger } from '#application/logger' import UserRepository from '#repositories/userRepository' export default class LoginEvent { diff --git a/src/socketEvents/zone/characterJoin.ts b/src/socketEvents/zone/characterJoin.ts index 475f13b..a3787e2 100644 --- a/src/socketEvents/zone/characterJoin.ts +++ b/src/socketEvents/zone/characterJoin.ts @@ -1,8 +1,8 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import ZoneRepository from '#repositories/zoneRepository' import { Zone } from '@prisma/client' -import { gameLogger } from '#utilities/logger' +import { gameLogger } from '#application/logger' import CharacterRepository from '#repositories/characterRepository' import ZoneManager from '#managers/zoneManager' import zoneCharacter from '#models/zoneCharacter' diff --git a/src/socketEvents/zone/characterLeave.ts b/src/socketEvents/zone/characterLeave.ts index b8b6133..d01b9a5 100644 --- a/src/socketEvents/zone/characterLeave.ts +++ b/src/socketEvents/zone/characterLeave.ts @@ -1,7 +1,7 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' +import { TSocket } from '#application/types' import ZoneRepository from '#repositories/zoneRepository' -import { gameLogger } from '#utilities/logger' +import { gameLogger } from '#application/logger' import ZoneManager from '#managers/zoneManager' import CharacterRepository from '#repositories/characterRepository' diff --git a/src/socketEvents/zone/characterMove.ts b/src/socketEvents/zone/characterMove.ts index b671232..f6f159d 100644 --- a/src/socketEvents/zone/characterMove.ts +++ b/src/socketEvents/zone/characterMove.ts @@ -1,9 +1,9 @@ import { Server } from 'socket.io' -import { TSocket, ZoneEventTileWithTeleport } from '#utilities/types' +import { TSocket, ZoneEventTileWithTeleport } from '#application/types' import { CharacterService } from '#services/characterService' import { ZoneEventTileService } from '#services/zoneEventTileService' -import Rotation from '#utilities/character/rotation' -import { gameLogger } from '#utilities/logger' +import Rotation from '#application/character/rotation' +import { gameLogger } from '#application/logger' import ZoneManager from '#managers/zoneManager' import ZoneCharacter from '#models/zoneCharacter' import zoneEventTileRepository from '#repositories/zoneEventTileRepository' diff --git a/src/socketEvents/zone/weather.ts b/src/socketEvents/zone/weather.ts index 873df1a..dea7f79 100644 --- a/src/socketEvents/zone/weather.ts +++ b/src/socketEvents/zone/weather.ts @@ -1,6 +1,6 @@ import { Server } from 'socket.io' -import { TSocket } from '#utilities/types' -import { gameLogger } from '#utilities/logger' +import { TSocket } from '#application/types' +import { gameLogger } from '#application/logger' import WeatherManager from '#managers/weatherManager' export default class Weather { diff --git a/src/utilities/database.ts b/src/utilities/database.ts deleted file mode 100644 index 8746de5..0000000 --- a/src/utilities/database.ts +++ /dev/null @@ -1,78 +0,0 @@ -import config from '../../mikro-orm.config' -// import { MikroORM } from '@mikro-orm/mariadb' -import { MikroORM } from '@mikro-orm/mysql' -import { appLogger } from '#utilities/logger' - -/** - * Singleton class for initializing and managing the database connection - */ -export class Database { - private static instance: MikroORM | undefined - - private static async init(): Promise { - try { - const orm = await MikroORM.init(config) - appLogger.info('MikroORM connected successfully') - return orm - } catch (error) { - appLogger.error(`MikroORM connection failed: ${error}`) - throw error - } - } - - public static async getInstance(): Promise { - if (!Database.instance) { - Database.instance = await Database.init() - } - return Database.instance - } - - public static async save(entity: T): Promise { - try { - const orm = await Database.getInstance() - const em = orm.em.fork() // Create a new EntityManager instance - - await em.begin() // Start transaction - try { - em.persist(entity) - await em.flush() - await em.commit() - return entity - } catch (error) { - await em.rollback() - throw error - } - } catch (error) { - appLogger.error(`Failed to save entity: ${error instanceof Error ? error.message : String(error)}`) - throw error - } - } - - public static async delete(entity: T): Promise { - try { - const orm = await Database.getInstance() - const em = orm.em.fork() // Create a new EntityManager instance - - await em.begin() // Start transaction - try { - em.remove(entity) - await em.flush() - await em.commit() - return entity - } catch (error) { - await em.rollback() - throw error - } - } catch (error) { - appLogger.error(`Failed to remove entity: ${error instanceof Error ? error.message : String(error)}`) - throw error - } - } - - public static async close() { - if (Database.instance) { - await Database.instance.close() - Database.instance = undefined - } - } -} diff --git a/src/utilities/prisma.ts b/src/utilities/prisma.ts deleted file mode 100644 index 4590932..0000000 --- a/src/utilities/prisma.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { PrismaClient } from '@prisma/client' - -const prisma = new PrismaClient() - -export default prisma diff --git a/tsconfig.json b/tsconfig.json index 8d6a352..bcced54 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,6 +16,7 @@ "baseUrl": ".", "paths": { + "#application/*": ["./src/application/*"], "#commands/*": ["./src/commands/*"], "#entities/*": ["./src/entities/*"], "#http/*": ["./src/http/*"], @@ -25,8 +26,7 @@ "#models/*": ["./src/models/*"], "#repositories/*": ["./src/repositories/*"], "#services/*": ["./src/services/*"], - "#socketEvents/*": ["./src/socketEvents/*"], - "#utilities/*": ["./src/utilities/*"], + "#socketEvents/*": ["./src/socketEvents/*"] }, // Specify multiple folders that act like './node_modules/@types'