use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use crate::id::ContentId; #[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)] pub enum UserRole { User, Admin, Banned, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)] pub enum ContentStatus { Staged, Active, Deleted, Blacklisted, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)] pub enum ReportStatus { Open, Dismissed, Actioned, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct User { pub id: i64, pub telegram_username: Option, pub first_name: String, pub role: UserRole, pub accepted_terms_at: Option>, pub created_at: DateTime, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct Content { pub id: ContentId, pub user_id: i64, pub status: ContentStatus, pub view_count: u64, pub max_views: Option, pub allow_download: bool, pub password_hash: Option, pub created_at: DateTime, pub deleted_at: Option>, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct ContentFile { pub content_id: ContentId, pub file_index: u32, pub original_name: String, pub stored_path: std::path::PathBuf, pub mime_type: String, pub size_bytes: u64, pub ciphertext_size_bytes: u64, pub encrypted_key_wrapped: Vec, pub encrypted_hash: Vec, pub render_flags: u32, pub created_at: DateTime, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct Report { pub id: i64, pub content_id: ContentId, pub reporter_user_id: i64, pub reason: String, pub status: ReportStatus, pub created_at: DateTime, pub resolved_at: Option>, pub resolver_id: Option, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct AdminAction { pub id: i64, pub admin_user_id: i64, pub target_type: String, pub target_id: String, pub action: String, pub created_at: DateTime, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct ForwardDefinition { pub id: i64, pub creator_user_id: i64, pub source_chat_id: i64, pub destination_chat_id: i64, pub review_group_id: i64, pub forward_message: String, pub code: String, pub share_mode: String, pub revoked_at: Option>, pub created_at: DateTime, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct ForwardSubmission { pub id: i64, pub forward_id: i64, pub user_id: i64, pub content_id: ContentId, pub status: String, pub review_message_id: Option, pub created_at: DateTime, pub resolved_at: Option>, pub resolver_id: Option, } #[derive(Debug, Clone)] pub struct Punishment { pub id: i64, pub chat_id: i64, pub target_user_id: i64, pub action_type: String, pub duration_seconds: Option, pub reason: Option, pub created_by: i64, pub created_at: String, pub revoked_at: Option, pub revoked_by: Option, pub active: bool, }