From a258fd4b280a93b51226605eabd9439f7ff2d302 Mon Sep 17 00:00:00 2001 From: damien DELPY Date: Tue, 3 Dec 2024 21:27:39 +0100 Subject: [PATCH] feat: 2 new triggers to purchase smthing. --- PostgreSQL/src/create.sql | 46 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/PostgreSQL/src/create.sql b/PostgreSQL/src/create.sql index d0a69a5..ca4e1d4 100644 --- a/PostgreSQL/src/create.sql +++ b/PostgreSQL/src/create.sql @@ -407,7 +407,7 @@ BEGIN END; $$ LANGUAGE plpgsql; -CREATE TRIGGER note_veryfier +CREATE TRIGGER trigger_note_veryfier BEFORE INSERT OR UPDATE ON noter FOR EACH ROW EXECUTE FUNCTION note_veryfier(); @@ -447,10 +447,52 @@ BEGIN END; $$ LANGUAGE plpgsql; -CREATE TRIGGER delete_cascade_piece +CREATE TRIGGER trigger_delete_cascade_piece AFTER DELETE ON pieces FOR EACH ROW EXECUTE FUNCTION delete_cascade_piece(); +-- Not to buy more than it is possible : quantite_acheter < quantite_contenir. + +CREATE OR REPLACE FUNCTION verify_availability_purchase() +RETURNS TRIGGER AS $$ +BEGIN + IF (SELECT quantite_contenir + FROM contenir + WHERE id_boite + IN (SELECT id_boite FROM contenir WHERE id_piece = NEW.id_piece) + AND id_piece = NEW.id_piece) < NEW.quantite_acheter THEN + RAISE EXCEPTION 'quantite_acheter < quantite_contenir'; + END IF; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER trigger_verify_purchase +BEFORE INSERT ON acheter +FOR EACH ROW +EXECUTE FUNCTION verify_availability_purchase(); + +-- When a purchase is done, remove the pieces from contenir. + +CREATE OR REPLACE FUNCTION after_set_purchase() +RETURNS TRIGGER AS $$ +BEGIN + UPDATE contenir + SET quantite_contenir = quantite_contenir - NEW.quantite_acheter + WHERE id_piece = NEW.id_piece + AND id_boite + IN (SELECT id_boite FROM contenir WHERE id_piece = NEW.id_piece); + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER trigger_set_purchase +AFTER INSERT ON acheter +FOR EACH ROW +EXECUTE FUNCTION after_set_purchase(); + -- ============================================================================