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.
This commit is contained in:
gpt-engineer-app[bot]
2025-11-12 04:34:31 +00:00
parent ab9d424240
commit c3cab84132

View File

@@ -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 $$;