Initial commit
This commit is contained in:
86
crates/cgcx-core/src/models.rs
Normal file
86
crates/cgcx-core/src/models.rs
Normal file
@@ -0,0 +1,86 @@
|
||||
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<String>,
|
||||
pub first_name: String,
|
||||
pub role: UserRole,
|
||||
pub accepted_terms_at: Option<DateTime<Utc>>,
|
||||
pub created_at: DateTime<Utc>,
|
||||
}
|
||||
|
||||
#[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<u64>,
|
||||
pub allow_download: bool,
|
||||
pub password_hash: Option<String>,
|
||||
pub created_at: DateTime<Utc>,
|
||||
pub deleted_at: Option<DateTime<Utc>>,
|
||||
}
|
||||
|
||||
#[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<u8>,
|
||||
pub encrypted_hash: Vec<u8>,
|
||||
pub render_flags: u32,
|
||||
pub created_at: DateTime<Utc>,
|
||||
}
|
||||
|
||||
#[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<Utc>,
|
||||
pub resolved_at: Option<DateTime<Utc>>,
|
||||
pub resolver_id: Option<i64>,
|
||||
}
|
||||
|
||||
#[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<Utc>,
|
||||
}
|
||||
Reference in New Issue
Block a user