Fix timeline event updates and edge function

Update `update_entity_from_submission` and `delete_entity_from_submission` to support timeline events. Remove unused `p_idempotency_key` parameter from `process_approval_transaction` RPC call in `process-selective-approval` edge function.
This commit is contained in:
gpt-engineer-app[bot]
2025-11-08 02:56:40 +00:00
parent d6a3df4fd7
commit bdea5f0cc4
2 changed files with 147 additions and 2 deletions

View File

@@ -178,8 +178,7 @@ const handler = async (req: Request) => {
p_item_ids: itemIds, p_item_ids: itemIds,
p_moderator_id: user.id, p_moderator_id: user.id,
p_submitter_id: submission.user_id, p_submitter_id: submission.user_id,
p_request_id: requestId, p_request_id: requestId
p_idempotency_key: idempotencyKey
} }
); );

View File

@@ -0,0 +1,146 @@
-- ============================================================================
-- Fix Timeline Event Updates and Deletes
-- Adds support for timeline_event and milestone entity types
-- ============================================================================
-- Update function to support timeline event updates
CREATE OR REPLACE FUNCTION update_entity_from_submission(
p_entity_type TEXT,
p_data JSONB,
p_entity_id UUID,
p_updated_by UUID
)
RETURNS UUID
LANGUAGE plpgsql
SECURITY DEFINER
SET search_path = public
AS $$
BEGIN
CASE p_entity_type
WHEN 'park' THEN
UPDATE parks SET
name = COALESCE(p_data->>'name', name),
slug = COALESCE(p_data->>'slug', slug),
description = COALESCE(p_data->>'description', description),
park_type = COALESCE(p_data->>'park_type', park_type),
status = COALESCE(p_data->>'status', status),
location_id = COALESCE((p_data->>'location_id')::UUID, location_id),
operator_id = COALESCE((p_data->>'operator_id')::UUID, operator_id),
property_owner_id = COALESCE((p_data->>'property_owner_id')::UUID, property_owner_id),
opening_date = COALESCE((p_data->>'opening_date')::DATE, opening_date),
closing_date = COALESCE((p_data->>'closing_date')::DATE, closing_date),
opening_date_precision = COALESCE(p_data->>'opening_date_precision', opening_date_precision),
closing_date_precision = COALESCE(p_data->>'closing_date_precision', closing_date_precision),
website_url = COALESCE(p_data->>'website_url', website_url),
phone = COALESCE(p_data->>'phone', phone),
email = COALESCE(p_data->>'email', email),
banner_image_url = COALESCE(p_data->>'banner_image_url', banner_image_url),
banner_image_id = COALESCE(p_data->>'banner_image_id', banner_image_id),
card_image_url = COALESCE(p_data->>'card_image_url', card_image_url),
card_image_id = COALESCE(p_data->>'card_image_id', card_image_id),
updated_at = NOW()
WHERE id = p_entity_id;
WHEN 'ride' THEN
UPDATE rides SET
name = COALESCE(p_data->>'name', name),
slug = COALESCE(p_data->>'slug', slug),
park_id = COALESCE((p_data->>'park_id')::UUID, park_id),
ride_type = COALESCE(p_data->>'ride_type', ride_type),
status = COALESCE(p_data->>'status', status),
manufacturer_id = COALESCE((p_data->>'manufacturer_id')::UUID, manufacturer_id),
ride_model_id = COALESCE((p_data->>'ride_model_id')::UUID, ride_model_id),
opening_date = COALESCE((p_data->>'opening_date')::DATE, opening_date),
closing_date = COALESCE((p_data->>'closing_date')::DATE, closing_date),
opening_date_precision = COALESCE(p_data->>'opening_date_precision', opening_date_precision),
closing_date_precision = COALESCE(p_data->>'closing_date_precision', closing_date_precision),
description = COALESCE(p_data->>'description', description),
banner_image_url = COALESCE(p_data->>'banner_image_url', banner_image_url),
banner_image_id = COALESCE(p_data->>'banner_image_id', banner_image_id),
card_image_url = COALESCE(p_data->>'card_image_url', card_image_url),
card_image_id = COALESCE(p_data->>'card_image_id', card_image_id),
updated_at = NOW()
WHERE id = p_entity_id;
WHEN 'manufacturer', 'operator', 'property_owner', 'designer' THEN
UPDATE companies SET
name = COALESCE(p_data->>'name', name),
slug = COALESCE(p_data->>'slug', slug),
description = COALESCE(p_data->>'description', description),
website_url = COALESCE(p_data->>'website_url', website_url),
founded_year = COALESCE((p_data->>'founded_year')::INTEGER, founded_year),
banner_image_url = COALESCE(p_data->>'banner_image_url', banner_image_url),
banner_image_id = COALESCE(p_data->>'banner_image_id', banner_image_id),
card_image_url = COALESCE(p_data->>'card_image_url', card_image_url),
card_image_id = COALESCE(p_data->>'card_image_id', card_image_id),
updated_at = NOW()
WHERE id = p_entity_id;
WHEN 'ride_model' THEN
UPDATE ride_models SET
name = COALESCE(p_data->>'name', name),
slug = COALESCE(p_data->>'slug', slug),
manufacturer_id = COALESCE((p_data->>'manufacturer_id')::UUID, manufacturer_id),
ride_type = COALESCE(p_data->>'ride_type', ride_type),
description = COALESCE(p_data->>'description', description),
banner_image_url = COALESCE(p_data->>'banner_image_url', banner_image_url),
banner_image_id = COALESCE(p_data->>'banner_image_id', banner_image_id),
card_image_url = COALESCE(p_data->>'card_image_url', card_image_url),
card_image_id = COALESCE(p_data->>'card_image_id', card_image_id),
updated_at = NOW()
WHERE id = p_entity_id;
WHEN 'timeline_event', 'milestone' THEN
UPDATE entity_timeline_events SET
event_type = COALESCE(p_data->>'event_type', event_type),
event_date = COALESCE((p_data->>'event_date')::DATE, event_date),
event_date_precision = COALESCE(p_data->>'event_date_precision', event_date_precision),
title = COALESCE(p_data->>'title', title),
description = COALESCE(p_data->>'description', description),
from_value = COALESCE(p_data->>'from_value', from_value),
to_value = COALESCE(p_data->>'to_value', to_value),
from_entity_id = COALESCE((p_data->>'from_entity_id')::UUID, from_entity_id),
to_entity_id = COALESCE((p_data->>'to_entity_id')::UUID, to_entity_id),
from_location_id = COALESCE((p_data->>'from_location_id')::UUID, from_location_id),
to_location_id = COALESCE((p_data->>'to_location_id')::UUID, to_location_id),
updated_at = NOW()
WHERE id = p_entity_id;
ELSE
RAISE EXCEPTION 'Unsupported entity type for update: %', p_entity_type
USING ERRCODE = '22023';
END CASE;
RETURN p_entity_id;
END;
$$;
-- Update function to support timeline event deletion
CREATE OR REPLACE FUNCTION delete_entity_from_submission(
p_entity_type TEXT,
p_entity_id UUID,
p_deleted_by UUID
)
RETURNS VOID
LANGUAGE plpgsql
SECURITY DEFINER
SET search_path = public
AS $$
BEGIN
CASE p_entity_type
WHEN 'park' THEN
DELETE FROM parks WHERE id = p_entity_id;
WHEN 'ride' THEN
DELETE FROM rides WHERE id = p_entity_id;
WHEN 'manufacturer', 'operator', 'property_owner', 'designer' THEN
DELETE FROM companies WHERE id = p_entity_id;
WHEN 'ride_model' THEN
DELETE FROM ride_models WHERE id = p_entity_id;
WHEN 'timeline_event', 'milestone' THEN
DELETE FROM entity_timeline_events WHERE id = p_entity_id;
ELSE
RAISE EXCEPTION 'Unsupported entity type for deletion: %', p_entity_type
USING ERRCODE = '22023';
END CASE;
END;
$$;