import { z } from "zod"; import { distributionBoardSupplyTypes } from "../constants/distribution-board.js"; import { expectedProjectRevisionSchema } from "./project-command.schemas.js"; export const createProjectSchema = z.object({ name: z.string().trim().min(1).max(200), internalProjectNumber: z.string().trim().max(100).optional(), externalProjectNumber: z.string().trim().max(100).optional(), buildingOwner: z.string().trim().max(200).optional(), description: z.string().trim().max(2000).optional(), isPublicBuilding: z.boolean().optional(), singlePhaseVoltageV: z.number().positive().optional(), threePhaseVoltageV: z.number().positive().optional(), }); export const updateProjectSettingsSchema = z .object({ expectedRevision: expectedProjectRevisionSchema, name: z.string().trim().min(1).max(200), internalProjectNumber: z.string().trim().max(100).nullable(), externalProjectNumber: z.string().trim().max(100).nullable(), buildingOwner: z.string().trim().max(200).nullable(), description: z.string().trim().max(2000).nullable(), isPublicBuilding: z.boolean(), singlePhaseVoltageV: z.number().positive(), threePhaseVoltageV: z.number().positive(), enabledDistributionBoardSupplyTypes: z .array(z.enum(distributionBoardSupplyTypes)) .min(1) .refine((values) => new Set(values).size === values.length, { message: "Netzarten dürfen nicht mehrfach ausgewählt werden.", }), }) .strict(); export const createDistributionBoardSchema = z .object({ expectedRevision: expectedProjectRevisionSchema, name: z.string().trim().min(1), floorId: z.string().trim().min(1).nullable(), supplyType: z.enum(distributionBoardSupplyTypes), }) .strict(); export const updateDistributionBoardSchema = z .object({ expectedRevision: expectedProjectRevisionSchema, floorId: z.string().trim().min(1).nullable(), supplyType: z.enum(distributionBoardSupplyTypes), simultaneityFactor: z.number().finite().min(0).max(1), }) .strict(); export const copyDistributionBoardSchema = z .object({ expectedRevision: expectedProjectRevisionSchema, name: z.string().trim().min(1).max(200), }) .strict(); export const deleteDistributionBoardSchema = z .object({ expectedRevision: expectedProjectRevisionSchema, }) .strict(); export const createFloorSchema = z .object({ expectedRevision: expectedProjectRevisionSchema, name: z.string().trim().min(1), }) .strict(); export const updateFloorSchema = createFloorSchema; export const deleteProjectLocationSchema = z .object({ expectedRevision: expectedProjectRevisionSchema, }) .strict(); export const createRoomSchema = z .object({ expectedRevision: expectedProjectRevisionSchema, floorId: z.string().trim().min(1).optional(), roomNumber: z.string().trim().min(1), roomName: z.string().trim().min(1), }) .strict(); export const updateRoomSchema = z .object({ expectedRevision: expectedProjectRevisionSchema, floorId: z.string().trim().min(1).nullable(), roomNumber: z.string().trim().min(1), roomName: z.string().trim().min(1), }) .strict(); export type CreateProjectInput = z.infer; export type UpdateProjectSettingsInput = z.infer< typeof updateProjectSettingsSchema >; export type CreateDistributionBoardInput = z.infer< typeof createDistributionBoardSchema >;