refactor(api): split timeline read schemas
This commit is contained in:
@@ -1,10 +1,12 @@
|
|||||||
import { describe, expect, it } from "vitest";
|
import { describe, expect, it } from "vitest";
|
||||||
import {
|
import {
|
||||||
buildTimelineEntriesDetailInput,
|
buildTimelineEntriesDetailInput,
|
||||||
|
} from "../router/timeline-read-shared.js";
|
||||||
|
import {
|
||||||
TimelineDetailFiltersSchema,
|
TimelineDetailFiltersSchema,
|
||||||
TimelineProjectContextDetailSchema,
|
TimelineProjectContextDetailSchema,
|
||||||
TimelineProjectIdSchema,
|
TimelineProjectIdSchema,
|
||||||
} from "../router/timeline-read-shared.js";
|
} from "../router/timeline-read-schema-support.js";
|
||||||
|
|
||||||
describe("timeline read shared", () => {
|
describe("timeline read shared", () => {
|
||||||
it("builds detail input from period and normalized filters", () => {
|
it("builds detail input from period and normalized filters", () => {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { controllerProcedure, protectedProcedure } from "../trpc.js";
|
|||||||
import {
|
import {
|
||||||
TimelineDetailFiltersSchema,
|
TimelineDetailFiltersSchema,
|
||||||
TimelineWindowFiltersSchema,
|
TimelineWindowFiltersSchema,
|
||||||
} from "./timeline-read-shared.js";
|
} from "./timeline-read-schema-support.js";
|
||||||
import {
|
import {
|
||||||
readMyTimelineEntriesView,
|
readMyTimelineEntriesView,
|
||||||
readTimelineEntries,
|
readTimelineEntries,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { controllerProcedure, protectedProcedure } from "../trpc.js";
|
|||||||
import {
|
import {
|
||||||
TimelineDetailFiltersSchema,
|
TimelineDetailFiltersSchema,
|
||||||
TimelineWindowFiltersSchema,
|
TimelineWindowFiltersSchema,
|
||||||
} from "./timeline-read-shared.js";
|
} from "./timeline-read-schema-support.js";
|
||||||
import {
|
import {
|
||||||
loadTimelineHolidayOverlays,
|
loadTimelineHolidayOverlays,
|
||||||
} from "./timeline-holiday-load-support.js";
|
} from "./timeline-holiday-load-support.js";
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { controllerProcedure } from "../trpc.js";
|
|||||||
import {
|
import {
|
||||||
TimelineProjectContextDetailSchema,
|
TimelineProjectContextDetailSchema,
|
||||||
TimelineProjectIdSchema,
|
TimelineProjectIdSchema,
|
||||||
} from "./timeline-read-shared.js";
|
} from "./timeline-read-schema-support.js";
|
||||||
import {
|
import {
|
||||||
readTimelineProjectContextDetailResponse,
|
readTimelineProjectContextDetailResponse,
|
||||||
readTimelineProjectContextResponse,
|
readTimelineProjectContextResponse,
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
import { z } from "zod";
|
||||||
|
|
||||||
|
export const TimelineWindowFiltersSchema = z.object({
|
||||||
|
startDate: z.coerce.date(),
|
||||||
|
endDate: z.coerce.date(),
|
||||||
|
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(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const TimelineDetailFiltersSchema = 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(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const TimelineProjectContextDetailSchema = z.object({
|
||||||
|
projectId: z.string(),
|
||||||
|
startDate: z.string().optional(),
|
||||||
|
endDate: z.string().optional(),
|
||||||
|
durationDays: z.number().int().min(1).max(366).optional(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const TimelineProjectIdSchema = z.object({
|
||||||
|
projectId: z.string(),
|
||||||
|
});
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import { buildSplitAllocationReadModel } from "@capakraken/application";
|
import { buildSplitAllocationReadModel } from "@capakraken/application";
|
||||||
import type { PrismaClient } from "@capakraken/db";
|
import type { PrismaClient } from "@capakraken/db";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
import { TimelineWindowFiltersSchema } from "./timeline-read-schema-support.js";
|
||||||
import { loadTimelineEntryRecords } from "./timeline-entry-query-support.js";
|
import { loadTimelineEntryRecords } from "./timeline-entry-query-support.js";
|
||||||
export {
|
export {
|
||||||
buildSelfServiceTimelineInput,
|
buildSelfServiceTimelineInput,
|
||||||
@@ -30,40 +31,6 @@ export type TimelineEntriesFilters = {
|
|||||||
countryCodes?: string[] | undefined;
|
countryCodes?: string[] | undefined;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const TimelineWindowFiltersSchema = z.object({
|
|
||||||
startDate: z.coerce.date(),
|
|
||||||
endDate: z.coerce.date(),
|
|
||||||
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(),
|
|
||||||
});
|
|
||||||
|
|
||||||
export const TimelineDetailFiltersSchema = 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(),
|
|
||||||
});
|
|
||||||
|
|
||||||
export const TimelineProjectContextDetailSchema = z.object({
|
|
||||||
projectId: z.string(),
|
|
||||||
startDate: z.string().optional(),
|
|
||||||
endDate: z.string().optional(),
|
|
||||||
durationDays: z.number().int().min(1).max(366).optional(),
|
|
||||||
});
|
|
||||||
|
|
||||||
export const TimelineProjectIdSchema = z.object({
|
|
||||||
projectId: z.string(),
|
|
||||||
});
|
|
||||||
|
|
||||||
type TimelineWindowFiltersInput = z.infer<typeof TimelineWindowFiltersSchema>;
|
type TimelineWindowFiltersInput = z.infer<typeof TimelineWindowFiltersSchema>;
|
||||||
|
|
||||||
export function getAssignmentResourceIds(
|
export function getAssignmentResourceIds(
|
||||||
|
|||||||
Reference in New Issue
Block a user