hedgedoc/docs/content/dev/db-schema.plantuml
David Mehren fddb7e8c8c
Allow anonymous user colors in DB schema
Every authorship now has an author that saves the color.
The author links to the session and optionally the user.
For anonymous users, the session now can be used to reidentify the user.
 If the user is logged-in, the userId is saved into the author table.
 This allows to identify the user even after the session expired.

 A note created by an anonymous user does not have an owner.
 The cardinality was updated to reflect that.

Signed-off-by: David Mehren <git@herrmehren.de>
2021-04-29 18:07:06 +02:00

179 lines
3.4 KiB
Text

@startuml
hide circle
skinparam nodesep 60
entity "note" {
*id : uuid <<generated>>
--
publicId: text
alias : text
*viewCount : number
*ownerId : uuid <<FK user>>
description: text
title: text
}
entity "user" {
*id : uuid <<generated>>
--
*userName : text
*displayName : text
*createdAt : date
*updatedAt : date
photo : text
email : text
}
entity "auth_token"{
*id : number <<generated>>
--
*userId : uuid
*keyId: text
*accessToken : text
*label: text
*createdAt: date
lastUsed: number
validUntil: number
}
entity "identity" {
*id : number
--
*userId : uuid <<FK user>>
' Identifies the external login provider and is set in the config
*providerName : text
*syncSource : boolean
*createdAt : date
*updatedAt : date
' The unique identifier of a user from the login provider
providerUserId : text
' Token used to access the OAuth provider in the users name. Can be NULL
oauthAccessToken : text
' Password hash. Can be NULL
passwordHash : text
}
entity "session" {
*id : text
--
*expiredAt : number
*json : text
}
entity "revision" {
*id : number <<generated>>
--
*noteId : uuid <<FK note>>
*content : text
*patch : text
*createdAt : date
*length : number
}
entity "authorship" {
*id : uuid <<generated>>
--
*authorId : uuid <FK user>>
*startPos : number
*endPos : number
*createdAt : date
*updatedAt : date
}
entity "revision_authorship" {
*revisionId : number <<FK revision>>
*authorshipId : uuid <<FK authorship>>
}
entity "author" {
*id : number <<generated>>
--
*color : text
sessionID : text <<FK session>>
userId : uuid <<FK user>>
}
entity "note_user_permission" {
*userId : uuid <<FK user>>
*noteId : uuid <<FK note>>
--
*canEdit : boolean
}
entity "group" {
*id : number <<generated>>
--
*name : text <<unique>>
*displayName : text
' Is set to denote a special group
' Special groups are used to map the old share settings like "everyone can edit"
' or "logged in users can view" to the group permission system
*special : boolean
}
entity "note_group_permission" {
*groupId : number <<FK group>>
*noteId : uuid <<FK note>>
--
*canEdit : boolean
}
entity "group_members_user" {
*group : number <<FK group>>
*member : uuid <<FK user>>
}
entity "tag" {
*id: number <<generated>>
*name: text
}
entity "media_upload" {
*id : text <<unique>>
--
*noteId : uuid <<FK note>>
*userId : uuid <<FK user>>
*backendType: text
*fileUrl: text
backendData: text
*createdAt : date
}
entity "history_entry" {
*noteId : uuid <<FK note>>
*userId : uuid <<FK user>>
--
*pinStatus: boolean
*updatedAt: date
}
user "0..1" -- "0..*" note: owner
user "1" -u- "1..*" identity
user "1" -l- "1..*" auth_token: authTokens
user "1" -r- "1..*" session
user "1" -- "0..*" media_upload
user "1" -- "0..*" history_entry
user "0..*" -- "0..*" note
user "0..1" -- "0..*" author
author "1" -- "0..*" authorship
author "1" -u- "0..*" session
revision "0..*" -- "0..*" authorship
(revision, authorship) .. revision_authorship
media_upload "0..*" -- "1" note
note "1" -d- "1..*" revision
note "1" - "0..*" history_entry
note "0..*" -l- "0..*" tag
note "0..*" -- "0..*" group
user "1..*" -- "0..*" group
user "0..*" -- "0..*" note
(user, note) . note_user_permission
(note, group) . note_group_permission
(user, group) . group_members_user
@enduml