Files
CapaKraken/packages/api/src/router/timeline-allocation-mutations.ts
T

75 lines
2.6 KiB
TypeScript

import type { PrismaClient } from "@capakraken/db";
import { PermissionKey } from "@capakraken/shared";
import { emitAllocationUpdated } from "../sse/event-bus.js";
import { managerProcedure, requirePermission } from "../trpc.js";
import {
createTimelineBatchQuickAssignments,
createTimelineQuickAssignment,
} from "./timeline-allocation-assignment-procedure-support.js";
import { shiftTimelineAllocations } from "./timeline-allocation-procedure-support.js";
import {
UpdateAllocationHoursSchema,
timelineBatchQuickAssignInputSchema,
timelineBatchShiftAllocationsInputSchema,
timelineQuickAssignInputSchema,
} from "./timeline-allocation-mutation-schema-support.js";
import { applyTimelineInlineAllocationUpdate } from "./timeline-allocation-inline-support.js";
export const timelineAllocationMutationProcedures = {
updateAllocationInline: managerProcedure
.input(UpdateAllocationHoursSchema)
.mutation(async ({ ctx, input }) => {
requirePermission(ctx, PermissionKey.MANAGE_ALLOCATIONS);
const updated = await applyTimelineInlineAllocationUpdate({
db: ctx.db as PrismaClient,
allocationId: input.allocationId,
hoursPerDay: input.hoursPerDay,
startDate: input.startDate,
endDate: input.endDate,
includeSaturday: input.includeSaturday,
role: input.role,
});
emitAllocationUpdated({
id: updated.id,
projectId: updated.projectId,
resourceId: updated.resourceId,
});
return updated;
}),
quickAssign: managerProcedure
.input(timelineQuickAssignInputSchema)
.mutation(async ({ ctx, input }) => {
requirePermission(ctx, PermissionKey.MANAGE_ALLOCATIONS);
return createTimelineQuickAssignment(ctx.db as PrismaClient, {
...input,
source: "quickAssign",
});
}),
batchQuickAssign: managerProcedure
.input(timelineBatchQuickAssignInputSchema)
.mutation(async ({ ctx, input }) => {
requirePermission(ctx, PermissionKey.MANAGE_ALLOCATIONS);
return createTimelineBatchQuickAssignments(ctx.db as PrismaClient, {
assignments: input.assignments.map((assignment) => ({
...assignment,
source: "batchQuickAssign" as const,
})),
});
}),
batchShiftAllocations: managerProcedure
.input(timelineBatchShiftAllocationsInputSchema)
.mutation(async ({ ctx, input }) => {
requirePermission(ctx, PermissionKey.MANAGE_ALLOCATIONS);
return shiftTimelineAllocations(ctx.db as PrismaClient, {
allocationIds: input.allocationIds,
daysDelta: input.daysDelta,
mode: input.mode,
});
}),
};