Skip to content

Commit 212b907

Browse files
committed
remove functions
1 parent 9d88bb4 commit 212b907

File tree

1 file changed

+36
-50
lines changed

1 file changed

+36
-50
lines changed

service/policy/db/migrations/20250703000000_obligations.sql

Lines changed: 36 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -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

1518
CREATE 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

2632
CREATE 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

3544
CREATE 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

Comments
 (0)