Files
momentry_core/src/core/tmdb/ingest.rs
T

41 lines
1.2 KiB
Rust

use anyhow::{Context, Result};
use serde::Deserialize;
use std::path::Path;
use tracing::{info, warn};
use crate::core::db::PostgresDb;
#[derive(Debug, Deserialize)]
pub struct CastEntry {
pub name: String,
pub role: String,
pub image: Option<String>,
}
/// Ingests TMDB cast data from the JSON file generated by `tmdb_cast_fetcher.py`
pub async fn ingest_cast(db: &PostgresDb, json_path: &str) -> Result<usize> {
let path = Path::new(json_path);
if !path.exists() {
return Err(anyhow::anyhow!("Cast JSON file not found: {}", json_path));
}
let content = std::fs::read_to_string(path)
.with_context(|| format!("Failed to read cast JSON: {}", json_path))?;
let cast_list: Vec<CastEntry> =
serde_json::from_str(&content).with_context(|| "Invalid cast JSON format")?;
let mut count = 0;
for entry in &cast_list {
match db.get_or_create_identity(&entry.name).await {
Ok(_talent) => {
info!("Ingested TMDB cast: {} as {}", entry.name, entry.role);
count += 1;
}
Err(e) => warn!("Failed to create talent '{}': {}", entry.name, e),
}
}
Ok(count)
}