From 2e267a36aa263ec47d070ecf96d359e428454587 Mon Sep 17 00:00:00 2001 From: Colin Kallemein Date: Sun, 17 Nov 2024 19:48:00 +0100 Subject: [PATCH] #237 - Changed Prisma find calls to repos --- src/models/loadedZone.ts | 4 +-- src/repositories/zoneEventTileRepository.ts | 37 +++++++++++++++++++++ src/repositories/zoneRepository.ts | 15 +++++---- src/socketEvents/zone/characterMove.ts | 10 ++---- 4 files changed, 49 insertions(+), 17 deletions(-) create mode 100644 src/repositories/zoneEventTileRepository.ts diff --git a/src/models/loadedZone.ts b/src/models/loadedZone.ts index 2f72add..2819d64 100644 --- a/src/models/loadedZone.ts +++ b/src/models/loadedZone.ts @@ -1,5 +1,5 @@ import { Character, Zone } from '@prisma/client' -import zoneRepository from '../repositories/zoneRepository' +import zoneEventTileRepository from '../repositories/zoneEventTileRepository' import ZoneCharacter from './zoneCharacter' class LoadedZone { @@ -38,7 +38,7 @@ class LoadedZone { public async getGrid(): Promise { let grid: number[][] = Array.from({ length: this.zone.height }, () => Array.from({ length: this.zone.width }, () => 0)) - const eventTiles = await zoneRepository.getEventTiles(this.zone.id) + const eventTiles = await zoneEventTileRepository.getAll(this.zone.id) // Set the grid values based on the event tiles, these are strings eventTiles.forEach((eventTile) => { diff --git a/src/repositories/zoneEventTileRepository.ts b/src/repositories/zoneEventTileRepository.ts new file mode 100644 index 0000000..42e4945 --- /dev/null +++ b/src/repositories/zoneEventTileRepository.ts @@ -0,0 +1,37 @@ +import { ZoneEventTile } from '@prisma/client' +import prisma from '../utilities/prisma' +import { appLogger } from '../utilities/logger' + +class ZoneEventTileRepository { + + async getAll(id: number): Promise { + try { + return await prisma.zoneEventTile.findMany({ + where: { + zoneId: id + } + }) + } catch (error: any) { + appLogger.error(`Failed to get zone event tiles: ${error.message}`) + return [] + } + } + + async getEventTileByZoneIdAndPosition(zoneId: number, positionX: number, positionY: number) { + try { + return await prisma.zoneEventTile.findFirst({ + where: { + zoneId: zoneId, + positionX: positionX, + positionY: positionY + }, + include: { teleport: true } + }) + } catch (error: any) { + appLogger.error(`Failed to get zone event tile: ${error.message}`) + return null + } + } +} + +export default new ZoneEventTileRepository() diff --git a/src/repositories/zoneRepository.ts b/src/repositories/zoneRepository.ts index 22da933..53aedfe 100644 --- a/src/repositories/zoneRepository.ts +++ b/src/repositories/zoneRepository.ts @@ -53,18 +53,19 @@ class ZoneRepository { } } - async getEventTeleportTiles(id: number): Promise { + async getFirstEventTile(zoneId: number, positionX: number, positionY: number): Promise { try { - return (await prisma.zoneEventTile.findMany({ + return await prisma.zoneEventTile.findFirst({ where: { - zoneId: id, - type: ZoneEventTileType.TELEPORT + zoneId: zoneId, + positionX: positionX, + positionY: positionY }, include: { teleport: true } - })) as unknown as ZoneEventTileWithTeleport[] + }) } catch (error: any) { - appLogger.error(`Failed to get zone event tiles: ${error.message}`) - return [] + appLogger.error(`Failed to get zone event tile: ${error.message}`) + return null } } diff --git a/src/socketEvents/zone/characterMove.ts b/src/socketEvents/zone/characterMove.ts index a92ce49..a0d337b 100644 --- a/src/socketEvents/zone/characterMove.ts +++ b/src/socketEvents/zone/characterMove.ts @@ -7,6 +7,7 @@ import Rotation from '../../utilities/character/rotation' import { gameLogger } from '../../utilities/logger' import ZoneManager from '../../managers/zoneManager' import ZoneCharacter from '../../models/zoneCharacter' +import zoneEventTileRepository from '../../repositories/zoneEventTileRepository' export default class CharacterMove { private readonly characterMoveService = new CharacterMoveService() @@ -58,14 +59,7 @@ export default class CharacterMove { const [start, end] = [path[i], path[i + 1]] character.rotation = Rotation.calculate(start.x, start.y, end.x, end.y) - const zoneEventTile = await prisma.zoneEventTile.findFirst({ - where: { - zoneId: character.zoneId, - positionX: Math.floor(end.x), - positionY: Math.floor(end.y) - }, - include: { teleport: true } - }) + const zoneEventTile = await zoneEventTileRepository.getEventTileByZoneIdAndPosition(character.zoneId, Math.floor(end.x), Math.floor(end.y)) if (zoneEventTile?.type === 'BLOCK') break if (zoneEventTile?.type === 'TELEPORT' && zoneEventTile.teleport) {