@@ -9,7 +9,10 @@ CREATE TABLE IF NOT EXISTS obligation_definitions
99    name VARCHAR  NOT NULL ,
1010    --  implicit index on unique (namespace_id, name) combo
1111    --  index name: obligation_definitions_namespace_id_name_key
12-     UNIQUE (namespace_id, name)
12+     UNIQUE (namespace_id, name),
13+     metadata JSONB,
14+     created_at TIMESTAMP WITH TIME ZONE  NOT NULL  DEFAULT CURRENT_TIMESTAMP ,
15+     updated_at TIMESTAMP WITH TIME ZONE  NOT NULL  DEFAULT CURRENT_TIMESTAMP 
1316);
1417
1518CREATE  TABLE  IF  NOT EXISTS obligation_values_standard
@@ -20,7 +23,10 @@ CREATE TABLE IF NOT EXISTS obligation_values_standard
2023    value VARCHAR  NOT NULL ,
2124    --  implicit index on unique (obligation_definition_id, value) combo
2225    --  index name: obligation_values_standard_obligation_definition_id_value_key
23-     UNIQUE (obligation_definition_id, value)
26+     UNIQUE (obligation_definition_id, value),
27+     metadata JSONB,
28+     created_at TIMESTAMP WITH TIME ZONE  NOT NULL  DEFAULT CURRENT_TIMESTAMP ,
29+     updated_at TIMESTAMP WITH TIME ZONE  NOT NULL  DEFAULT CURRENT_TIMESTAMP 
2430);
2531
2632CREATE  TABLE  IF  NOT EXISTS obligation_triggers
@@ -29,70 +35,50 @@ CREATE TABLE IF NOT EXISTS obligation_triggers
2935    obligation_value_id UUID NOT NULL  REFERENCES  obligation_values_standard(id) ON DELETE CASCADE ,
3036    action_id UUID NOT NULL  REFERENCES  actions(id) ON DELETE CASCADE ,
3137    attribute_value_id UUID NOT NULL  REFERENCES  attribute_values(id) ON DELETE CASCADE ,
32-     UNIQUE(obligation_value_id, action_id, attribute_value_id)
38+     UNIQUE(obligation_value_id, action_id, attribute_value_id),
39+     metadata JSONB,
40+     created_at TIMESTAMP WITH TIME ZONE  NOT NULL  DEFAULT CURRENT_TIMESTAMP ,
41+     updated_at TIMESTAMP WITH TIME ZONE  NOT NULL  DEFAULT CURRENT_TIMESTAMP 
3342);
3443
3544CREATE  TABLE  IF  NOT EXISTS obligation_fulfillers
3645(
3746    id UUID PRIMARY KEY  DEFAULT gen_random_uuid(),
3847    obligation_value_id UUID NOT NULL  REFERENCES  obligation_values_standard(id) ON DELETE CASCADE ,
39-     conditionals JSONB
48+     conditionals JSONB,
49+     metadata JSONB,
50+     created_at TIMESTAMP WITH TIME ZONE  NOT NULL  DEFAULT CURRENT_TIMESTAMP ,
51+     updated_at TIMESTAMP WITH TIME ZONE  NOT NULL  DEFAULT CURRENT_TIMESTAMP 
4052);
4153
42- CREATE OR REPLACE  FUNCTION  get_obligation_tables ()
43- RETURNS text [] AS  $$
44- BEGIN 
45-     RETURN ARRAY[' obligation_definitions'  , ' obligation_values_standard'  , 
46-                  ' obligation_triggers'  , ' obligation_fulfillers'  ];
47- END;
48- $$ LANGUAGE plpgsql;
54+ CREATE  TRIGGER  obligation_definitions_updated_at 
55+     BEFORE UPDATE  ON  obligation_definitions
56+     FOR EACH ROW
57+     EXECUTE FUNCTION update_updated_at();
4958
50- CREATE OR REPLACE  FUNCTION  standardize_tables (tables text [])
51- RETURNS void AS  $$
52- DECLARE table_name text ;
53- BEGIN  
54-     FOREACH table_name IN  ARRAY tables
55-     LOOP
56-         --  Add standard columns to the table
57-         EXECUTE FORMAT(' 
58-             ALTER TABLE %I  
59-             ADD COLUMN metadata JSONB, 
60-             ADD COLUMN created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, 
61-             ADD COLUMN updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP 
62-         '  , table_name);
63-     
64-         --  Create trigger for updating updated_at column
65-         EXECUTE FORMAT(' 
66-             CREATE TRIGGER %I 
67-             BEFORE UPDATE ON %I 
68-             FOR EACH ROW 
69-             EXECUTE FUNCTION update_updated_at() 
70-         '  , table_name::text  ||  ' _updated_at'  , table_name);
71-     END LOOP;
72- END;
73- $$ LANGUAGE plpgsql;
59+ CREATE  TRIGGER  obligation_values_standard_updated_at 
60+     BEFORE UPDATE  ON  obligation_values_standard
61+     FOR EACH ROW
62+     EXECUTE FUNCTION update_updated_at();
7463
75- SELECT  standardize_tables(get_obligation_tables());
64+ CREATE  TRIGGER  obligation_triggers_updated_at 
65+     BEFORE UPDATE  ON  obligation_triggers
66+     FOR EACH ROW
67+     EXECUTE FUNCTION update_updated_at();
7668
77- CREATE OR REPLACE  FUNCTION  drop_tables (tables text [])
78- RETURNS void AS  $$
79- DECLARE table_name text ;
80- BEGIN 
81-     FOREACH table_name IN  ARRAY tables
82-     LOOP
83-         EXECUTE FORMAT(' DROP TABLE IF EXISTS %I'  , table_name);
84-     END LOOP;
85- END;
86- $$ LANGUAGE plpgsql;
69+ CREATE  TRIGGER  obligation_fulfillers_updated_at 
70+     BEFORE UPDATE  ON  obligation_fulfillers
71+     FOR EACH ROW
72+     EXECUTE FUNCTION update_updated_at();
8773
8874--  +goose StatementEnd
8975
9076--  +goose Down
9177--  +goose StatementBegin
9278
93- SELECT  drop_tables(get_obligation_tables()) ;
94- DROP  FUNCTION  IF EXISTS get_obligation_tables ;
95- DROP  FUNCTION  IF EXISTS drop_tables ;
96- DROP  FUNCTION  IF EXISTS standardize_tables ;
79+ DROP   TABLE  IF EXISTS obligation_definitions ;
80+ DROP  TABLE  IF EXISTS obligation_values_standard ;
81+ DROP  TABLE  IF EXISTS obligation_triggers ;
82+ DROP  TABLE  IF EXISTS obligation_fulfillers ;
9783
9884--  +goose StatementEnd
0 commit comments