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<this> {
+    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<this> {
+    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<this> {
+    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<MikroORM> {
+    try {
+      return await MikroORM.init(config)
+    } catch (error) {
+      appLogger.error(`MikroORM connection failed: ${error}`)
+      throw error
+    }
+  }
+
+  public static async getInstance(): Promise<MikroORM> {
+    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<string, any> = 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<void> {
-    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<any> {
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<any> {
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<any> {
+  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<Character | null> {
     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<Position[] | null> {
-    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<World>): Promise<boolean> {
     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<void> {
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<void> {
+  private async handleEvent(data: IPayload, callback: (response: CharacterHair[] | null) => void): Promise<void> {
     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<MikroORM> {
-    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<MikroORM> {
-    if (!Database.instance) {
-      Database.instance = await Database.init()
-    }
-    return Database.instance
-  }
-
-  public static async save<T extends object>(entity: T): Promise<T> {
-    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<T extends object>(entity: T): Promise<T> {
-    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'