leistungsbilanz-ts/src/shared/validation/project-device.schemas.ts

47 lines
1.7 KiB
TypeScript

import { z } from "zod";
import { projectDeviceSyncFields } from "../constants/project-device-sync-fields.js";
import { expectedProjectRevisionSchema } from "./project-command.schemas.js";
import { circuitGroupCategories } from "../constants/circuit-group.js";
export const createProjectDeviceSchema = z.object({
name: z.string().min(1),
displayName: z.string().min(1),
connectionKind: z.string().optional(),
costGroup: z.string().optional(),
category: z.enum(circuitGroupCategories),
quantity: z.number().min(0),
powerPerUnit: z.number().min(0),
simultaneityFactor: z.number().min(0).max(1),
cosPhi: z.number().min(0).max(1).optional(),
remark: z.string().optional(),
}).strict();
export const updateProjectDeviceSchema = createProjectDeviceSchema;
export const createProjectDeviceCommandSchema =
createProjectDeviceSchema.extend({
expectedRevision: expectedProjectRevisionSchema,
});
export const updateProjectDeviceCommandSchema =
updateProjectDeviceSchema.extend({
expectedRevision: expectedProjectRevisionSchema,
});
export const projectDeviceStructureCommandSchema = z.object({
expectedRevision: expectedProjectRevisionSchema,
});
export const synchronizeProjectDeviceRowsSchema = z.object({
rowIds: z.array(z.string().min(1)).min(1),
fields: z.array(z.enum(projectDeviceSyncFields)).min(1),
expectedRevision: expectedProjectRevisionSchema,
});
export const disconnectProjectDeviceRowsSchema = z.object({
rowIds: z.array(z.string().min(1)).min(1),
expectedRevision: expectedProjectRevisionSchema,
});
export type CreateProjectDeviceInput = z.infer<typeof createProjectDeviceSchema>;
export type UpdateProjectDeviceInput = z.infer<typeof updateProjectDeviceSchema>;