refactor(api): extract timeline project detail artifact loader

This commit is contained in:
2026-03-31 15:44:13 +02:00
parent 231d3f3124
commit 49bf3f3214
3 changed files with 234 additions and 30 deletions
@@ -11,13 +11,11 @@ import {
buildTimelineBudgetStatusResponse,
buildTimelineProjectContextDetailResponse,
buildTimelineProjectContextResponse,
buildTimelineProjectAssignmentConflicts,
loadTimelineProjectContextDetailArtifacts,
buildTimelineShiftValidationBookings,
buildTimelineShiftPreviewDetailResponse,
resolveTimelineProjectContextPeriod,
} from "./timeline-project-context-support.js";
import { buildTimelineShiftPlan } from "./timeline-shift-planning.js";
import { loadTimelineHolidayOverlays, formatHolidayOverlays } from "./timeline-holiday-read.js";
import { getAssignmentResourceIds, ShiftDbClient } from "./timeline-read-shared.js";
import { buildTimelineProjectShiftValidation } from "./timeline-shift-support.js";
@@ -163,30 +161,20 @@ export const timelineProjectReadProcedures = {
.query(async ({ ctx, input }) => {
const projectContext = await loadTimelineProjectContext(ctx.db, input.projectId);
const directory = await getAnonymizationDirectory(ctx.db);
const period = resolveTimelineProjectContextPeriod({
requestedStartDate: input.startDate,
requestedEndDate: input.endDate,
durationDays: input.durationDays,
projectStartDate: projectContext.project.startDate,
projectEndDate: projectContext.project.endDate,
firstAssignmentStartDate: projectContext.assignments[0]?.startDate,
firstDemandStartDate: projectContext.demands[0]?.startDate,
});
const holidayOverlays = projectContext.resourceIds.length > 0
? await loadTimelineHolidayOverlays(ctx.db, {
startDate: period.startDate,
endDate: period.endDate,
resourceIds: projectContext.resourceIds,
projectIds: [input.projectId],
})
: [];
const formattedHolidayOverlays = formatHolidayOverlays(holidayOverlays);
const assignmentConflicts = buildTimelineProjectAssignmentConflicts({
projectId: input.projectId,
assignments: projectContext.assignments,
allResourceAllocations: projectContext.allResourceAllocations,
});
const { period, holidayOverlays, assignmentConflicts } =
await loadTimelineProjectContextDetailArtifacts(ctx.db, {
projectId: input.projectId,
requestedStartDate: input.startDate,
requestedEndDate: input.endDate,
durationDays: input.durationDays,
projectStartDate: projectContext.project.startDate,
projectEndDate: projectContext.project.endDate,
firstAssignmentStartDate: projectContext.assignments[0]?.startDate,
firstDemandStartDate: projectContext.demands[0]?.startDate,
assignments: projectContext.assignments,
allResourceAllocations: projectContext.allResourceAllocations,
resourceIds: projectContext.resourceIds,
});
return buildTimelineProjectContextDetailResponse({
project: projectContext.project,
@@ -197,7 +185,7 @@ export const timelineProjectReadProcedures = {
allResourceAllocations: projectContext.allResourceAllocations,
resourceIds: projectContext.resourceIds,
assignmentConflicts,
holidayOverlays: formattedHolidayOverlays,
holidayOverlays,
directory,
});
}),