From 35e988fba244206b43b505b1a115d6c8180e95e6 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Wed, 15 Oct 2025 20:13:29 +0000 Subject: [PATCH] Fix milestone entity display and validation --- .../moderation/SpecialFieldDisplay.tsx | 2 +- src/lib/entityValidationSchemas.ts | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/components/moderation/SpecialFieldDisplay.tsx b/src/components/moderation/SpecialFieldDisplay.tsx index 09d67bcf..b35cf678 100644 --- a/src/components/moderation/SpecialFieldDisplay.tsx +++ b/src/components/moderation/SpecialFieldDisplay.tsx @@ -33,7 +33,7 @@ export function SpecialFieldDisplay({ change, compact = false }: SpecialFieldDis return ; } - if (fieldName.includes('_id') && fieldName !== 'id' && fieldName !== 'user_id') { + if (fieldName.includes('_id') && fieldName !== 'id' && fieldName !== 'user_id' && fieldName !== 'entity_id') { return ; } diff --git a/src/lib/entityValidationSchemas.ts b/src/lib/entityValidationSchemas.ts index e4815198..6bc613ea 100644 --- a/src/lib/entityValidationSchemas.ts +++ b/src/lib/entityValidationSchemas.ts @@ -144,6 +144,25 @@ export const photoValidationSchema = z.object({ photographer_credit: z.string().max(200, 'Credit must be less than 200 characters').optional(), }); +// Milestone/Timeline Event Schema +export const milestoneValidationSchema = z.object({ + title: z.string().min(1, 'Event title is required').max(200, 'Title must be less than 200 characters'), + description: z.string().max(2000, 'Description must be less than 2000 characters').optional(), + event_type: z.string().min(1, 'Event type is required'), + event_date: z.string().min(1, 'Event date is required'), + event_date_precision: z.enum(['day', 'month', 'year']).optional(), + entity_type: z.string().min(1, 'Entity type is required'), + entity_id: z.string().uuid('Invalid entity ID'), + is_public: z.boolean().optional(), + display_order: z.number().optional(), + from_value: z.string().optional(), + to_value: z.string().optional(), + from_entity_id: z.string().uuid().optional().nullable(), + to_entity_id: z.string().uuid().optional().nullable(), + from_location_id: z.string().uuid().optional().nullable(), + to_location_id: z.string().uuid().optional().nullable(), +}); + // ============================================ // SCHEMA REGISTRY // ============================================ @@ -157,6 +176,7 @@ export const entitySchemas = { property_owner: companyValidationSchema, ride_model: rideModelValidationSchema, photo: photoValidationSchema, + milestone: milestoneValidationSchema, }; // ============================================