refactor: migrate room photos from rooms.photos to images table
- Photos now stored exclusively in images table (no duplication) - rooms.photos array cleared, freed 17 MB storage - Updated room APIs to fetch images by room_id - Added PUT endpoint for room updates - Updated RoomEditor to load/delete images from images table - Fixed images API to return 'data' key consistently
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
-- Migration: Move room photos from rooms.photos to images table
|
||||
-- Run with: psql -U lahuasca -d lahuasca -f migrate-room-photos.sql
|
||||
|
||||
BEGIN;
|
||||
|
||||
-- First, check which rooms have photos in rooms.photos but not in images
|
||||
-- For rooms 7 and 8, we need to copy their photos to images table
|
||||
|
||||
DO $$
|
||||
DECLARE
|
||||
rec RECORD;
|
||||
photo_data TEXT;
|
||||
room_id_val INTEGER;
|
||||
photo_index INTEGER;
|
||||
BEGIN
|
||||
-- Loop through rooms that have photos in the array but not in images table
|
||||
FOR rec IN
|
||||
SELECT r.id, r.name, r.photos
|
||||
FROM rooms r
|
||||
WHERE array_length(r.photos, 1) > 0
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM images i WHERE i.room_id = r.id
|
||||
)
|
||||
LOOP
|
||||
room_id_val := rec.id;
|
||||
|
||||
-- Insert each photo from the array into images
|
||||
FOR photo_index IN 1..array_length(rec.photos, 1) LOOP
|
||||
photo_data := rec.photos[photo_index];
|
||||
|
||||
INSERT INTO images (filename, data, thumbnail, medium, category, room_id, location_target)
|
||||
VALUES (
|
||||
CONCAT('room-', room_id_val, '-photo-', photo_index, '.webp'),
|
||||
photo_data,
|
||||
photo_data, -- thumbnail (will be regenerated by WebP migration if different)
|
||||
NULL,
|
||||
'rooms',
|
||||
room_id_val,
|
||||
CONCAT('room-', room_id_val)
|
||||
);
|
||||
END LOOP;
|
||||
|
||||
RAISE NOTICE 'Migrated % photos for room % (%)', array_length(rec.photos, 1), rec.name, room_id_val;
|
||||
END LOOP;
|
||||
END $$;
|
||||
|
||||
-- Now clear the photos arrays in rooms table (images table is the source of truth)
|
||||
UPDATE rooms SET photos = '{}' WHERE array_length(photos, 1) > 0;
|
||||
|
||||
-- For rooms that already have images, sync the photo count
|
||||
-- This is informational only
|
||||
DO $$
|
||||
DECLARE
|
||||
rec RECORD;
|
||||
BEGIN
|
||||
FOR rec IN
|
||||
SELECT r.id, r.name,
|
||||
array_length(r.photos, 1) as old_count,
|
||||
(SELECT COUNT(*) FROM images i WHERE i.room_id = r.id) as new_count
|
||||
FROM rooms r
|
||||
LOOP
|
||||
RAISE NOTICE 'Room % (%): photos array=%, images table=%',
|
||||
rec.name, rec.id, rec.old_count, rec.new_count;
|
||||
END LOOP;
|
||||
END $$;
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- Verify the migration
|
||||
SELECT
|
||||
r.id,
|
||||
r.name,
|
||||
array_length(r.photos, 1) as room_photos_count,
|
||||
(SELECT COUNT(*) FROM images i WHERE i.room_id = r.id) as images_count
|
||||
FROM rooms r
|
||||
ORDER BY r.id;
|
||||
Reference in New Issue
Block a user