Files
leadcast/backend/src/views.rs
T
2026-07-26 21:17:57 -03:00

160 lines
4.1 KiB
Rust

use chrono::{DateTime, Utc};
use serde::Serialize;
use uuid::Uuid;
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PodcastView {
pub id: Uuid,
pub youtube_channel_id: String,
pub name: String,
pub url: String,
pub logo_url: Option<String>,
pub description: Option<String>,
pub status: String,
pub videos_count: i64,
pub interviewees_count: i64,
pub last_synced_at: Option<DateTime<Utc>>,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PodcastDiscoveryView {
pub id: String,
pub name: String,
pub url: String,
pub logo_url: Option<String>,
pub description: String,
pub subscribers_text: Option<String>,
pub already_added: bool,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct IntervieweeView {
pub id: Uuid,
pub display_name: String,
pub real_name: Option<String>,
pub brand_name: Option<String>,
pub avatar_url: Option<String>,
pub category: String,
pub professional_summary: String,
pub public_bio: String,
pub profession: Option<String>,
pub content_type: Option<String>,
pub audience: Option<String>,
pub status: String,
pub appearances_count: i64,
pub contacts_count: i64,
pub confidence: f64,
pub last_enriched_at: Option<DateTime<Utc>>,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ContactView {
pub id: Uuid,
pub interviewee_id: Uuid,
pub interviewee_name: String,
pub avatar_url: Option<String>,
#[serde(rename = "type")]
pub contact_type: String,
pub value: String,
pub relationship: String,
pub label: Option<String>,
pub status: String,
pub confidence: f64,
pub source_name: String,
pub source_url: String,
pub last_verified_at: Option<DateTime<Utc>>,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ExecutionRunView {
pub id: Uuid,
pub name: String,
#[serde(rename = "type")]
pub run_type: String,
pub status: String,
pub stage: String,
pub progress: i64,
pub processed: i64,
pub total: i64,
pub current_target: Option<String>,
pub errors_count: i64,
pub estimated_cost: Option<f64>,
pub started_at: Option<DateTime<Utc>>,
pub finished_at: Option<DateTime<Utc>>,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ReviewView {
pub id: Uuid,
pub kind: String,
pub priority: String,
pub title: String,
pub subject: String,
pub summary: String,
pub proposed_value: String,
pub evidence: String,
pub confidence: f64,
pub source_name: Option<String>,
pub source_url: Option<String>,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct DashboardView {
pub metrics: DashboardMetrics,
pub changes: DashboardChanges,
pub contact_distribution: Vec<ContactDistribution>,
pub recent_runs: Vec<ExecutionRunView>,
pub success_rate: f64,
pub contacts_this_week: i64,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct DashboardMetrics {
pub podcasts: i64,
pub interviewees: i64,
pub contacts: i64,
pub active_runs: i64,
pub pending_reviews: i64,
}
#[derive(Debug, Clone, Serialize)]
pub struct DashboardChanges {
pub podcasts: i64,
pub interviewees: i64,
pub contacts: i64,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AiUsageView {
pub month: String,
pub spent_usd: f64,
pub limit_usd: f64,
pub remaining_usd: f64,
pub percent_used: f64,
pub input_cost_per_million_usd: f64,
pub output_cost_per_million_usd: f64,
pub limit_exceeded: bool,
}
#[derive(Debug, Clone, Serialize)]
pub struct ContactDistribution {
#[serde(rename = "type")]
pub contact_type: String,
pub count: i64,
pub percentage: f64,
}