51 lines
2.4 KiB
JavaScript
51 lines
2.4 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.listCutsSchema = exports.updateCutSchema = exports.createCutSchema = void 0;
|
|
const zod_1 = require("zod");
|
|
const client_1 = require("@prisma/client");
|
|
const geojsonValidator = zod_1.z.string().refine((val) => {
|
|
try {
|
|
const parsed = JSON.parse(val);
|
|
return parsed.type === 'Polygon' || parsed.type === 'MultiPolygon';
|
|
}
|
|
catch {
|
|
return false;
|
|
}
|
|
}, { message: 'Must be valid GeoJSON with type Polygon or MultiPolygon' });
|
|
exports.createCutSchema = zod_1.z.object({
|
|
name: zod_1.z.string().min(1, 'Name is required'),
|
|
description: zod_1.z.string().optional(),
|
|
color: zod_1.z.string().regex(/^#[0-9a-fA-F]{6}$/, 'Must be a hex color').default('#3388ff'),
|
|
opacity: zod_1.z.number().min(0).max(1).default(0.3),
|
|
category: zod_1.z.nativeEnum(client_1.CutCategory).optional(),
|
|
isPublic: zod_1.z.boolean().optional().default(false),
|
|
isOfficial: zod_1.z.boolean().optional().default(false),
|
|
geojson: geojsonValidator,
|
|
bounds: zod_1.z.string().optional(),
|
|
showLocations: zod_1.z.boolean().optional().default(true),
|
|
exportEnabled: zod_1.z.boolean().optional().default(true),
|
|
assignedTo: zod_1.z.string().optional(),
|
|
});
|
|
exports.updateCutSchema = zod_1.z.object({
|
|
name: zod_1.z.string().min(1).optional(),
|
|
description: zod_1.z.string().nullable().optional(),
|
|
color: zod_1.z.string().regex(/^#[0-9a-fA-F]{6}$/, 'Must be a hex color').optional(),
|
|
opacity: zod_1.z.number().min(0).max(1).optional(),
|
|
category: zod_1.z.nativeEnum(client_1.CutCategory).nullable().optional(),
|
|
isPublic: zod_1.z.boolean().optional(),
|
|
isOfficial: zod_1.z.boolean().optional(),
|
|
geojson: geojsonValidator.optional(),
|
|
bounds: zod_1.z.string().nullable().optional(),
|
|
showLocations: zod_1.z.boolean().optional(),
|
|
exportEnabled: zod_1.z.boolean().optional(),
|
|
assignedTo: zod_1.z.string().nullable().optional(),
|
|
lastCanvassed: zod_1.z.string().datetime().nullable().optional(),
|
|
completionPercentage: zod_1.z.number().int().min(0).max(100).optional(),
|
|
});
|
|
exports.listCutsSchema = zod_1.z.object({
|
|
page: zod_1.z.coerce.number().int().positive().default(1),
|
|
limit: zod_1.z.coerce.number().int().positive().max(100).default(20),
|
|
category: zod_1.z.nativeEnum(client_1.CutCategory).optional(),
|
|
search: zod_1.z.string().optional(),
|
|
});
|
|
//# sourceMappingURL=cuts.schemas.js.map
|