import { z } from 'zod'; import { baseListQuerySchema } from '@/lib/api/list-query'; export const uploadFileSchema = z.object({ filename: z.string().min(1).max(255), clientId: z.string().optional(), yachtId: z.string().optional(), companyId: z.string().optional(), folderId: z.string().uuid().optional(), category: z.string().optional(), entityType: z.string().optional(), entityId: z.string().optional(), }); export const updateFileSchema = z.object({ filename: z.string().min(1).max(255).optional(), category: z.string().optional(), }); export const listFilesSchema = baseListQuerySchema .extend({ clientId: z.string().optional(), yachtId: z.string().optional(), companyId: z.string().optional(), category: z.string().optional(), folderId: z.string().uuid().optional(), /** Entity-aggregated projection params — mutually exclusive with folderId. */ entityType: z.enum(['client', 'company', 'yacht']).optional(), entityId: z.string().uuid().optional(), }) .refine( (q) => !(q.folderId !== undefined && (q.entityType !== undefined || q.entityId !== undefined)), { message: 'folderId is mutually exclusive with entityType/entityId', path: ['folderId'], }, ) .refine((q) => Boolean(q.entityType) === Boolean(q.entityId), { message: 'entityType and entityId must be provided together', path: ['entityType'], }); export type UploadFileInput = z.infer; export type UpdateFileInput = z.infer; export type ListFilesInput = z.infer;