159 lines
3.7 KiB
Text
159 lines
3.7 KiB
Text
|
|
erDiagram
|
||
|
|
users {
|
||
|
|
uuid id PK
|
||
|
|
varchar username UK
|
||
|
|
varchar email UK
|
||
|
|
varchar display_name
|
||
|
|
text avatar_url
|
||
|
|
boolean is_active
|
||
|
|
timestamp last_seen
|
||
|
|
varchar role
|
||
|
|
varchar status
|
||
|
|
integer reputation_score
|
||
|
|
boolean is_banned
|
||
|
|
boolean is_muted
|
||
|
|
timestamp created_at
|
||
|
|
timestamp updated_at
|
||
|
|
}
|
||
|
|
|
||
|
|
conversations {
|
||
|
|
uuid id PK
|
||
|
|
varchar name
|
||
|
|
text description
|
||
|
|
varchar conversation_type
|
||
|
|
boolean is_private
|
||
|
|
uuid created_by FK
|
||
|
|
timestamp created_at
|
||
|
|
timestamp updated_at
|
||
|
|
}
|
||
|
|
|
||
|
|
conversation_members {
|
||
|
|
uuid conversation_id PK,FK
|
||
|
|
uuid user_id PK,FK
|
||
|
|
varchar role
|
||
|
|
timestamp joined_at
|
||
|
|
}
|
||
|
|
|
||
|
|
messages {
|
||
|
|
uuid id PK
|
||
|
|
uuid conversation_id FK
|
||
|
|
uuid sender_id FK
|
||
|
|
text content
|
||
|
|
varchar message_type
|
||
|
|
uuid parent_message_id FK
|
||
|
|
uuid reply_to_id FK
|
||
|
|
boolean is_pinned
|
||
|
|
boolean is_deleted
|
||
|
|
boolean is_edited
|
||
|
|
timestamp edited_at
|
||
|
|
jsonb metadata
|
||
|
|
varchar status
|
||
|
|
timestamp created_at
|
||
|
|
timestamp updated_at
|
||
|
|
}
|
||
|
|
|
||
|
|
rooms {
|
||
|
|
integer id PK
|
||
|
|
varchar name UK
|
||
|
|
varchar display_name
|
||
|
|
text description
|
||
|
|
integer creator_id FK
|
||
|
|
boolean is_private
|
||
|
|
integer max_members
|
||
|
|
timestamp created_at
|
||
|
|
timestamp updated_at
|
||
|
|
}
|
||
|
|
|
||
|
|
room_members {
|
||
|
|
integer id PK
|
||
|
|
integer room_id FK
|
||
|
|
integer user_id FK
|
||
|
|
varchar role
|
||
|
|
timestamp joined_at
|
||
|
|
timestamp last_read_at
|
||
|
|
}
|
||
|
|
|
||
|
|
message_reactions {
|
||
|
|
integer id PK
|
||
|
|
integer message_id FK
|
||
|
|
integer user_id FK
|
||
|
|
varchar reaction_type
|
||
|
|
timestamp created_at
|
||
|
|
}
|
||
|
|
|
||
|
|
user_blocks {
|
||
|
|
integer id PK
|
||
|
|
integer blocker_id FK
|
||
|
|
integer blocked_id FK
|
||
|
|
varchar reason
|
||
|
|
timestamp created_at
|
||
|
|
}
|
||
|
|
|
||
|
|
sanctions {
|
||
|
|
integer id PK
|
||
|
|
integer user_id FK
|
||
|
|
integer moderator_id FK
|
||
|
|
varchar sanction_type
|
||
|
|
varchar reason
|
||
|
|
text message
|
||
|
|
timestamp expires_at
|
||
|
|
boolean is_active
|
||
|
|
timestamp created_at
|
||
|
|
}
|
||
|
|
|
||
|
|
notifications {
|
||
|
|
integer id PK
|
||
|
|
integer user_id FK
|
||
|
|
varchar type
|
||
|
|
varchar title
|
||
|
|
text content
|
||
|
|
jsonb metadata
|
||
|
|
boolean is_read
|
||
|
|
timestamp created_at
|
||
|
|
timestamp read_at
|
||
|
|
}
|
||
|
|
|
||
|
|
user_sessions {
|
||
|
|
integer id PK
|
||
|
|
integer user_id FK
|
||
|
|
varchar session_token UK
|
||
|
|
varchar device_info
|
||
|
|
inet ip_address
|
||
|
|
timestamp last_activity
|
||
|
|
timestamp expires_at
|
||
|
|
timestamp created_at
|
||
|
|
boolean is_active
|
||
|
|
}
|
||
|
|
|
||
|
|
audit_logs {
|
||
|
|
integer id PK
|
||
|
|
integer user_id FK
|
||
|
|
varchar action
|
||
|
|
varchar resource_type
|
||
|
|
varchar resource_id
|
||
|
|
jsonb details
|
||
|
|
inet ip_address
|
||
|
|
text user_agent
|
||
|
|
timestamp created_at
|
||
|
|
}
|
||
|
|
|
||
|
|
%% Relations
|
||
|
|
users ||--o{ conversations : "creates"
|
||
|
|
users ||--o{ conversation_members : "participates"
|
||
|
|
conversations ||--o{ conversation_members : "has"
|
||
|
|
conversations ||--o{ messages : "contains"
|
||
|
|
users ||--o{ messages : "sends"
|
||
|
|
messages ||--o{ messages : "replies_to"
|
||
|
|
messages ||--o{ message_reactions : "receives"
|
||
|
|
users ||--o{ message_reactions : "reacts"
|
||
|
|
users ||--o{ user_blocks : "blocks"
|
||
|
|
users ||--o{ user_blocks : "blocked_by"
|
||
|
|
users ||--o{ sanctions : "receives"
|
||
|
|
users ||--o{ sanctions : "moderates"
|
||
|
|
users ||--o{ rooms : "creates"
|
||
|
|
users ||--o{ room_members : "joins"
|
||
|
|
rooms ||--o{ room_members : "has"
|
||
|
|
users ||--o{ notifications : "receives"
|
||
|
|
users ||--o{ user_sessions : "has"
|
||
|
|
users ||--o{ audit_logs : "performs"
|