From f2917e67e34644b2abe846a12efc2036457579bf Mon Sep 17 00:00:00 2001
From: Dennis Postma <dennis@directonline.io>
Date: Fri, 7 Feb 2025 01:08:40 +0100
Subject: [PATCH] Minor fixes

---
 .../gameMaster/assetManager/characterHair/delete.ts | 13 ++++++++-----
 src/events/gameMaster/assetManager/item/create.ts   |  8 +++++++-
 src/managers/userManager.ts                         |  3 +--
 src/repositories/spriteRepository.ts                | 12 ++++++++++++
 4 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/src/events/gameMaster/assetManager/characterHair/delete.ts b/src/events/gameMaster/assetManager/characterHair/delete.ts
index 75f5b83..405a4ee 100644
--- a/src/events/gameMaster/assetManager/characterHair/delete.ts
+++ b/src/events/gameMaster/assetManager/characterHair/delete.ts
@@ -6,7 +6,7 @@ interface IPayload {
   id: UUID
 }
 
-export default class characterHairDeleteEvent extends BaseEvent {
+export default class CharacterHairDeleteEvent extends BaseEvent {
   public listen(): void {
     this.socket.on('gm:characterHair:remove', this.handleEvent.bind(this))
   }
@@ -15,13 +15,16 @@ export default class characterHairDeleteEvent extends BaseEvent {
     try {
       if (!(await this.isCharacterGM())) return
 
-      const characterHair = await CharacterHairRepository.getById(data.id)
-      await (await CharacterHairRepository.getById(data.id))?.delete()
+      const characterHairRepository = new CharacterHairRepository()
+      const characterHair = await characterHairRepository.getById(data.id)
+      if (!characterHair) return callback(false)
+
+      await characterHair.delete()
 
       return callback(true)
     } catch (error) {
-      this.logger.error(`Error deleting character type ${data.id}: ${error instanceof Error ? error.message : String(error)}`)
-      callback(false)
+      this.logger.error(`Error deleting character hair ${data.id}: ${error instanceof Error ? error.message : String(error)}`)
+      return callback(false)
     }
   }
 }
diff --git a/src/events/gameMaster/assetManager/item/create.ts b/src/events/gameMaster/assetManager/item/create.ts
index ec1926e..90118fd 100644
--- a/src/events/gameMaster/assetManager/item/create.ts
+++ b/src/events/gameMaster/assetManager/item/create.ts
@@ -1,5 +1,7 @@
 import { BaseEvent } from '#application/base/baseEvent'
+import { ItemRarity, ItemType } from '#application/enums'
 import { Item } from '#entities/item'
+import SpriteRepository from '#repositories/spriteRepository'
 
 export default class ItemCreateEvent extends BaseEvent {
   public listen(): void {
@@ -10,8 +12,12 @@ export default class ItemCreateEvent extends BaseEvent {
     try {
       if (!(await this.isCharacterGM())) return
 
+      const spriteRepository = new SpriteRepository()
+      const sprite = await spriteRepository.getFirst()
+      if (!sprite) return callback(false)
+
       const newItem = new Item()
-      await newItem.setName('New Item').setItemType('WEAPON').setStackable(false).setRarity('COMMON').setSprite(null).save()
+      await newItem.setName('New Item').setItemType(ItemType.WEAPON).setStackable(false).setRarity(ItemRarity.COMMON).setSprite(sprite).save()
 
       return callback(true, newItem)
     } catch (error) {
diff --git a/src/managers/userManager.ts b/src/managers/userManager.ts
index d670a27..946d43b 100644
--- a/src/managers/userManager.ts
+++ b/src/managers/userManager.ts
@@ -1,6 +1,5 @@
-import { User } from '@prisma/client'
-
 import Logger, { LoggerType } from '#application/logger'
+import { User } from '#entities/user'
 
 type TLoggedInUsers = {
   users: User[]
diff --git a/src/repositories/spriteRepository.ts b/src/repositories/spriteRepository.ts
index a686e0b..8da8294 100644
--- a/src/repositories/spriteRepository.ts
+++ b/src/repositories/spriteRepository.ts
@@ -23,6 +23,18 @@ class SpriteRepository extends BaseRepository {
       return []
     }
   }
+
+  async getFirst(populate?: any): Promise<Sprite | null> {
+    try {
+      const repository = this.getEntityManager().getRepository(Sprite)
+      const result = await repository.findOne({ id: { $exists: true } }, { populate })
+      if (result) result.setEntityManager(this.getEntityManager())
+
+      return result
+    } catch (error: any) {
+      return null
+    }
+  }
 }
 
 export default SpriteRepository