Files
boc/packages/infrastructure/src/adapters/in-memory-mission-repository.ts
T

46 lines
1.1 KiB
TypeScript
Raw Normal View History

/**
* 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<string, Mission>();
async save(mission: Mission): Promise<void> {
this.missions.set(mission.id, mission);
}
async findById(id: MissionId): Promise<Mission | null> {
return this.missions.get(id) ?? null;
}
async findBySession(sessionId: SessionId): Promise<Mission[]> {
return Array.from(this.missions.values())
.filter(m => m.sessionId === sessionId)
.sort((a, b) => a.sequenceNumber - b.sequenceNumber);
}
async findActive(): Promise<Mission[]> {
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;
}
}