78 lines
2.2 KiB
TypeScript
78 lines
2.2 KiB
TypeScript
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<Zone | null> {
|
|
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<Zone[]> {
|
|
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<ZoneEventTile[]> {
|
|
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<ZoneEventTile | null> {
|
|
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<ZoneObject[]> {
|
|
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()
|