@@ -9,7 +9,10 @@ CREATE TABLE IF NOT EXISTS obligation_definitions
9
9
name VARCHAR NOT NULL ,
10
10
-- implicit index on unique (namespace_id, name) combo
11
11
-- 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
13
16
);
14
17
15
18
CREATE TABLE IF NOT EXISTS obligation_values_standard
@@ -20,7 +23,10 @@ CREATE TABLE IF NOT EXISTS obligation_values_standard
20
23
value VARCHAR NOT NULL ,
21
24
-- implicit index on unique (obligation_definition_id, value) combo
22
25
-- 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
24
30
);
25
31
26
32
CREATE TABLE IF NOT EXISTS obligation_triggers
@@ -29,70 +35,50 @@ CREATE TABLE IF NOT EXISTS obligation_triggers
29
35
obligation_value_id UUID NOT NULL REFERENCES obligation_values_standard(id) ON DELETE CASCADE ,
30
36
action_id UUID NOT NULL REFERENCES actions(id) ON DELETE CASCADE ,
31
37
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
33
42
);
34
43
35
44
CREATE TABLE IF NOT EXISTS obligation_fulfillers
36
45
(
37
46
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
38
47
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
40
52
);
41
53
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();
49
58
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();
74
63
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();
76
68
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();
87
73
88
74
-- +goose StatementEnd
89
75
90
76
-- +goose Down
91
77
-- +goose StatementBegin
92
78
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 ;
97
83
98
84
-- +goose StatementEnd
0 commit comments