import type { AllocationLike, AllocationReadModel, Assignment, DemandRequirement, } from "@nexus/shared"; function toDemandRequirement( allocation: TAllocation, ): DemandRequirement { return { ...allocation, kind: "demand", sourceAllocationId: allocation.entityId ?? allocation.id, resourceId: null, isPlaceholder: true, requestedHeadcount: allocation.headcount, unfilledHeadcount: allocation.headcount, }; } function toAssignment( allocation: TAllocation, ): Assignment { return { ...allocation, kind: "assignment", sourceAllocationId: allocation.entityId ?? allocation.id, resourceId: allocation.resourceId as string, isPlaceholder: false, }; } export function buildAllocationReadModel( allocations: TAllocation[], ): AllocationReadModel { const demands: DemandRequirement[] = []; const assignments: Assignment[] = []; for (const allocation of allocations) { if (allocation.isPlaceholder || allocation.resourceId === null) { demands.push(toDemandRequirement(allocation)); continue; } assignments.push(toAssignment(allocation)); } return { allocations, demands, assignments, }; }