From c3cab84132496d0f201bff36d24f8cace210d826 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Wed, 12 Nov 2025 04:34:31 +0000 Subject: [PATCH] Fix Lagoon location backfill Backfilled Lagoon park with a proper location by updating backfill_park_locations to include name/display data and linking to location_id. Verified Lagoon now has location details (name, city, country, coordinates) and map displays. Documented remaining need to update approval function to include location name on future submissions. --- ...0_43770669-a536-4d46-88ed-e63122f1a13e.sql | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 supabase/migrations/20251112043400_43770669-a536-4d46-88ed-e63122f1a13e.sql diff --git a/supabase/migrations/20251112043400_43770669-a536-4d46-88ed-e63122f1a13e.sql b/supabase/migrations/20251112043400_43770669-a536-4d46-88ed-e63122f1a13e.sql new file mode 100644 index 00000000..473a024e --- /dev/null +++ b/supabase/migrations/20251112043400_43770669-a536-4d46-88ed-e63122f1a13e.sql @@ -0,0 +1,65 @@ +-- Fix backfill to remove display_name (column doesn't exist in locations table) +CREATE OR REPLACE FUNCTION backfill_park_locations() +RETURNS jsonb +LANGUAGE plpgsql +SECURITY DEFINER +SET search_path = public +AS $$ +DECLARE + v_parks_updated INTEGER := 0; + v_locations_created INTEGER := 0; + v_park RECORD; + v_submission RECORD; + v_location_id UUID; + v_location_name TEXT; +BEGIN + FOR v_park IN + SELECT DISTINCT p.id, p.name, p.slug + FROM parks p + WHERE p.location_id IS NULL + LOOP + -- Find most recent submission with location data + SELECT psl.name, psl.display_name, psl.country, psl.state_province, psl.city, psl.street_address, + psl.postal_code, psl.latitude, psl.longitude, psl.timezone + INTO v_submission + FROM park_submissions ps + JOIN park_submission_locations psl ON ps.id = psl.park_submission_id + WHERE ps.slug = v_park.slug AND (psl.country IS NOT NULL OR psl.city IS NOT NULL) + ORDER BY ps.created_at DESC LIMIT 1; + + IF FOUND THEN + -- Construct location name from available data + v_location_name := COALESCE( + v_submission.display_name, + v_submission.name, + CONCAT_WS(', ', NULLIF(v_submission.city, ''), NULLIF(v_submission.state_province, ''), NULLIF(v_submission.country, '')) + ); + + INSERT INTO locations (name, country, state_province, city, street_address, postal_code, latitude, longitude, timezone) + VALUES (v_location_name, v_submission.country, v_submission.state_province, v_submission.city, + v_submission.street_address, v_submission.postal_code, v_submission.latitude, v_submission.longitude, v_submission.timezone) + RETURNING id INTO v_location_id; + + UPDATE parks SET location_id = v_location_id, updated_at = now() WHERE id = v_park.id; + v_parks_updated := v_parks_updated + 1; + v_locations_created := v_locations_created + 1; + RAISE NOTICE '✅ Backfilled location % (name: %) for park: % (id: %)', v_location_id, v_location_name, v_park.name, v_park.id; + ELSE + RAISE NOTICE '⚠️ No location data found for park: % (slug: %)', v_park.name, v_park.slug; + END IF; + END LOOP; + + RETURN jsonb_build_object('success', true, 'parks_updated', v_parks_updated, 'locations_created', v_locations_created); +END; +$$; + +-- Run the backfill +DO $$ +DECLARE + v_result jsonb; +BEGIN + SELECT backfill_park_locations() INTO v_result; + RAISE NOTICE '========================================'; + RAISE NOTICE 'Backfill Complete! Result: %', v_result; + RAISE NOTICE '========================================'; +END $$; \ No newline at end of file