Skip to content

Commit 31664ec

Browse files
committed
feat: add versions
1 parent 7b1489b commit 31664ec

3 files changed

Lines changed: 32 additions & 3 deletions

File tree

migrations/tenants/003_20250711_213213_create_permissions.down.surql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ BEGIN TRANSACTION;
77
REMOVE FUNCTION IF EXISTS fn::has_permission;
88

99
REMOVE EVENT IF EXISTS prevent_deletion_of_main_realm ON TABLE realm;
10+
REMOVE EVENT IF EXISTS prevent_deletion_of_internal_definitions ON TABLE definition;
11+
REMOVE EVENT IF EXISTS parent_definition_must_be_internal ON TABLE definition;
1012
REMOVE TABLE IF EXISTS realm;
1113
REMOVE TABLE IF EXISTS definition;
1214
REMOVE TABLE IF EXISTS role;

migrations/tenants/003_20250711_213213_create_permissions.surql

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,41 @@ DEFINE FIELD id ON definition TYPE string ASSERT {
3737
};
3838
RETURN true;
3939
};
40+
DEFINE FIELD _parent ON definition TYPE option<string>;
41+
DEFINE FIELD _internal ON definition TYPE bool DEFAULT false;
4042
DEFINE FIELD title ON definition TYPE string;
4143
DEFINE FIELD description ON definition TYPE option<string>;
44+
DEFINE FIELD versions ON definition TYPE array<object> DEFAULT [];
4245
DEFINE FIELD updated_at ON definition TYPE datetime VALUE time::now();
4346
DEFINE FIELD created_at ON definition TYPE datetime VALUE time::now() READONLY;
4447

48+
CREATE definition:definition SET title = "Definition", _internal = true;
49+
CREATE definition:group SET title = "Group", _internal = true;
50+
51+
DEFINE EVENT prevent_deletion_of_internal_definitions ON TABLE definition
52+
WHEN $event = "DELETE"
53+
AND $value._internal = true THEN
54+
{
55+
THROW "Internal definitions cannot be deleted";
56+
};
57+
58+
DEFINE EVENT parent_definition_must_be_internal ON TABLE definition
59+
WHEN $event = "CREATE" THEN {
60+
IF $value._parent = NONE AND $value._internal = false THEN {
61+
THROW "Regular definitions must have an internal parent definition";
62+
} END;
63+
64+
LET $parent_definition = type::thing("definition", $value._parent);
65+
IF not(record::exists($parent_definition)) THEN {
66+
THROW "Parent definition does not exist";
67+
} END;
68+
69+
LET $is_internal = SELECT VALUE _internal FROM ONLY $parent_definition;
70+
IF not($is_internal) THEN {
71+
THROW "Parent definition must be internal";
72+
} END;
73+
};
74+
4575
--------------------------------------------------------------------------------
4676

4777
DEFINE TABLE role SCHEMALESS;

migrations/tenants/010_20250715_003233_add_sample_fixtures.surql

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@ RELATE realm:manilacampus->child_realm_of->realm:manila;
2222
RELATE realm:brisbanecampus->child_realm_of->realm:brisbane;
2323
RELATE realm:seoulcampus->child_realm_of->realm:seoul;
2424

25-
CREATE definition:definition SET title = "Definition";
26-
CREATE definition:group SET title = "Group";
27-
2825
CREATE role:main_admin SET title = "Main Admin";
2926
CREATE role:main_leader SET title = "Main User";
3027
CREATE role:main_guest SET title = "Main Guest";

0 commit comments

Comments
 (0)