forked from noxious/server
59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
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<any> {
|
|
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<any> {
|
|
try {
|
|
const repository = this.em.getRepository(Tile)
|
|
return await repository.find({
|
|
id: ids
|
|
})
|
|
} catch (error: any) {
|
|
return null
|
|
}
|
|
}
|
|
|
|
async getAll(): Promise<any> {
|
|
try {
|
|
const repository = this.em.getRepository(Tile)
|
|
return await repository.findAll()
|
|
} catch (error: any) {
|
|
return null
|
|
}
|
|
}
|
|
|
|
async getByZoneId(zoneId: number): Promise<any> {
|
|
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()
|