import { FilterValue } from '@mikro-orm/core' import { BaseRepository } from '#application/base/baseRepository' import { UUID } from '#application/types' import { unduplicateArray } from '#application/utilities' import { Tile } from '#entities/tile' import { Zone } from '#entities/zone' import ZoneService from '#services/zoneService' class TileRepository extends BaseRepository { async getById(id: UUID) { try { const repository = this.em.getRepository(Tile) return await repository.findOne({ id }) } catch (error: any) { return null } } async getByIds(ids: UUID[]) { try { const repository = this.em.getRepository(Tile) return await repository.find({ id: ids }) } catch (error: any) { return [] } } async getAll() { try { const repository = this.em.getRepository(Tile) return await repository.findAll() } catch (error: any) { return [] } } async getByZoneId(zoneId: UUID) { try { const repository = this.em.getRepository(Zone) const tileRepository = this.em.getRepository(Tile) const zone = await repository.findOne({ id: zoneId }) if (!zone) return [] const zoneTileArray = unduplicateArray(ZoneService.flattenZoneArray(JSON.parse(JSON.stringify(zone.tiles)))) return await tileRepository.find({ id: zoneTileArray }) } catch (error: any) { return [] } } } export default new TileRepository()