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