Compare commits

..

No commits in common. "effcd2c07385d63af4629c1481aa8a85b18a36e8" and "828d611f4d0716f3a8f42d3086e334edb653f71d" have entirely different histories.

2 changed files with 211 additions and 213 deletions

View File

@ -305,8 +305,7 @@ CREATE TABLE data.files (
datetime timestamp with time zone DEFAULT clock_timestamp() NOT NULL, datetime timestamp with time zone DEFAULT clock_timestamp() NOT NULL,
notes text, notes text,
metadata jsonb, metadata jsonb,
creator_id smallint NOT NULL, creator_id smallint NOT NULL
is_deleted boolean DEFAULT false NOT NULL
); );

View File

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