forked from noxious/server
51 lines
1.4 KiB
TypeScript
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()
|