mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-28 15:27:00 -05:00
Compare commits
4 Commits
3867d30aac
...
c3cab84132
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c3cab84132 | ||
|
|
ab9d424240 | ||
|
|
617e079c5a | ||
|
|
3cb2c39acf |
@@ -0,0 +1,47 @@
|
||||
-- Phase 2: Fix backfill_park_locations to include name and display_name
|
||||
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
|
||||
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.park_id = v_park.id AND ps.status = 'approved' AND psl.country IS NOT NULL
|
||||
ORDER BY ps.created_at DESC LIMIT 1;
|
||||
|
||||
IF FOUND THEN
|
||||
v_location_name := COALESCE(v_submission.name, v_submission.display_name,
|
||||
CONCAT_WS(', ', NULLIF(v_submission.city, ''), NULLIF(v_submission.state_province, ''), NULLIF(v_submission.country, '')));
|
||||
|
||||
INSERT INTO locations (name, display_name, country, state_province, city, street_address, postal_code, latitude, longitude, timezone)
|
||||
VALUES (v_location_name, COALESCE(v_submission.display_name, 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 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;
|
||||
END IF;
|
||||
END LOOP;
|
||||
|
||||
RETURN jsonb_build_object('success', true, 'parks_updated', v_parks_updated, 'locations_created', v_locations_created);
|
||||
END;
|
||||
$$;
|
||||
@@ -0,0 +1,47 @@
|
||||
-- Fix backfill_park_locations to join via slug instead of park_id
|
||||
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
|
||||
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 ps.status = 'approved' AND (psl.country IS NOT NULL OR psl.city IS NOT NULL)
|
||||
ORDER BY ps.created_at DESC LIMIT 1;
|
||||
|
||||
IF FOUND THEN
|
||||
v_location_name := COALESCE(v_submission.name, v_submission.display_name,
|
||||
CONCAT_WS(', ', NULLIF(v_submission.city, ''), NULLIF(v_submission.state_province, ''), NULLIF(v_submission.country, '')));
|
||||
|
||||
INSERT INTO locations (name, display_name, country, state_province, city, street_address, postal_code, latitude, longitude, timezone)
|
||||
VALUES (v_location_name, COALESCE(v_submission.display_name, 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 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;
|
||||
END IF;
|
||||
END LOOP;
|
||||
|
||||
RETURN jsonb_build_object('success', true, 'parks_updated', v_parks_updated, 'locations_created', v_locations_created);
|
||||
END;
|
||||
$$;
|
||||
@@ -0,0 +1,16 @@
|
||||
-- Run backfill to populate missing park locations
|
||||
DO $$
|
||||
DECLARE
|
||||
v_result jsonb;
|
||||
BEGIN
|
||||
RAISE NOTICE '========================================';
|
||||
RAISE NOTICE 'Running backfill_park_locations()...';
|
||||
RAISE NOTICE '========================================';
|
||||
|
||||
SELECT backfill_park_locations() INTO v_result;
|
||||
|
||||
RAISE NOTICE '========================================';
|
||||
RAISE NOTICE 'Backfill Complete!';
|
||||
RAISE NOTICE 'Result: %', v_result;
|
||||
RAISE NOTICE '========================================';
|
||||
END $$;
|
||||
@@ -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 $$;
|
||||
Reference in New Issue
Block a user