/** * In-Memory Mission Repository * * Adapter: Implements MissionRepository using a Map. * Purpose: Testing, development, CI/CD pipelines. * NOT for production. */ import { Mission, MissionId, SessionId, } from '@landvex/domain'; import { MissionRepository } from '../repositories/repository-interfaces'; export class InMemoryMissionRepository implements MissionRepository { private missions = new Map(); async save(mission: Mission): Promise { this.missions.set(mission.id, mission); } async findById(id: MissionId): Promise { return this.missions.get(id) ?? null; } async findBySession(sessionId: SessionId): Promise { return Array.from(this.missions.values()) .filter(m => m.sessionId === sessionId) .sort((a, b) => a.sequenceNumber - b.sequenceNumber); } async findActive(): Promise { return Array.from(this.missions.values()) .filter(m => m.status === 'created' || m.status === 'uploading' || m.status === 'processing'); } clear(): void { this.missions.clear(); } count(): number { return this.missions.size; } }