213 lines
4.2 KiB
Plaintext
213 lines
4.2 KiB
Plaintext
@startuml Tanabata File Manager entity relationship diagram
|
|
|
|
' skinparam linetype ortho
|
|
|
|
|
|
' ========== SYSTEM ==========
|
|
|
|
entity "system.users" as usr {
|
|
* id : smallserial <<generated>>
|
|
--
|
|
* name : varchar(32)
|
|
* password : text
|
|
* is_admin : boolean
|
|
* can_create : boolean
|
|
}
|
|
|
|
entity "system.mime" as mime {
|
|
* id : smallserial <<generated>>
|
|
--
|
|
* name : varchar(127)
|
|
* extension : varchar(16)
|
|
}
|
|
|
|
|
|
' ========== DATA ==========
|
|
|
|
entity "data.categories" as cty {
|
|
* id : uuid <<generated>>
|
|
--
|
|
* name : varchar(256)
|
|
notes : text
|
|
color : char(6)
|
|
' * created_at : timestamptz <<generated>>
|
|
* creator_id : smallint
|
|
' * is_private : boolean
|
|
}
|
|
|
|
cty::creator_id }o--|| usr::id
|
|
|
|
entity "data.files" as fle {
|
|
* id : uuid <<generated>>
|
|
--
|
|
name : varchar(256)
|
|
* mime_id : smallint
|
|
* datetime : timestamptz
|
|
notes : text
|
|
* metadata : jsonb
|
|
' * created_at : timestamptz <<generated>>
|
|
* creator_id : smallint
|
|
' * is_private : boolean
|
|
* is_deleted : boolean
|
|
}
|
|
|
|
fle::mime_id }o--|| mime::id
|
|
fle::creator_id }o--|| usr::id
|
|
|
|
entity "data.tags" as tag {
|
|
* id : uuid <<generated>>
|
|
--
|
|
* name : varchar(256)
|
|
notes : text
|
|
color : char(6)
|
|
category_id : uuid
|
|
' * created_at : timestamptz <<generated>>
|
|
* creator_id : smallint
|
|
' * is_private : boolean
|
|
}
|
|
|
|
tag::category_id }o--o| cty::id
|
|
tag::creator_id }o--|| usr::id
|
|
|
|
entity "data.file_tag" as ft {
|
|
* file_id : uuid
|
|
* tag_id : uuid
|
|
}
|
|
|
|
ft::file_id }o--|| fle::id
|
|
ft::tag_id }o--|| tag::id
|
|
|
|
entity "data.autotags" as atg {
|
|
* trigger_tag_id : uuid
|
|
* add_tag_id : uuid
|
|
--
|
|
* is_active : boolean
|
|
}
|
|
|
|
atg::trigger_tag_id }o--|| tag::id
|
|
atg::add_tag_id }o--|| tag::id
|
|
|
|
entity "data.pools" as pool {
|
|
* id : uuid <<generated>>
|
|
--
|
|
* name : varchar(256)
|
|
notes : text
|
|
' parent_id : uuid
|
|
' * created_at : timestamptz
|
|
* creator_id : smallint
|
|
' * is_private : boolean
|
|
}
|
|
|
|
pool::creator_id }o--|| usr::id
|
|
' pool::parent_id }o--o| pool::id
|
|
|
|
entity "data.file_pool" as fp {
|
|
* file_id : uuid
|
|
* pool_id : uuid
|
|
* number : smallint
|
|
}
|
|
|
|
fp::file_id }o--|| fle::id
|
|
fp::pool_id }o--|| pool::id
|
|
|
|
|
|
' ========== ACL ==========
|
|
|
|
entity "acl.files" as acl_f {
|
|
* user_id : smallint
|
|
* file_id : uuid
|
|
--
|
|
* view : boolean
|
|
* edit : boolean
|
|
}
|
|
|
|
acl_f::user_id }o--|| usr::id
|
|
acl_f::file_id }o--|| fle::id
|
|
|
|
entity "acl.tags" as acl_t {
|
|
* user_id : smallint
|
|
* tag_id : uuid
|
|
--
|
|
* view : boolean
|
|
* edit : boolean
|
|
' * files_view : boolean
|
|
' * files_edit : boolean
|
|
}
|
|
|
|
acl_t::user_id }o--|| usr::id
|
|
acl_t::tag_id }o--|| tag::id
|
|
|
|
entity "acl.categories" as acl_c {
|
|
* user_id : smallint
|
|
* category_id : uuid
|
|
--
|
|
* view : boolean
|
|
* edit : boolean
|
|
' * tags_view : boolean
|
|
' * tags_edit : boolean
|
|
}
|
|
|
|
acl_c::user_id }o--|| usr::id
|
|
acl_c::category_id }o--|| cty::id
|
|
|
|
entity "acl.pools" as acl_p {
|
|
* user_id : smallint
|
|
* pool_id : uuid
|
|
--
|
|
* view : boolean
|
|
* edit : boolean
|
|
' * files_view : boolean
|
|
' * files_edit : boolean
|
|
}
|
|
|
|
acl_p::user_id }o--|| usr::id
|
|
acl_p::pool_id }o--|| pool::id
|
|
|
|
|
|
' ========== ACTIVITY ==========
|
|
|
|
entity "activity.sessions" as ssn {
|
|
* id : serial <<generated>>
|
|
--
|
|
* token : text
|
|
* user_id : smallint
|
|
* user_agent : varchar(512)
|
|
* started_at : timestamptz
|
|
expires_at : timestamptz
|
|
* last_activity : timestamptz
|
|
}
|
|
|
|
ssn::user_id }o--|| usr::id
|
|
|
|
entity "activity.file_views" as fv {
|
|
* file_id : uuid
|
|
* timestamp : timestamptz
|
|
* user_id : smallint
|
|
}
|
|
|
|
fv::file_id }o--|| fle::id
|
|
fv::user_id }o--|| usr::id
|
|
|
|
entity "activity.tag_uses" as tu {
|
|
* tag_id : uuid
|
|
* timestamp : timestamptz
|
|
* user_id : smallint
|
|
--
|
|
* included : boolean
|
|
}
|
|
|
|
tu::tag_id }o--|| tag::id
|
|
tu::user_id }o--|| usr::id
|
|
|
|
entity "activity.pool_views" as pv {
|
|
* pool_id : uuid
|
|
* timestamp : timestamptz
|
|
* user_id : smallint
|
|
}
|
|
|
|
pv::pool_id }o--|| pool::id
|
|
pv::user_id }o--|| usr::id
|
|
|
|
|
|
@enduml
|