import { BaseRepository } from '#application/base/baseRepository' import { UUID } from '#application/types' import { Map } from '#entities/map' import { MapEventTile } from '#entities/mapEventTile' import { MapObject } from '#entities/mapObject' class MapRepository extends BaseRepository { async getFirst(): Promise { try { const repository = this.em.getRepository(Map) return await repository.findOne({ id: { $exists: true } }) } catch (error: any) { this.logger.error(`Failed to get first map: ${error instanceof Error ? error.message : String(error)}`) return null } } async getAll(): Promise { try { const repository = this.em.getRepository(Map) return await repository.findAll() } catch (error: any) { this.logger.error(`Failed to get all map: ${error.message}`) return [] } } async getById(id: UUID) { try { const repository = this.em.getRepository(Map) return await repository.findOne({ id }) } catch (error: any) { this.logger.error(`Failed to get map by id: ${error.message}`) return null } } async getEventTiles(id: UUID): Promise { try { const repository = this.em.getRepository(MapEventTile) return await repository.find({ map: id }) } catch (error: any) { this.logger.error(`Failed to get map event tiles: ${error.message}`) return [] } } async getFirstEventTile(mapId: UUID, positionX: number, positionY: number): Promise { try { const repository = this.em.getRepository(MapEventTile) return await repository.findOne({ map: mapId, positionX: positionX, positionY: positionY }) } catch (error: any) { this.logger.error(`Failed to get map event tile: ${error.message}`) return null } } async getMapObjects(id: UUID): Promise { try { const repository = this.em.getRepository(MapObject) return await repository.find({ map: id }) } catch (error: any) { this.logger.error(`Failed to get map objects: ${error.message}`) return [] } } } export default new MapRepository()