P5-6898 Reduce framed print and poster interiors (#209)
This commit is contained in:
@@ -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
|
||||
;
|
||||
|
||||
Reference in New Issue
Block a user