From 9945b342fe11b8518c7d048792a699fa11b0b5b1 Mon Sep 17 00:00:00 2001 From: fredrikphotowall <35255659+fredrikphotowall@users.noreply.github.com> Date: Wed, 7 Apr 2021 13:46:59 +0200 Subject: [PATCH] P5-6898 Reduce framed print and poster interiors (#209) --- migrations/000.323.sql | 83 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 migrations/000.323.sql diff --git a/migrations/000.323.sql b/migrations/000.323.sql new file mode 100644 index 0000000..b0d822b --- /dev/null +++ b/migrations/000.323.sql @@ -0,0 +1,83 @@ +-- P5-6898 Prune posters and framed print interiors + +-- 1. Delete all poster interiors except first two +with poster_interiors_to_delete as ( + select id + from interiors main + join "product-printproducts" posters on print_id = printid and posters.groupid = 7 -- only poster products + where room_id is not null -- only 3d interiors + and position >= 2 + -- exclude products that also have own photos + and not exists (select 1 from interiors o_p where o_p.print_id = main.print_id and o_p.room_id is null) +) +DELETE + FROM interiors + USING poster_interiors_to_delete + WHERE interiors.id = poster_interiors_to_delete.id +; + +-- 2. Delete the first two framed print interiors +with framed_print_interiors_to_delete as ( + select id + from interiors main + join "product-printproducts" framed_prints on print_id = printid and framed_prints.groupid = 8 -- only framed prints + where room_id is not null -- only 3d interiors + and position < 2 + -- exclude products that also have own photos + and not exists (select 1 from interiors o_p where o_p.print_id = main.print_id and o_p.room_id is null) +) +DELETE + FROM interiors + USING framed_print_interiors_to_delete + WHERE interiors.id = framed_print_interiors_to_delete.id +; + +-- 3. Copy framed print inteiors position 3 and 4 to position 1 and 2 +update interiors +set position = position - 2 +from + "product-printproducts" framedprints +where + print_id = printid and framedprints.groupid = 8 -- only framed prints + and position in (2,3) + and room_id is not null -- only 3d interiors + -- exclude prodotucts that also have own photos + and print_id not in (select print_id from interiors where room_id is null) +; + +-- 4. delete remainig framed print interiors (position 5 and up) +with framed_print_interiors_to_delete as ( + select id + from interiors main + join "product-printproducts" framed_prints on print_id = printid and framed_prints.groupid = 8 -- only framed prints + where room_id is not null -- only 3d interiors + and position >= 2 + -- exclude products that also have own photos + and not exists (select 1 from interiors o_p where o_p.print_id = main.print_id and o_p.room_id is null) +) +DELETE + FROM interiors + USING framed_print_interiors_to_delete + WHERE interiors.id = framed_print_interiors_to_delete.id +; + +-- 5. When framed print product has no interiors at all: copy first poster interior +with framed_prints_without_interiors as ( + select productid, printid from "product-printproducts" where groupid = 8 + and not exists (select 1 from interiors where print_id = printid) +), matching_poster_interiors as ( + select + framed_print.productid productid, + framed_print.printid fp_printid, + replace(rooms.name, 'poster', 'framed-print') fp_room_name + from + framed_prints_without_interiors framed_print + join "product-printproducts" poster on framed_print.productid = poster.productid and poster.groupid = 7 + join interiors poster_interiors on poster.printid = poster_interiors.print_id and position = 0 and room_id is not null + join rooms on room_id = rooms.id +) +INSERT INTO interiors (print_id, position, room_id) + SELECT fp_printid, 0, (select id from rooms where name = fp_room_name) + FROM matching_poster_interiors +; +