Compare commits

..

7 commits

Author SHA1 Message Date
fenris 4634026487 Merge pull request 'Gruppen-Steuerung' (#2) from task-416 into main
Reviewed-on: #2
2025-10-23 19:16:02 +02:00
fenris b84e2dd732 [task-416] [add] structure:r6 [add] migration:r5-r6-postgresql 2025-10-23 11:31:59 +02:00
fenris 9a82410937 [add] migration:r4-r5 2025-10-15 00:32:34 +02:00
fenris 7157cf511a [task-396] [add] r5 2025-10-13 13:10:47 +02:00
fenris aebc1556ab [mod] readme 2025-09-26 11:51:13 +02:00
fenris 110345fd77 [mod] readme 2025-09-25 18:00:38 +02:00
fenris 53b9c7d6b4 [task-192]
## Tasks

- [192](https://vikunja.ramsch.sx/tasks/192)

## Zugehörige MRs

- [backend](misc/zeitbild-backend#1)
- [frontend-dali](misc/zeitbild-frontend-dali#1)

Reviewed-on: misc/zeitbild-datamodel#1
Co-authored-by: Fenris Wolf <fenris@folksprak.org>
Co-committed-by: Fenris Wolf <fenris@folksprak.org>
2025-09-25 17:05:35 +02:00
5 changed files with 807 additions and 1 deletions

View file

@ -2,7 +2,7 @@
## Beschreibung ## Beschreibung
- Datenmodell für Zeitbild - Datenmodell für [zeitbild](/zeitbild/meta)
## Nutzung ## Nutzung

View file

@ -0,0 +1,34 @@
-- calendars
ALTER TABLE
"calendars"
ADD COLUMN
"hue" INTEGER NULL
;
UPDATE
"calendars"
SET
"hue" = (("id" * 40503) % 65535)
;
ALTER TABLE
"calendars"
ALTER COLUMN
"hue" SET NOT NULL
;
COMMENT ON COLUMN
"calendars"."hue"
IS
'scaled to a value between 0 and 65535'
;
-- _meta
UPDATE
"_meta"
SET
"revision" = 'r5'
;

View file

@ -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';

View file

@ -0,0 +1,300 @@
{
"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": "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": "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",
"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"]
}
}
]
}
]
}

View file

@ -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"]
}
}
]
}
]
}