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()