From b2c8d98b25fbd916eda60ea038e8fede86dd18d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hartmut=20N=C3=B6renberg?= Date: Thu, 9 Apr 2026 14:44:17 +0200 Subject: [PATCH] refactor(api): reorganise allocation router into allocation/ subdirectory Moves read, assignment-procedures, assignment-mutations, and demand procedures into allocation/ so the domain boundary is discoverable without grep. Co-Authored-By: Claude Sonnet 4.6 --- packages/api/src/__tests__/allocation-router.test.ts | 2 +- packages/api/src/router/allocation.ts | 10 ---------- .../assignment-effects.ts} | 4 ++-- .../assignment-mutations.ts} | 6 +++--- .../assignment-procedures.ts} | 8 ++++---- .../availability.ts} | 4 ++-- .../demand.ts} | 12 ++++++------ .../{allocation-effects.ts => allocation/effects.ts} | 12 ++++++------ packages/api/src/router/allocation/index.ts | 10 ++++++++++ .../read.ts} | 12 ++++++------ .../{allocation-shared.ts => allocation/shared.ts} | 2 +- .../{allocation-support.ts => allocation/support.ts} | 6 +++--- packages/api/src/router/assistant-tools.ts | 2 +- packages/api/src/router/index.ts | 2 +- 14 files changed, 46 insertions(+), 46 deletions(-) delete mode 100644 packages/api/src/router/allocation.ts rename packages/api/src/router/{allocation-assignment-effects.ts => allocation/assignment-effects.ts} (97%) rename packages/api/src/router/{allocation-assignment-mutations.ts => allocation/assignment-mutations.ts} (98%) rename packages/api/src/router/{allocation-assignment-procedures.ts => allocation/assignment-procedures.ts} (97%) rename packages/api/src/router/{allocation-availability.ts => allocation/availability.ts} (98%) rename packages/api/src/router/{allocation-demand-procedures.ts => allocation/demand.ts} (95%) rename packages/api/src/router/{allocation-effects.ts => allocation/effects.ts} (92%) create mode 100644 packages/api/src/router/allocation/index.ts rename packages/api/src/router/{allocation-read-procedures.ts => allocation/read.ts} (94%) rename packages/api/src/router/{allocation-shared.ts => allocation/shared.ts} (98%) rename packages/api/src/router/{allocation-support.ts => allocation/support.ts} (97%) diff --git a/packages/api/src/__tests__/allocation-router.test.ts b/packages/api/src/__tests__/allocation-router.test.ts index b541b4d..6c3b694 100644 --- a/packages/api/src/__tests__/allocation-router.test.ts +++ b/packages/api/src/__tests__/allocation-router.test.ts @@ -1,6 +1,6 @@ import { AllocationStatus, PermissionKey, SystemRole } from "@capakraken/shared"; import { beforeEach, describe, expect, it, vi } from "vitest"; -import { allocationRouter } from "../router/allocation.js"; +import { allocationRouter } from "../router/allocation/index.js"; import { emitAllocationCreated, emitAllocationDeleted, emitNotificationCreated } from "../sse/event-bus.js"; import { checkBudgetThresholds } from "../lib/budget-alerts.js"; import { generateAutoSuggestions } from "../lib/auto-staffing.js"; diff --git a/packages/api/src/router/allocation.ts b/packages/api/src/router/allocation.ts deleted file mode 100644 index d3f361b..0000000 --- a/packages/api/src/router/allocation.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { allocationAssignmentProcedures } from "./allocation-assignment-procedures.js"; -import { allocationDemandProcedures } from "./allocation-demand-procedures.js"; -import { allocationReadProcedures } from "./allocation-read-procedures.js"; -import { createTRPCRouter } from "../trpc.js"; - -export const allocationRouter = createTRPCRouter({ - ...allocationReadProcedures, - ...allocationDemandProcedures, - ...allocationAssignmentProcedures, -}); diff --git a/packages/api/src/router/allocation-assignment-effects.ts b/packages/api/src/router/allocation/assignment-effects.ts similarity index 97% rename from packages/api/src/router/allocation-assignment-effects.ts rename to packages/api/src/router/allocation/assignment-effects.ts index a2d75ea..b595bf3 100644 --- a/packages/api/src/router/allocation-assignment-effects.ts +++ b/packages/api/src/router/allocation/assignment-effects.ts @@ -2,12 +2,12 @@ import { emitAllocationCreated, emitAllocationDeleted, emitAllocationUpdated, -} from "../sse/event-bus.js"; +} from "../../sse/event-bus.js"; import { checkBudgetThresholdsInBackground, dispatchAllocationWebhookInBackground, invalidateDashboardCacheInBackground, -} from "./allocation-effects.js"; +} from "./effects.js"; type AllocationMutationDb = Parameters[0]; diff --git a/packages/api/src/router/allocation-assignment-mutations.ts b/packages/api/src/router/allocation/assignment-mutations.ts similarity index 98% rename from packages/api/src/router/allocation-assignment-mutations.ts rename to packages/api/src/router/allocation/assignment-mutations.ts index 96c6d06..c92bbca 100644 --- a/packages/api/src/router/allocation-assignment-mutations.ts +++ b/packages/api/src/router/allocation/assignment-mutations.ts @@ -16,13 +16,13 @@ import { } from "@capakraken/shared"; import { TRPCError } from "@trpc/server"; import { z } from "zod"; -import { findUniqueOrThrow } from "../db/helpers.js"; -import { ASSIGNMENT_INCLUDE, toIsoDate } from "./allocation-shared.js"; +import { findUniqueOrThrow } from "../../db/helpers.js"; +import { ASSIGNMENT_INCLUDE, toIsoDate } from "./shared.js"; import { findAllocationEntryOrNull, toAssignmentUpdateInput, toDemandRequirementUpdateInput, -} from "./allocation-support.js"; +} from "./support.js"; type AllocationMutationDb = Pick< PrismaClient, diff --git a/packages/api/src/router/allocation-assignment-procedures.ts b/packages/api/src/router/allocation/assignment-procedures.ts similarity index 97% rename from packages/api/src/router/allocation-assignment-procedures.ts rename to packages/api/src/router/allocation/assignment-procedures.ts index b8d298b..ccf10b4 100644 --- a/packages/api/src/router/allocation-assignment-procedures.ts +++ b/packages/api/src/router/allocation/assignment-procedures.ts @@ -11,14 +11,14 @@ import { UpdateAssignmentSchema, } from "@capakraken/shared"; import { z } from "zod"; -import { findUniqueOrThrow } from "../db/helpers.js"; +import { findUniqueOrThrow } from "../../db/helpers.js"; import { publishAllocationCreated, publishAllocationDeleted, publishAllocationUpdated, publishBatchAllocationDeletes, publishBatchAllocationStatusUpdates, -} from "./allocation-assignment-effects.js"; +} from "./assignment-effects.js"; import { batchDeleteAllocationsWithAudit, batchUpdateAllocationStatusWithAudit, @@ -27,11 +27,11 @@ import { deleteAssignmentWithAudit, ensureAssignmentRecord, updateAllocationWithAudit, -} from "./allocation-assignment-mutations.js"; +} from "./assignment-mutations.js"; import { managerProcedure, requirePermission, -} from "../trpc.js"; +} from "../../trpc.js"; export const allocationAssignmentProcedures = { create: managerProcedure diff --git a/packages/api/src/router/allocation-availability.ts b/packages/api/src/router/allocation/availability.ts similarity index 98% rename from packages/api/src/router/allocation-availability.ts rename to packages/api/src/router/allocation/availability.ts index 42172d8..5939e55 100644 --- a/packages/api/src/router/allocation-availability.ts +++ b/packages/api/src/router/allocation/availability.ts @@ -6,8 +6,8 @@ import { calculateEffectiveDayAvailability, countEffectiveWorkingDays, loadResourceDailyAvailabilityContexts, -} from "../lib/resource-capacity.js"; -import { averagePerWorkingDay, round1, toIsoDate } from "./allocation-shared.js"; +} from "../../lib/resource-capacity.js"; +import { averagePerWorkingDay, round1, toIsoDate } from "./shared.js"; export async function buildResourceAvailabilityView( db: Pick, diff --git a/packages/api/src/router/allocation-demand-procedures.ts b/packages/api/src/router/allocation/demand.ts similarity index 95% rename from packages/api/src/router/allocation-demand-procedures.ts rename to packages/api/src/router/allocation/demand.ts index 32f9150..7412203 100644 --- a/packages/api/src/router/allocation-demand-procedures.ts +++ b/packages/api/src/router/allocation/demand.ts @@ -11,28 +11,28 @@ import { UpdateDemandRequirementSchema, } from "@capakraken/shared"; import { z } from "zod"; -import { findUniqueOrThrow } from "../db/helpers.js"; +import { findUniqueOrThrow } from "../../db/helpers.js"; import { emitAllocationCreated, emitAllocationDeleted, emitAllocationUpdated, -} from "../sse/event-bus.js"; +} from "../../sse/event-bus.js"; import { checkBudgetThresholdsInBackground, createDemandRequirementWithEffects, dispatchAllocationWebhookInBackground, fillDemandRequirementWithEffects, invalidateDashboardCacheInBackground, -} from "./allocation-effects.js"; -import { DEMAND_INCLUDE } from "./allocation-shared.js"; +} from "./effects.js"; +import { DEMAND_INCLUDE } from "./shared.js"; import { buildCreateDemandRequirementInput, getDemandRequirementByIdOrThrow, -} from "./allocation-support.js"; +} from "./support.js"; import { managerProcedure, requirePermission, -} from "../trpc.js"; +} from "../../trpc.js"; export const allocationDemandProcedures = { createDemandRequirement: managerProcedure diff --git a/packages/api/src/router/allocation-effects.ts b/packages/api/src/router/allocation/effects.ts similarity index 92% rename from packages/api/src/router/allocation-effects.ts rename to packages/api/src/router/allocation/effects.ts index 80803bd..da379ab 100644 --- a/packages/api/src/router/allocation-effects.ts +++ b/packages/api/src/router/allocation/effects.ts @@ -1,12 +1,12 @@ import { createDemandRequirement, fillDemandRequirement } from "@capakraken/application"; import { buildTaskAction, CreateDemandRequirementSchema, FillDemandRequirementSchema } from "@capakraken/shared"; import { z } from "zod"; -import { checkBudgetThresholds } from "../lib/budget-alerts.js"; -import { generateAutoSuggestions } from "../lib/auto-staffing.js"; -import { invalidateDashboardCache } from "../lib/cache.js"; -import { logger } from "../lib/logger.js"; -import { dispatchWebhooks } from "../lib/webhook-dispatcher.js"; -import { emitAllocationCreated, emitAllocationUpdated, emitNotificationCreated } from "../sse/event-bus.js"; +import { checkBudgetThresholds } from "../../lib/budget-alerts.js"; +import { generateAutoSuggestions } from "../../lib/auto-staffing.js"; +import { invalidateDashboardCache } from "../../lib/cache.js"; +import { logger } from "../../lib/logger.js"; +import { dispatchWebhooks } from "../../lib/webhook-dispatcher.js"; +import { emitAllocationCreated, emitAllocationUpdated, emitNotificationCreated } from "../../sse/event-bus.js"; export function runAllocationBackgroundEffect( effectName: string, diff --git a/packages/api/src/router/allocation/index.ts b/packages/api/src/router/allocation/index.ts new file mode 100644 index 0000000..1420747 --- /dev/null +++ b/packages/api/src/router/allocation/index.ts @@ -0,0 +1,10 @@ +import { allocationAssignmentProcedures } from "./assignment-procedures.js"; +import { allocationDemandProcedures } from "./demand.js"; +import { allocationReadProcedures } from "./read.js"; +import { createTRPCRouter } from "../../trpc.js"; + +export const allocationRouter = createTRPCRouter({ + ...allocationReadProcedures, + ...allocationDemandProcedures, + ...allocationAssignmentProcedures, +}); diff --git a/packages/api/src/router/allocation-read-procedures.ts b/packages/api/src/router/allocation/read.ts similarity index 94% rename from packages/api/src/router/allocation-read-procedures.ts rename to packages/api/src/router/allocation/read.ts index c378542..dd85e38 100644 --- a/packages/api/src/router/allocation-read-procedures.ts +++ b/packages/api/src/router/allocation/read.ts @@ -1,11 +1,11 @@ import { AllocationStatus } from "@capakraken/shared"; import { z } from "zod"; -import { findUniqueOrThrow } from "../db/helpers.js"; -import { anonymizeResource, getAnonymizationDirectory } from "../lib/anonymization.js"; -import { planningReadProcedure } from "../trpc.js"; -import { buildResourceAvailabilitySummary, buildResourceAvailabilityView } from "./allocation-availability.js"; -import { ASSIGNMENT_INCLUDE, DEMAND_INCLUDE } from "./allocation-shared.js"; -import { getDemandRequirementByIdOrThrow, loadAllocationReadModel, resolveAssignmentBySelection } from "./allocation-support.js"; +import { findUniqueOrThrow } from "../../db/helpers.js"; +import { anonymizeResource, getAnonymizationDirectory } from "../../lib/anonymization.js"; +import { planningReadProcedure } from "../../trpc.js"; +import { buildResourceAvailabilitySummary, buildResourceAvailabilityView } from "./availability.js"; +import { ASSIGNMENT_INCLUDE, DEMAND_INCLUDE } from "./shared.js"; +import { getDemandRequirementByIdOrThrow, loadAllocationReadModel, resolveAssignmentBySelection } from "./support.js"; export const allocationReadProcedures = { list: planningReadProcedure diff --git a/packages/api/src/router/allocation-shared.ts b/packages/api/src/router/allocation/shared.ts similarity index 98% rename from packages/api/src/router/allocation-shared.ts rename to packages/api/src/router/allocation/shared.ts index 89ff842..a775db5 100644 --- a/packages/api/src/router/allocation-shared.ts +++ b/packages/api/src/router/allocation/shared.ts @@ -1,6 +1,6 @@ import { AllocationStatus, UpdateAllocationSchema } from "@capakraken/shared"; import { z } from "zod"; -import { PROJECT_BRIEF_SELECT, RESOURCE_BRIEF_SELECT, ROLE_BRIEF_SELECT } from "../db/selects.js"; +import { PROJECT_BRIEF_SELECT, RESOURCE_BRIEF_SELECT, ROLE_BRIEF_SELECT } from "../../db/selects.js"; export const DEMAND_INCLUDE = { project: { select: PROJECT_BRIEF_SELECT }, diff --git a/packages/api/src/router/allocation-support.ts b/packages/api/src/router/allocation/support.ts similarity index 97% rename from packages/api/src/router/allocation-support.ts rename to packages/api/src/router/allocation/support.ts index 5c24a62..65e8b3e 100644 --- a/packages/api/src/router/allocation-support.ts +++ b/packages/api/src/router/allocation/support.ts @@ -2,9 +2,9 @@ import { buildSplitAllocationReadModel, loadAllocationEntry } from "@capakraken/ import { AllocationStatus, CreateDemandRequirementSchema } from "@capakraken/shared"; import { TRPCError } from "@trpc/server"; import { z } from "zod"; -import { findUniqueOrThrow } from "../db/helpers.js"; -import { anonymizeResource, getAnonymizationDirectory } from "../lib/anonymization.js"; -import { ASSIGNMENT_INCLUDE, type AllocationEntryUpdateInput, type AllocationListFilters, type AssignmentResolutionInput, type CreateDemandDraftInput, DEMAND_INCLUDE, toIsoDate } from "./allocation-shared.js"; +import { findUniqueOrThrow } from "../../db/helpers.js"; +import { anonymizeResource, getAnonymizationDirectory } from "../../lib/anonymization.js"; +import { ASSIGNMENT_INCLUDE, type AllocationEntryUpdateInput, type AllocationListFilters, type AssignmentResolutionInput, type CreateDemandDraftInput, DEMAND_INCLUDE, toIsoDate } from "./shared.js"; export function toDemandRequirementUpdateInput(input: AllocationEntryUpdateInput) { return { diff --git a/packages/api/src/router/assistant-tools.ts b/packages/api/src/router/assistant-tools.ts index f4567d5..4911abe 100644 --- a/packages/api/src/router/assistant-tools.ts +++ b/packages/api/src/router/assistant-tools.ts @@ -49,7 +49,7 @@ import { experienceMultiplierRouter } from "./experience-multiplier.js"; import { dashboardRouter } from "./dashboard.js"; import { insightsRouter } from "./insights.js"; import { scenarioRouter } from "./scenario.js"; -import { allocationRouter } from "./allocation.js"; +import { allocationRouter } from "./allocation/index.js"; import { staffingRouter } from "./staffing.js"; import { advancedTimelineToolDefinitions, createAdvancedTimelineExecutors } from "./assistant-tools/advanced-timeline.js"; import { diff --git a/packages/api/src/router/index.ts b/packages/api/src/router/index.ts index 3add205..506387f 100644 --- a/packages/api/src/router/index.ts +++ b/packages/api/src/router/index.ts @@ -1,5 +1,5 @@ import { createTRPCRouter } from "../trpc.js"; -import { allocationRouter } from "./allocation.js"; +import { allocationRouter } from "./allocation/index.js"; import { assistantRouter } from "./assistant.js"; import { auditLogRouter } from "./audit-log.js"; import { calculationRuleRouter } from "./calculation-rules.js";