diff --git a/migrations/000.135.sql b/migrations/000.135.sql new file mode 100644 index 0000000..930dcab --- /dev/null +++ b/migrations/000.135.sql @@ -0,0 +1,73 @@ +-- P5-4335 replace canvas interior images + +BEGIN; + + -- temp lookup table: all products that exists as both canvas and poster + DROP TABLE IF EXISTS _poster_canvas_products; + + CREATE TABLE _poster_canvas_products ( + canvas_print_id integer, + poster_print_id integer + ); + + -- populate the table with values + INSERT INTO _poster_canvas_products (canvas_print_id, poster_print_id) + SELECT canvas_print_id, poster_print_id FROM ( + SELECT canvas.printid AS canvas_print_id, poster.printid AS poster_print_id + FROM "product-products" products + LEFT JOIN "product-printproducts" canvas ON products.productid = canvas.productid AND canvas.groupid = 2 + LEFT JOIN "product-printproducts" poster ON products.productid = poster.productid AND poster.groupid = 7 + WHERE canvas.productid IS NOT NULL AND poster.productid IS NOT NULL + ) x; + + + --temp lookup table: poster_room to canvas_room + DROP TABLE IF EXISTS _poster_canvas_rooms; + + CREATE TABLE _poster_canvas_rooms ( + poster_room_id integer, + canvas_room_id integer + ); + + INSERT INTO _poster_canvas_rooms + SELECT poster_rooms.id, canvas_rooms.id FROM rooms poster_rooms + JOIN rooms canvas_rooms ON canvas_rooms.name LIKE REPLACE(poster_rooms.name, 'poster', 'painting') + WHERE poster_rooms.name LIKE '%poster%'; + + + ---------------------------------------------------------------------------------------------------------------- + + + -- delete interior images from all canvases that also exists as posters. Keep own uploaded interiors + DELETE FROM interiors WHERE + print_id IN (SELECT canvas_print_id FROM _poster_canvas_products) + AND room_id IN (SELECT id FROM rooms WHERE name LIKE '%painting%'); + + + -- -- insert new interior images (based on the images used by posters) + INSERT INTO interiors (print_id, room_id, position) + SELECT * FROM ( + SELECT + _poster_canvas_products.canvas_print_id as print_id, + _poster_canvas_rooms.canvas_room_id as room_id, + poster_interiors.position as position + FROM _poster_canvas_products + JOIN interiors poster_interiors ON poster_interiors.print_id = _poster_canvas_products.poster_print_id + JOIN _poster_canvas_rooms ON poster_interiors.room_id = _poster_canvas_rooms.poster_room_id + ) x; + + + -- move own uploaded images last + UPDATE interiors i1 SET + position = ( + SELECT max(position) + 1 + FROM interiors i2 + WHERE i1.print_id = i2.print_id + ) + WHERE i1.room_id IS NULL AND i1.print_id IN (SELECT canvas_print_id from _poster_canvas_products); + + + -- finally delete the temporary tables + DROP TABLE _poster_canvas_products; + DROP TABLE _poster_canvas_rooms; +COMMIT;