source: db-scripts/triggers/uniqueness_and_training_checks.sql@ 545738f

Last change on this file since 545738f was 42da64d, checked in by Andrej <asumanovski@…>, 8 weeks ago

Fixed auth issue

  • Property mode set to 100644
File size: 1.1 KB
Line 
1-- Add useful DB constraints and checks
2
3-- Unique index: ensure a user has at most one daily intake per date
4DO $$
5BEGIN
6 IF NOT EXISTS (
7 SELECT 1 FROM pg_indexes WHERE schemaname = 'trekr' AND tablename = 'daily_intakes' AND indexname = 'uq_daily_intake_user_date'
8 ) THEN
9 CREATE UNIQUE INDEX uq_daily_intake_user_date ON trekr.daily_intakes (weight_user_id, date);
10 END IF;
11END$$;
12
13-- Prevent inserting training sessions with future date
14CREATE OR REPLACE FUNCTION trekr.fn_check_training_date()
15RETURNS trigger LANGUAGE plpgsql AS $$
16BEGIN
17 IF NEW.date > current_date THEN
18 RAISE EXCEPTION 'Training session date cannot be in the future: %', NEW.date;
19 END IF;
20 RETURN NEW;
21END$$;
22
23DO $$
24BEGIN
25 IF NOT EXISTS (
26 SELECT 1 FROM pg_trigger t
27 JOIN pg_class c ON t.tgrelid = c.oid
28 WHERE t.tgname = 'trg_check_training_date' AND c.relname = 'training_sessions'
29 ) THEN
30 CREATE TRIGGER trg_check_training_date
31 BEFORE INSERT OR UPDATE ON trekr.training_sessions
32 FOR EACH ROW
33 EXECUTE FUNCTION trekr.fn_check_training_date();
34 END IF;
35END$$;
36
Note: See TracBrowser for help on using the repository browser.