@@ -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 ;
4042DEFINE FIELD title ON definition TYPE string;
4143DEFINE FIELD description ON definition TYPE option < string> ;
44+ DEFINE FIELD versions ON definition TYPE array< object> DEFAULT [];
4245DEFINE FIELD updated_at ON definition TYPE datetime VALUE time::now ();
4346DEFINE 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
4777DEFINE TABLE role SCHEMALESS ;
0 commit comments