refactor(api): extract timeline project context procedures
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
import { getAnonymizationDirectory } from "../lib/anonymization.js";
|
||||
import {
|
||||
loadTimelineProjectContextDetailArtifacts,
|
||||
} from "./timeline-project-context-support.js";
|
||||
import {
|
||||
buildTimelineProjectContextDetailResponse,
|
||||
buildTimelineProjectContextResponse,
|
||||
} from "./timeline-project-context-response-support.js";
|
||||
import { loadTimelineProjectContext } from "./timeline-project-load-support.js";
|
||||
|
||||
type TimelineProjectContextProcedureDb =
|
||||
& Parameters<typeof getAnonymizationDirectory>[0]
|
||||
& Parameters<typeof loadTimelineProjectContext>[0]
|
||||
& Parameters<typeof loadTimelineProjectContextDetailArtifacts>[0];
|
||||
|
||||
export async function readTimelineProjectContextResponse(
|
||||
db: TimelineProjectContextProcedureDb,
|
||||
projectId: string,
|
||||
) {
|
||||
const {
|
||||
project,
|
||||
allocations,
|
||||
demands,
|
||||
assignments,
|
||||
allResourceAllocations,
|
||||
resourceIds,
|
||||
} = await loadTimelineProjectContext(db, projectId);
|
||||
const directory = await getAnonymizationDirectory(db);
|
||||
|
||||
return buildTimelineProjectContextResponse({
|
||||
project,
|
||||
allocations,
|
||||
demands,
|
||||
assignments,
|
||||
allResourceAllocations,
|
||||
resourceIds,
|
||||
directory,
|
||||
});
|
||||
}
|
||||
|
||||
export async function readTimelineProjectContextDetailResponse(
|
||||
db: TimelineProjectContextProcedureDb,
|
||||
input: {
|
||||
projectId: string;
|
||||
startDate?: string | undefined;
|
||||
endDate?: string | undefined;
|
||||
durationDays?: number | undefined;
|
||||
},
|
||||
) {
|
||||
const projectContext = await loadTimelineProjectContext(db, input.projectId);
|
||||
const directory = await getAnonymizationDirectory(db);
|
||||
const { period, holidayOverlays, assignmentConflicts } =
|
||||
await loadTimelineProjectContextDetailArtifacts(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,
|
||||
period,
|
||||
allocations: projectContext.allocations,
|
||||
demands: projectContext.demands,
|
||||
assignments: projectContext.assignments,
|
||||
allResourceAllocations: projectContext.allResourceAllocations,
|
||||
resourceIds: projectContext.resourceIds,
|
||||
assignmentConflicts,
|
||||
holidayOverlays,
|
||||
directory,
|
||||
});
|
||||
}
|
||||
@@ -1,15 +1,6 @@
|
||||
import { listAssignmentBookings } from "@capakraken/application";
|
||||
import { computeBudgetStatus } from "@capakraken/engine";
|
||||
import { getAnonymizationDirectory } from "../lib/anonymization.js";
|
||||
import {
|
||||
loadTimelineProjectContextDetailArtifacts,
|
||||
} from "./timeline-project-context-support.js";
|
||||
import {
|
||||
buildTimelineProjectContextDetailResponse,
|
||||
buildTimelineProjectContextResponse,
|
||||
} from "./timeline-project-context-response-support.js";
|
||||
import {
|
||||
loadTimelineProjectContext,
|
||||
previewTimelineProjectShift,
|
||||
} from "./timeline-project-load-support.js";
|
||||
import {
|
||||
@@ -24,77 +15,10 @@ import {
|
||||
} from "./timeline-project-query-support.js";
|
||||
|
||||
type TimelineProjectProcedureDb =
|
||||
& Parameters<typeof getAnonymizationDirectory>[0]
|
||||
& Parameters<typeof loadTimelineProjectContext>[0]
|
||||
& Parameters<typeof loadTimelineProjectContextDetailArtifacts>[0]
|
||||
& Parameters<typeof previewTimelineProjectShift>[0]
|
||||
& Parameters<typeof findTimelineProjectOrThrow>[0]
|
||||
& Parameters<typeof listAssignmentBookings>[0];
|
||||
|
||||
export async function readTimelineProjectContextResponse(
|
||||
db: TimelineProjectProcedureDb,
|
||||
projectId: string,
|
||||
) {
|
||||
const {
|
||||
project,
|
||||
allocations,
|
||||
demands,
|
||||
assignments,
|
||||
allResourceAllocations,
|
||||
resourceIds,
|
||||
} = await loadTimelineProjectContext(db, projectId);
|
||||
const directory = await getAnonymizationDirectory(db);
|
||||
|
||||
return buildTimelineProjectContextResponse({
|
||||
project,
|
||||
allocations,
|
||||
demands,
|
||||
assignments,
|
||||
allResourceAllocations,
|
||||
resourceIds,
|
||||
directory,
|
||||
});
|
||||
}
|
||||
|
||||
export async function readTimelineProjectContextDetailResponse(
|
||||
db: TimelineProjectProcedureDb,
|
||||
input: {
|
||||
projectId: string;
|
||||
startDate?: string | undefined;
|
||||
endDate?: string | undefined;
|
||||
durationDays?: number | undefined;
|
||||
},
|
||||
) {
|
||||
const projectContext = await loadTimelineProjectContext(db, input.projectId);
|
||||
const directory = await getAnonymizationDirectory(db);
|
||||
const { period, holidayOverlays, assignmentConflicts } =
|
||||
await loadTimelineProjectContextDetailArtifacts(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,
|
||||
period,
|
||||
allocations: projectContext.allocations,
|
||||
demands: projectContext.demands,
|
||||
assignments: projectContext.assignments,
|
||||
allResourceAllocations: projectContext.allResourceAllocations,
|
||||
resourceIds: projectContext.resourceIds,
|
||||
assignmentConflicts,
|
||||
holidayOverlays,
|
||||
directory,
|
||||
});
|
||||
}
|
||||
|
||||
export async function readTimelineProjectShiftPreviewDetail(
|
||||
db: TimelineProjectProcedureDb,
|
||||
input: {
|
||||
|
||||
@@ -6,9 +6,11 @@ import {
|
||||
TimelineProjectContextDetailSchema,
|
||||
} from "./timeline-read-shared.js";
|
||||
import {
|
||||
readTimelineProjectBudgetStatusResponse,
|
||||
readTimelineProjectContextDetailResponse,
|
||||
readTimelineProjectContextResponse,
|
||||
} from "./timeline-project-context-procedure-support.js";
|
||||
import {
|
||||
readTimelineProjectBudgetStatusResponse,
|
||||
readTimelineProjectShiftPreviewDetail,
|
||||
} from "./timeline-project-procedure-support.js";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user