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,
};
// ============================================