From d70e25207b19967f5b866b779d9716907b2b5311 Mon Sep 17 00:00:00 2001
From: Dennis Postma <dennis@directonline.io>
Date: Wed, 25 Dec 2024 14:09:46 +0100
Subject: [PATCH] All repositories use MikroORM now

---
 src/repositories/worldRepository.ts         | 15 +++---
 src/repositories/zoneEventTileRepository.ts | 25 ++++-----
 src/repositories/zoneRepository.ts          | 59 +++++++--------------
 3 files changed, 37 insertions(+), 62 deletions(-)

diff --git a/src/repositories/worldRepository.ts b/src/repositories/worldRepository.ts
index 02535bb..6791953 100644
--- a/src/repositories/worldRepository.ts
+++ b/src/repositories/worldRepository.ts
@@ -1,17 +1,14 @@
-import prisma from '#utilities/prisma' // Import the global Prisma instance
-import { World } from '@prisma/client'
 import { gameLogger } from '#utilities/logger'
+import { BaseRepository } from '#repositories/baseRepository'
+import { World } from '#entities/world'
 
-class WorldRepository {
-  async getFirst(): Promise<World | null> {
+class WorldRepository extends BaseRepository {
+  async getFirst(): Promise<any> {
     try {
-      return await prisma.world.findFirst({
-        orderBy: { date: 'desc' }
-      })
+      const repository = this.em.getRepository(World)
+      return await repository.findOne({})
     } catch (error: any) {
-      // Handle error
       gameLogger.error(`Failed to get first world: ${error instanceof Error ? error.message : String(error)}`)
-      return null
     }
   }
 }
diff --git a/src/repositories/zoneEventTileRepository.ts b/src/repositories/zoneEventTileRepository.ts
index 5356e21..c6dca0d 100644
--- a/src/repositories/zoneEventTileRepository.ts
+++ b/src/repositories/zoneEventTileRepository.ts
@@ -1,14 +1,13 @@
-import { ZoneEventTile } from '@prisma/client'
-import prisma from '#utilities/prisma'
 import { appLogger } from '#utilities/logger'
+import { BaseRepository } from '#repositories/baseRepository'
+import { ZoneEventTile } from '#entities/zoneEventTile'
 
-class ZoneEventTileRepository {
+class ZoneEventTileRepository extends BaseRepository {
   async getAll(id: number): Promise<ZoneEventTile[]> {
     try {
-      return await prisma.zoneEventTile.findMany({
-        where: {
-          zoneId: id
-        }
+      const repository = this.em.getRepository(ZoneEventTile)
+      return await repository.find({
+        zone: id
       })
     } catch (error: any) {
       appLogger.error(`Failed to get zone event tiles: ${error.message}`)
@@ -18,13 +17,11 @@ class ZoneEventTileRepository {
 
   async getEventTileByZoneIdAndPosition(zoneId: number, positionX: number, positionY: number) {
     try {
-      return await prisma.zoneEventTile.findFirst({
-        where: {
-          zoneId: zoneId,
-          positionX: positionX,
-          positionY: positionY
-        },
-        include: { teleport: true }
+      const repository = this.em.getRepository(ZoneEventTile)
+      return await repository.findOne({
+        zone: zoneId,
+        positionX: positionX,
+        positionY: positionY
       })
     } catch (error: any) {
       appLogger.error(`Failed to get zone event tile: ${error.message}`)
diff --git a/src/repositories/zoneRepository.ts b/src/repositories/zoneRepository.ts
index cf76ec5..ffcd717 100644
--- a/src/repositories/zoneRepository.ts
+++ b/src/repositories/zoneRepository.ts
@@ -1,12 +1,14 @@
-import { Zone, ZoneEventTile, ZoneEventTileType, ZoneObject } from '@prisma/client'
-import prisma from '#utilities/prisma'
-import { ZoneEventTileWithTeleport } from '#utilities/types'
 import { appLogger } from '#utilities/logger'
+import { BaseRepository } from '#repositories/baseRepository'
+import { ZoneEventTile } from '#entities/zoneEventTile'
+import { ZoneObject } from '#entities/zoneObject'
+import { Zone } from '#entities/zone'
 
-class ZoneRepository {
+class ZoneRepository extends BaseRepository {
   async getAll(): Promise<Zone[]> {
     try {
-      return await prisma.zone.findMany()
+      const repository = this.em.getRepository(Zone)
+      return await repository.findAll()
     } catch (error: any) {
       appLogger.error(`Failed to get all zone: ${error.message}`)
       return []
@@ -15,25 +17,8 @@ class ZoneRepository {
 
   async getById(id: number) {
     try {
-      return await prisma.zone.findUnique({
-        where: {
-          id: id
-        },
-        include: {
-          zoneEventTiles: {
-            include: {
-              zone: true,
-              teleport: true
-            }
-          },
-          zoneObjects: {
-            include: {
-              object: true
-            }
-          },
-          zoneEffects: true
-        }
-      })
+      const repository = this.em.getRepository(Zone)
+      return await repository.findOne({ id })
     } catch (error: any) {
       appLogger.error(`Failed to get zone by id: ${error.message}`)
       return null
@@ -42,10 +27,9 @@ class ZoneRepository {
 
   async getEventTiles(id: number): Promise<ZoneEventTile[]> {
     try {
-      return await prisma.zoneEventTile.findMany({
-        where: {
-          zoneId: id
-        }
+      const repository = this.em.getRepository(ZoneEventTile)
+      return await repository.find({
+        zone: id
       })
     } catch (error: any) {
       appLogger.error(`Failed to get zone event tiles: ${error.message}`)
@@ -55,13 +39,11 @@ class ZoneRepository {
 
   async getFirstEventTile(zoneId: number, positionX: number, positionY: number): Promise<ZoneEventTile | null> {
     try {
-      return await prisma.zoneEventTile.findFirst({
-        where: {
-          zoneId: zoneId,
-          positionX: positionX,
-          positionY: positionY
-        },
-        include: { teleport: true }
+      const repository = this.em.getRepository(ZoneEventTile)
+      return await repository.findOne({
+        zone: zoneId,
+        positionX: positionX,
+        positionY: positionY
       })
     } catch (error: any) {
       appLogger.error(`Failed to get zone event tile: ${error.message}`)
@@ -71,10 +53,9 @@ class ZoneRepository {
 
   async getZoneObjects(id: number): Promise<ZoneObject[]> {
     try {
-      return await prisma.zoneObject.findMany({
-        where: {
-          zoneId: id
-        }
+      const repository = this.em.getRepository(ZoneObject)
+      return await repository.find({
+        zone: id
       })
     } catch (error: any) {
       appLogger.error(`Failed to get zone objects: ${error.message}`)