diff --git a/supabase/functions/process-selective-approval/index.ts b/supabase/functions/process-selective-approval/index.ts index 8816d805..ca66d32b 100644 --- a/supabase/functions/process-selective-approval/index.ts +++ b/supabase/functions/process-selective-approval/index.ts @@ -896,16 +896,37 @@ async function createCompany(supabase: any, data: any, companyType: string): Pro } async function createRideModel(supabase: any, data: any): Promise { - const sanitizedData = sanitizeDateFields(data); - const filteredData = filterDatabaseFields(sanitizedData, RIDE_MODEL_FIELDS); - const { data: model, error } = await supabase - .from('ride_models') - .insert(filteredData) - .select('id') - .single(); + let rideModelId: string; - if (error) throw new Error(`Failed to create ride model: ${error.message}`); - return model.id; + // Check if this is an edit (has ride_model_id) or a new creation + if (data.ride_model_id) { + console.log(`Updating existing ride model ${data.ride_model_id}`); + rideModelId = data.ride_model_id; + delete data.ride_model_id; // Remove ID from update data + + const sanitizedData = sanitizeDateFields(data); + const filteredData = filterDatabaseFields(sanitizedData, RIDE_MODEL_FIELDS); + const { error } = await supabase + .from('ride_models') + .update(filteredData) + .eq('id', rideModelId); + + if (error) throw new Error(`Failed to update ride model: ${error.message}`); + } else { + console.log('Creating new ride model'); + const sanitizedData = sanitizeDateFields(data); + const filteredData = filterDatabaseFields(sanitizedData, RIDE_MODEL_FIELDS); + const { data: model, error } = await supabase + .from('ride_models') + .insert(filteredData) + .select('id') + .single(); + + if (error) throw new Error(`Failed to create ride model: ${error.message}`); + rideModelId = model.id; + } + + return rideModelId; } async function approvePhotos(supabase: any, data: any, submissionItemId: string): Promise { @@ -966,34 +987,71 @@ async function createTimelineEvent( approvingUserId: string, submissionId: string ): Promise { - console.log('Creating timeline event'); + // Determine if this is an edit based on presence of event_id in data + // Note: Timeline events from frontend use 'id' field, not 'event_id' + const eventId = data.id || data.event_id; - const eventData = { - entity_id: data.entity_id, - entity_type: data.entity_type, - event_type: data.event_type, - event_date: data.event_date, - event_date_precision: data.event_date_precision, - title: data.title, - description: data.description, - from_value: data.from_value, - to_value: data.to_value, - from_entity_id: data.from_entity_id, - to_entity_id: data.to_entity_id, - from_location_id: data.from_location_id, - to_location_id: data.to_location_id, - is_public: true, // All timeline events are public - created_by: submitterId, - approved_by: approvingUserId, - submission_id: submissionId, - }; + if (eventId) { + console.log(`Updating existing timeline event ${eventId}`); + + // Prepare update data (exclude ID and audit fields) + const updateData: any = { + event_type: data.event_type, + event_date: data.event_date, + event_date_precision: data.event_date_precision, + title: data.title, + description: data.description, + from_value: data.from_value, + to_value: data.to_value, + from_entity_id: data.from_entity_id, + to_entity_id: data.to_entity_id, + from_location_id: data.from_location_id, + to_location_id: data.to_location_id, + is_public: true, + }; + + // Remove undefined/null values + Object.keys(updateData).forEach(key => + updateData[key] === undefined && delete updateData[key] + ); - const { data: event, error } = await supabase - .from('entity_timeline_events') - .insert(eventData) - .select('id') - .single(); + const { error } = await supabase + .from('entity_timeline_events') + .update(updateData) + .eq('id', eventId); - if (error) throw new Error(`Failed to create timeline event: ${error.message}`); - return event.id; + if (error) throw new Error(`Failed to update timeline event: ${error.message}`); + return eventId; + } else { + console.log('Creating new timeline event'); + + const eventData = { + entity_id: data.entity_id, + entity_type: data.entity_type, + event_type: data.event_type, + event_date: data.event_date, + event_date_precision: data.event_date_precision, + title: data.title, + description: data.description, + from_value: data.from_value, + to_value: data.to_value, + from_entity_id: data.from_entity_id, + to_entity_id: data.to_entity_id, + from_location_id: data.from_location_id, + to_location_id: data.to_location_id, + is_public: true, + created_by: submitterId, + approved_by: approvingUserId, + submission_id: submissionId, + }; + + const { data: event, error } = await supabase + .from('entity_timeline_events') + .insert(eventData) + .select('id') + .single(); + + if (error) throw new Error(`Failed to create timeline event: ${error.message}`); + return event.id; + } }