77 lines
2.7 KiB
Rust
77 lines
2.7 KiB
Rust
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<String>,
|
|
pub proposed_brand_name: Option<String>,
|
|
pub professional_summary: String,
|
|
pub profession: Option<String>,
|
|
pub creator_content_type: Option<String>,
|
|
pub creator_audience: Option<String>,
|
|
pub personal_summary: Option<String>,
|
|
pub evidence: String,
|
|
pub evidence_hash: Option<String>,
|
|
pub confidence: f32,
|
|
pub status: String,
|
|
pub matched_interviewee_id: Option<Uuid>,
|
|
pub ai_call_id: Option<Uuid>,
|
|
pub created_at: DateTime<Utc>,
|
|
pub updated_at: DateTime<Utc>,
|
|
}
|
|
|
|
#[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<String>,
|
|
pub proposed_brand_name: Option<String>,
|
|
#[serde(default)]
|
|
pub professional_summary: String,
|
|
pub profession: Option<String>,
|
|
pub creator_content_type: Option<String>,
|
|
pub creator_audience: Option<String>,
|
|
pub personal_summary: Option<String>,
|
|
#[serde(default)]
|
|
pub evidence: String,
|
|
pub evidence_hash: Option<String>,
|
|
pub confidence: f32,
|
|
pub ai_call_id: Option<Uuid>,
|
|
}
|
|
|
|
impl IntervieweeCandidate {
|
|
pub fn from_row(row: &Row) -> Result<Self, Error> {
|
|
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")?,
|
|
})
|
|
}
|
|
}
|