Files
leadcast/backend/src/db/models/podcast_channel.rs
T
2026-07-26 21:12:38 -03:00

64 lines
1.9 KiB
Rust

use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use serde_json::Value;
use tokio_postgres::{Error, Row};
use uuid::Uuid;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PodcastChannel {
pub id: Uuid,
pub youtube_channel_id: String,
pub name: String,
pub canonical_url: String,
pub logo_asset_id: Option<Uuid>,
pub status: String,
pub metadata: Value,
pub discovered_at: DateTime<Utc>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub deleted_at: Option<DateTime<Utc>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NewPodcastChannel {
pub youtube_channel_id: String,
pub name: String,
pub canonical_url: String,
pub logo_asset_id: Option<Uuid>,
#[serde(default = "default_candidate_status")]
pub status: String,
#[serde(default)]
pub metadata: Value,
}
fn default_candidate_status() -> String {
"candidate".to_owned()
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PodcastChannelPatch {
pub name: Option<String>,
pub canonical_url: Option<String>,
pub logo_asset_id: Option<Uuid>,
pub status: Option<String>,
pub metadata: Option<Value>,
}
impl PodcastChannel {
pub fn from_row(row: &Row) -> Result<Self, Error> {
Ok(Self {
id: row.try_get("id")?,
youtube_channel_id: row.try_get("youtube_channel_id")?,
name: row.try_get("name")?,
canonical_url: row.try_get("canonical_url")?,
logo_asset_id: row.try_get("logo_asset_id")?,
status: row.try_get("status")?,
metadata: row.try_get("metadata")?,
discovered_at: row.try_get("discovered_at")?,
created_at: row.try_get("created_at")?,
updated_at: row.try_get("updated_at")?,
deleted_at: row.try_get("deleted_at")?,
})
}
}