36 lines
1.2 KiB
Rust
36 lines
1.2 KiB
Rust
use crate::models::common::{ArticleStatus, JsonValue, Visibility};
|
|
use chrono::{DateTime, Utc};
|
|
use serde::{Deserialize, Serialize};
|
|
use uuid::Uuid;
|
|
|
|
/// Long-form article for announcement/news channels.
|
|
/// Unlike a plain Message, an article has a title, cover image,
|
|
/// publish lifecycle, and can be cross-posted to followers.
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, sqlx::FromRow)]
|
|
pub struct Article {
|
|
pub id: Uuid,
|
|
pub channel_id: Uuid,
|
|
pub author_id: Uuid,
|
|
pub title: String,
|
|
pub slug: String,
|
|
pub summary: Option<String>,
|
|
pub body: String,
|
|
pub cover_image_url: Option<String>,
|
|
pub status: ArticleStatus,
|
|
pub visibility: Visibility,
|
|
pub tags: Vec<String>,
|
|
pub published_at: Option<DateTime<Utc>>,
|
|
pub published_by: Option<Uuid>,
|
|
pub scheduled_at: Option<DateTime<Utc>>,
|
|
pub unpublished_at: Option<DateTime<Utc>>,
|
|
pub views_count: i64,
|
|
pub comments_count: i64,
|
|
pub reactions_count: i64,
|
|
pub cross_posted: bool,
|
|
pub cross_posted_from: Option<Uuid>,
|
|
pub metadata: Option<JsonValue>,
|
|
pub created_at: DateTime<Utc>,
|
|
pub updated_at: DateTime<Utc>,
|
|
pub deleted_at: Option<DateTime<Utc>>,
|
|
}
|