source: backend/src/main/resources/db/migration/V3__triggers_and_functions.sql

main
Last change on this file was 700e2f9, checked in by 186079 <matej.milevski@…>, 5 days ago

Init

  • Property mode set to 100644
File size: 2.5 KB
Line 
1CREATE OR REPLACE FUNCTION project.fn_validate_consultation_slots()
2 RETURNS trigger
3 LANGUAGE plpgsql
4 SET search_path = project, public
5AS $$
6DECLARE
7 d date;
8BEGIN
9 IF NEW.consultation_slots IS NULL THEN
10 RETURN NEW;
11 END IF;
12
13 FOREACH d IN ARRAY NEW.consultation_slots
14 LOOP
15 IF d < CURRENT_DATE AND (TG_OP = 'INSERT' OR OLD.consultation_slots IS NULL OR NOT (d = ANY(OLD.consultation_slots))) THEN
16 RAISE EXCEPTION 'consultation_slots contains past date %', d;
17 END IF;
18 END LOOP;
19
20 RETURN NEW;
21END;
22$$;
23CREATE OR REPLACE TRIGGER trg_validate_consultation_slots
24 BEFORE INSERT OR UPDATE
25 ON project.therapist
26 FOR EACH ROW
27EXECUTE FUNCTION project.fn_validate_consultation_slots();
28
29
30CREATE OR REPLACE FUNCTION project.fn_validate_therapy_exp_date()
31 RETURNS trigger
32 LANGUAGE plpgsql
33 SET search_path = project, public
34AS $$
35DECLARE
36 consult_date DATE;
37BEGIN
38 SELECT date INTO consult_date FROM project.consultation WHERE id_consultation = NEW.id_consultation;
39 IF consult_date IS NOT NULL AND NEW.exp_date < consult_date THEN
40 RAISE EXCEPTION 'therapy.exp_date (%) cannot be before consultation date (%)', NEW.exp_date, consult_date;
41 END IF;
42 RETURN NEW;
43END;
44$$;
45CREATE OR REPLACE TRIGGER trg_validate_therapy_exp_date
46 BEFORE INSERT OR UPDATE
47 ON project.therapy
48 FOR EACH ROW
49EXECUTE FUNCTION project.fn_validate_therapy_exp_date();
50
51
52CREATE OR REPLACE FUNCTION project.fn_validate_diary_not_future()
53 RETURNS trigger
54 LANGUAGE plpgsql
55 SET search_path = project, public
56AS $$
57BEGIN
58 IF NEW.date > CURRENT_DATE THEN
59 RAISE EXCEPTION 'diary.date (%) cannot be in the future', NEW.date;
60 END IF;
61 RETURN NEW;
62END;
63$$;
64CREATE OR REPLACE TRIGGER trg_validate_diary_not_future
65 BEFORE INSERT OR UPDATE
66 ON project.diary
67 FOR EACH ROW
68EXECUTE FUNCTION project.fn_validate_diary_not_future();
69
70
71CREATE OR REPLACE FUNCTION project.fn_validate_consultation_payment_date()
72 RETURNS trigger
73 LANGUAGE plpgsql
74 SET search_path = project, public
75AS $$
76BEGIN
77 IF NEW.date_of_payment IS NOT NULL AND NEW.date_of_payment < NEW.date THEN
78 RAISE EXCEPTION 'consultation.date_of_payment (%) cannot be before consultation.date (%)', NEW.date_of_payment, NEW.date;
79 END IF;
80 RETURN NEW;
81END;
82$$;
83CREATE OR REPLACE TRIGGER trg_validate_consultation_payment_date
84 BEFORE INSERT OR UPDATE
85 ON project.consultation
86 FOR EACH ROW
87EXECUTE FUNCTION project.fn_validate_consultation_payment_date();
Note: See TracBrowser for help on using the repository browser.