1
0
forked from noxious/server
noxious_server/src/managers/zoneManager.ts

51 lines
1.4 KiB
TypeScript

import { Zone } from '@prisma/client'
import ZoneRepository from '../repositories/zoneRepository'
import ZoneService from '../services/zoneService'
import logger from '../utilities/logger'
import LoadedZone from '../models/loadedZone'
class ZoneManager {
private loadedZones: LoadedZone[] = []
// Method to initialize zoneEditor manager
public async boot() {
if (!(await ZoneRepository.getById(1))) {
const zoneService = new ZoneService()
await zoneService.createDemoZone()
}
const zones = await ZoneRepository.getAll()
for (const zone of zones) {
await this.loadZone(zone)
}
logger.info('Zone manager loaded')
}
// Method to handle individual zoneEditor loading
public async loadZone(zone: Zone) {
const loadedZone = new LoadedZone(zone)
this.loadedZones.push(loadedZone)
logger.info(`Zone ID ${zone.id} loaded`)
}
// Method to handle individual zoneEditor unloading
public unloadZone(zoneId: number) {
this.loadedZones = this.loadedZones.filter((loadedZone) => loadedZone.getZone().id !== zoneId)
logger.info(`Zone ID ${zoneId} unloaded`)
}
// Getter for loaded zones
public getLoadedZones(): LoadedZone[] {
return this.loadedZones
}
// Getter for zone by id
public getZoneById(zoneId: number): LoadedZone | undefined {
return this.loadedZones.find((loadedZone) => loadedZone.getZone().id === zoneId)
}
}
export default new ZoneManager()