refactor(api): extract timeline holiday procedures
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
import {
|
||||
buildSelfServiceTimelineInput,
|
||||
buildTimelineEntriesDetailInput,
|
||||
} from "./timeline-read-shared.js";
|
||||
import { loadTimelineHolidayOverlays } from "./timeline-holiday-load-support.js";
|
||||
import {
|
||||
buildTimelineHolidayOverlayDetailResponse,
|
||||
formatTimelineHolidayOverlays,
|
||||
} from "./timeline-holiday-support.js";
|
||||
|
||||
type TimelineHolidayProcedureDb = Parameters<typeof loadTimelineHolidayOverlays>[0];
|
||||
type TimelineHolidaySelfServiceContext = Parameters<typeof buildSelfServiceTimelineInput>[0];
|
||||
type TimelineHolidaySelfServiceInput = Parameters<typeof buildSelfServiceTimelineInput>[1];
|
||||
type TimelineHolidayDetailInput = Parameters<typeof buildTimelineEntriesDetailInput>[0];
|
||||
|
||||
export async function readMyTimelineHolidayOverlays(
|
||||
ctx: TimelineHolidaySelfServiceContext,
|
||||
input: TimelineHolidaySelfServiceInput,
|
||||
) {
|
||||
const selfServiceInput = await buildSelfServiceTimelineInput(ctx, input);
|
||||
if (!selfServiceInput) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return loadTimelineHolidayOverlays(ctx.db, selfServiceInput);
|
||||
}
|
||||
|
||||
export async function readTimelineHolidayOverlayDetail(
|
||||
db: TimelineHolidayProcedureDb,
|
||||
input: TimelineHolidayDetailInput,
|
||||
) {
|
||||
const { period, filters, timelineInput } = buildTimelineEntriesDetailInput(input);
|
||||
const holidayOverlays = await loadTimelineHolidayOverlays(db, timelineInput);
|
||||
|
||||
return buildTimelineHolidayOverlayDetailResponse({
|
||||
startDate: period.startDate,
|
||||
endDate: period.endDate,
|
||||
filters,
|
||||
overlays: formatTimelineHolidayOverlays(holidayOverlays),
|
||||
});
|
||||
}
|
||||
@@ -1,16 +1,16 @@
|
||||
import { z } from "zod";
|
||||
import { controllerProcedure, protectedProcedure } from "../trpc.js";
|
||||
import {
|
||||
buildSelfServiceTimelineInput,
|
||||
createTimelineDateRange,
|
||||
createTimelineFilters,
|
||||
TimelineDetailFiltersSchema,
|
||||
TimelineWindowFiltersSchema,
|
||||
} from "./timeline-read-shared.js";
|
||||
import {
|
||||
loadTimelineHolidayOverlays,
|
||||
} from "./timeline-holiday-load-support.js";
|
||||
import {
|
||||
buildTimelineHolidayOverlayDetailResponse,
|
||||
readMyTimelineHolidayOverlays,
|
||||
readTimelineHolidayOverlayDetail,
|
||||
} from "./timeline-holiday-procedure-support.js";
|
||||
import {
|
||||
formatTimelineHolidayOverlays,
|
||||
summarizeTimelineHolidayOverlays,
|
||||
type TimelineHolidayOverlayRecord,
|
||||
@@ -40,44 +40,9 @@ export const timelineHolidayReadProcedures = {
|
||||
|
||||
getMyHolidayOverlays: protectedProcedure
|
||||
.input(TimelineWindowFiltersSchema)
|
||||
.query(async ({ ctx, input }) => {
|
||||
const selfServiceInput = await buildSelfServiceTimelineInput(ctx, input);
|
||||
if (!selfServiceInput) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return loadTimelineHolidayOverlays(ctx.db, selfServiceInput);
|
||||
}),
|
||||
.query(async ({ ctx, input }) => readMyTimelineHolidayOverlays(ctx, input)),
|
||||
|
||||
getHolidayOverlayDetail: controllerProcedure
|
||||
.input(
|
||||
z.object({
|
||||
startDate: z.string().optional(),
|
||||
endDate: z.string().optional(),
|
||||
durationDays: z.number().int().min(1).max(366).optional(),
|
||||
resourceIds: z.array(z.string()).optional(),
|
||||
projectIds: z.array(z.string()).optional(),
|
||||
clientIds: z.array(z.string()).optional(),
|
||||
chapters: z.array(z.string()).optional(),
|
||||
eids: z.array(z.string()).optional(),
|
||||
countryCodes: z.array(z.string()).optional(),
|
||||
}),
|
||||
)
|
||||
.query(async ({ ctx, input }) => {
|
||||
const { startDate, endDate } = createTimelineDateRange(input);
|
||||
const filters = createTimelineFilters(input);
|
||||
const holidayOverlays = await loadTimelineHolidayOverlays(ctx.db, {
|
||||
...filters,
|
||||
startDate,
|
||||
endDate,
|
||||
});
|
||||
const formattedOverlays = formatHolidayOverlays(holidayOverlays);
|
||||
|
||||
return buildTimelineHolidayOverlayDetailResponse({
|
||||
startDate,
|
||||
endDate,
|
||||
filters,
|
||||
overlays: formattedOverlays,
|
||||
});
|
||||
}),
|
||||
.input(TimelineDetailFiltersSchema)
|
||||
.query(async ({ ctx, input }) => readTimelineHolidayOverlayDetail(ctx.db, input)),
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user