use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use tokio_postgres::{Error, Row}; use uuid::Uuid; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct IntervieweeCandidate { pub id: Uuid, pub run_id: Uuid, pub video_id: Uuid, pub proposed_name: String, pub normalized_name: String, pub proposed_real_name: Option, pub proposed_brand_name: Option, pub professional_summary: String, pub profession: Option, pub creator_content_type: Option, pub creator_audience: Option, pub personal_summary: Option, pub evidence: String, pub evidence_hash: Option, pub confidence: f32, pub status: String, pub matched_interviewee_id: Option, pub ai_call_id: Option, pub created_at: DateTime, pub updated_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct NewIntervieweeCandidate { pub run_id: Uuid, pub video_id: Uuid, pub proposed_name: String, pub normalized_name: String, pub proposed_real_name: Option, pub proposed_brand_name: Option, #[serde(default)] pub professional_summary: String, pub profession: Option, pub creator_content_type: Option, pub creator_audience: Option, pub personal_summary: Option, #[serde(default)] pub evidence: String, pub evidence_hash: Option, pub confidence: f32, pub ai_call_id: Option, } impl IntervieweeCandidate { pub fn from_row(row: &Row) -> Result { Ok(Self { id: row.try_get("id")?, run_id: row.try_get("run_id")?, video_id: row.try_get("video_id")?, proposed_name: row.try_get("proposed_name")?, normalized_name: row.try_get("normalized_name")?, proposed_real_name: row.try_get("proposed_real_name")?, proposed_brand_name: row.try_get("proposed_brand_name")?, professional_summary: row.try_get("professional_summary")?, profession: row.try_get("profession")?, creator_content_type: row.try_get("creator_content_type")?, creator_audience: row.try_get("creator_audience")?, personal_summary: row.try_get("personal_summary")?, evidence: row.try_get("evidence")?, evidence_hash: row.try_get("evidence_hash")?, confidence: row.try_get("confidence")?, status: row.try_get("status")?, matched_interviewee_id: row.try_get("matched_interviewee_id")?, ai_call_id: row.try_get("ai_call_id")?, created_at: row.try_get("created_at")?, updated_at: row.try_get("updated_at")?, }) } }