From b84e2dd732f740c183334e8568660128581de6e3 Mon Sep 17 00:00:00 2001 From: Fenris Wolf Date: Thu, 23 Oct 2025 11:31:59 +0200 Subject: [PATCH] [task-416] [add] structure:r6 [add] migration:r5-r6-postgresql --- source/migrations/r5-r6.postgresql.sql | 48 +++ source/structure/r6.sindri.json | 424 +++++++++++++++++++++++++ 2 files changed, 472 insertions(+) create mode 100644 source/migrations/r5-r6.postgresql.sql create mode 100644 source/structure/r6.sindri.json diff --git a/source/migrations/r5-r6.postgresql.sql b/source/migrations/r5-r6.postgresql.sql new file mode 100644 index 0000000..5525aab --- /dev/null +++ b/source/migrations/r5-r6.postgresql.sql @@ -0,0 +1,48 @@ +-- groups +CREATE TABLE + groups( + "id" SERIAL, + "name" VARCHAR(63) NOT NULL, + "label" VARCHAR(255) NOT NULL, + UNIQUE ("name"), + UNIQUE ("id") + ) +; + +-- user_groups +CREATE TABLE + user_groups( + "id" SERIAL, + "user_id" INTEGER NOT NULL, + "group_id" INTEGER NOT NULL, + FOREIGN KEY ("user_id") REFERENCES "users"("id"), + FOREIGN KEY ("group_id") REFERENCES "groups"("id"), + UNIQUE ("user_id","group_id"), + UNIQUE ("id") + ) +; + +-- calendar_access_attributed_group +CREATE TABLE + calendar_access_attributed_group( + "id" SERIAL, + "calendar_id" INTEGER NOT NULL, + "group_id" INTEGER NOT NULL, + "level" INTEGER NOT NULL, + FOREIGN KEY ("calendar_id") REFERENCES "calendars"("id"), + FOREIGN KEY ("group_id") REFERENCES "groups"("id"), + UNIQUE ("calendar_id","group_id"), + UNIQUE ("id") + ) +; +COMMENT ON COLUMN calendar_access_attributed_group.level IS '0:none | 1:view | 2:edit | 3:admin'; + +-- calendar_access_attributed_user +ALTER TABLE + calendar_access_attributed + RENAME TO + calendar_access_attributed_user +; + +-- meta +UPDATE _meta SET revision = 'r6'; diff --git a/source/structure/r6.sindri.json b/source/structure/r6.sindri.json new file mode 100644 index 0000000..1f32faf --- /dev/null +++ b/source/structure/r6.sindri.json @@ -0,0 +1,424 @@ +{ + "domains": [ + { + "name": "sessions", + "data_fields": [ + { + "name": "key", + "type": "string_medium", + "nullable": false + }, + { + "name": "data", + "type": "string_long", + "nullable": false, + "description": "JSON" + } + ], + "constraints": [ + { + "kind": "unique", + "parameters": { + "fields": ["key"] + } + } + ] + }, + { + "name": "auth_internal", + "key_field": null, + "data_fields": [ + { + "name": "name", + "type": "string_short", + "nullable": false + }, + { + "name": "password_image", + "type": "string_medium", + "nullable": false + } + ], + "constraints": [ + { + "kind": "unique", + "parameters": { + "fields": ["name"] + } + } + ] + }, + { + "name": "groups", + "key_field": { + "name": "id" + }, + "data_fields": [ + { + "name": "name", + "type": "string_short", + "nullable": false + }, + { + "name": "label", + "type": "string_medium", + "nullable": false + } + ], + "constraints": [ + { + "kind": "unique", + "parameters": { + "fields": ["name"] + } + } + ] + }, + { + "name": "users", + "key_field": { + "name": "id" + }, + "data_fields": [ + { + "name": "name", + "type": "string_short", + "nullable": false + }, + { + "name": "email_address", + "type": "string_medium", + "nullable": true + }, + { + "name": "dav_token", + "type": "string_medium", + "nullable": true + } + ], + "constraints": [ + { + "kind": "unique", + "parameters": { + "fields": ["name"] + } + } + ] + }, + { + "name": "user_groups", + "key_field": { + "name": "id" + }, + "data_fields": [ + { + "name": "user_id", + "type": "integer", + "nullable": false + }, + { + "name": "group_id", + "type": "integer", + "nullable": false + } + ], + "constraints": [ + { + "kind": "foreign_key", + "parameters": { + "fields": ["user_id"], + "reference": { + "name": "users", + "fields": ["id"] + } + } + }, + { + "kind": "foreign_key", + "parameters": { + "fields": ["group_id"], + "reference": { + "name": "groups", + "fields": ["id"] + } + } + }, + { + "kind": "unique", + "parameters": { + "fields": ["user_id", "group_id"] + } + } + ] + }, + { + "name": "local_resources", + "key_field": { + "name": "id" + }, + "data_fields": [ + { + "name": "_dummy", + "type": "integer", + "nullable": true + } + ], + "constraints": [ + ] + }, + { + "name": "local_resource_events", + "key_field": { + "name": "id" + }, + "data_fields": [ + { + "name": "local_resource_id", + "type": "integer", + "nullable": false + }, + { + "name": "name", + "type": "string_medium", + "nullable": false + }, + { + "name": "begin", + "type": "string_medium", + "nullable": false + }, + { + "name": "end", + "type": "string_medium", + "nullable": true + }, + { + "name": "location", + "type": "string_medium", + "nullable": true + }, + { + "name": "link", + "type": "string_medium", + "nullable": true + }, + { + "name": "description", + "type": "string_long", + "nullable": true + } + ], + "constraints": [ + { + "kind": "foreign_key", + "parameters": { + "fields": ["local_resource_id"], + "reference": { + "name": "local_resources", + "fields": ["id"] + } + } + } + ] + }, + { + "name": "ics_feed_resources", + "key_field": { + "name": "id" + }, + "data_fields": [ + { + "name": "url", + "type": "string_medium", + "nullable": false + }, + { + "name": "from_fucked_up_wordpress", + "type": "boolean", + "nullable": false + } + ], + "constraints": [ + ] + }, + { + "name": "resources", + "key_field": { + "name": "id" + }, + "data_fields": [ + { + "name": "kind", + "type": "string_short", + "nullable": false, + "description": "»local« | »ics_feed«" + }, + { + "name": "sub_id", + "type": "integer", + "nullable": false, + "description": "local_resources.id | ics_feed_resources.id" + } + ], + "constraints": [ + { + "kind": "unique", + "parameters": { + "fields": ["kind","sub_id"] + } + } + ] + }, + { + "name": "calendars", + "key_field": { + "name": "id" + }, + "data_fields": [ + { + "name": "name", + "type": "string_medium", + "nullable": false + }, + { + "name": "access_public", + "type": "boolean", + "nullable": false + }, + { + "name": "access_level_default", + "type": "integer", + "nullable": false, + "description": "0:none | 1:view | 2:edit | 3:admin" + }, + { + "name": "resource_id", + "type": "integer", + "nullable": false + }, + { + "name": "hue", + "type": "integer", + "nullable": false, + "description": "scaled to a value between 0 and 65535" + } + ], + "constraints": [ + { + "kind": "foreign_key", + "parameters": { + "fields": ["resource_id"], + "reference": { + "name": "resources", + "fields": ["id"] + } + } + } + ] + }, + { + "name": "calendar_access_attributed_group", + "key_field": { + "name": "id" + }, + "data_fields": [ + { + "name": "calendar_id", + "type": "integer", + "nullable": false + }, + { + "name": "group_id", + "type": "integer", + "nullable": false + }, + { + "name": "level", + "type": "integer", + "nullable": false, + "description": "0:none | 1:view | 2:edit | 3:admin" + } + ], + "constraints": [ + { + "kind": "foreign_key", + "parameters": { + "fields": ["calendar_id"], + "reference": { + "name": "calendars", + "fields": ["id"] + } + } + }, + { + "kind": "foreign_key", + "parameters": { + "fields": ["group_id"], + "reference": { + "name": "groups", + "fields": ["id"] + } + } + }, + { + "kind": "unique", + "parameters": { + "fields": ["calendar_id","group_id"] + } + } + ] + }, + { + "name": "calendar_access_attributed_user", + "key_field": { + "name": "id" + }, + "data_fields": [ + { + "name": "calendar_id", + "type": "integer", + "nullable": false + }, + { + "name": "user_id", + "type": "integer", + "nullable": false + }, + { + "name": "level", + "type": "integer", + "nullable": false, + "description": "0:none | 1:view | 2:edit | 3:admin" + } + ], + "constraints": [ + { + "kind": "foreign_key", + "parameters": { + "fields": ["calendar_id"], + "reference": { + "name": "calendars", + "fields": ["id"] + } + } + }, + { + "kind": "foreign_key", + "parameters": { + "fields": ["user_id"], + "reference": { + "name": "users", + "fields": ["id"] + } + } + }, + { + "kind": "unique", + "parameters": { + "fields": ["calendar_id","user_id"] + } + } + ] + } + ] +} -- 2.47.3