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' class ZoneRepository extends BaseRepository { async getFirst(): Promise { try { const repository = this.em.getRepository(Zone) return await repository.findOne({ id: { $exists: true } }) } catch (error: any) { appLogger.error(`Failed to get first zone: ${error instanceof Error ? error.message : String(error)}`) return null } } async getAll(): Promise { try { const repository = this.em.getRepository(Zone) return await repository.findAll() } catch (error: any) { appLogger.error(`Failed to get all zone: ${error.message}`) return [] } } async getById(id: number) { try { 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 } } async getEventTiles(id: number): Promise { try { 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}`) return [] } } async getFirstEventTile(zoneId: number, positionX: number, positionY: number): Promise { try { 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}`) return null } } async getZoneObjects(id: number): Promise { try { const repository = this.em.getRepository(ZoneObject) return await repository.find({ zone: id }) } catch (error: any) { appLogger.error(`Failed to get zone objects: ${error.message}`) return [] } } } export default new ZoneRepository()