domain: add person enrichment fields, event, port

This commit is contained in:
2026-06-11 13:30:19 +02:00
parent 549923b92e
commit 7df24a19ee
15 changed files with 198 additions and 19 deletions

View File

@@ -43,7 +43,9 @@ pub use import::{
};
pub use import_profile::ImportProfile;
pub use import_session::ImportSession;
pub use person::{CastCredit, CrewCredit, ExternalPersonId, Person, PersonCredits, PersonId};
pub use person::{
CastCredit, CrewCredit, ExternalPersonId, Person, PersonCredits, PersonEnrichmentData, PersonId,
};
pub use search::{
EntityType, IndexableDocument, MovieSearchHit, PersonSearchHit, SearchFilters, SearchQuery,
SearchResults,

View File

@@ -46,15 +46,56 @@ pub struct Person {
name: String,
known_for_department: Option<String>,
profile_path: Option<String>,
biography: Option<String>,
birthday: Option<chrono::NaiveDate>,
deathday: Option<chrono::NaiveDate>,
place_of_birth: Option<String>,
also_known_as: Vec<String>,
homepage: Option<String>,
imdb_id: Option<String>,
enriched_at: Option<chrono::DateTime<chrono::Utc>>,
}
impl Person {
#[allow(clippy::too_many_arguments)]
pub fn new(
id: PersonId,
external_id: ExternalPersonId,
name: String,
known_for_department: Option<String>,
profile_path: Option<String>,
biography: Option<String>,
birthday: Option<chrono::NaiveDate>,
deathday: Option<chrono::NaiveDate>,
place_of_birth: Option<String>,
also_known_as: Vec<String>,
homepage: Option<String>,
imdb_id: Option<String>,
enriched_at: Option<chrono::DateTime<chrono::Utc>>,
) -> Self {
Self {
id,
external_id,
name,
known_for_department,
profile_path,
biography,
birthday,
deathday,
place_of_birth,
also_known_as,
homepage,
imdb_id,
enriched_at,
}
}
pub fn basic(
id: PersonId,
external_id: ExternalPersonId,
name: String,
known_for_department: Option<String>,
profile_path: Option<String>,
) -> Self {
Self {
id,
@@ -62,6 +103,14 @@ impl Person {
name,
known_for_department,
profile_path,
biography: None,
birthday: None,
deathday: None,
place_of_birth: None,
also_known_as: vec![],
homepage: None,
imdb_id: None,
enriched_at: None,
}
}
@@ -84,6 +133,49 @@ impl Person {
pub fn profile_path(&self) -> Option<&str> {
self.profile_path.as_deref()
}
pub fn biography(&self) -> Option<&str> {
self.biography.as_deref()
}
pub fn birthday(&self) -> Option<chrono::NaiveDate> {
self.birthday
}
pub fn deathday(&self) -> Option<chrono::NaiveDate> {
self.deathday
}
pub fn place_of_birth(&self) -> Option<&str> {
self.place_of_birth.as_deref()
}
pub fn also_known_as(&self) -> &[String] {
&self.also_known_as
}
pub fn homepage(&self) -> Option<&str> {
self.homepage.as_deref()
}
pub fn imdb_id(&self) -> Option<&str> {
self.imdb_id.as_deref()
}
pub fn enriched_at(&self) -> Option<chrono::DateTime<chrono::Utc>> {
self.enriched_at
}
}
#[derive(Clone, Debug)]
pub struct PersonEnrichmentData {
pub biography: Option<String>,
pub birthday: Option<chrono::NaiveDate>,
pub deathday: Option<chrono::NaiveDate>,
pub place_of_birth: Option<String>,
pub also_known_as: Vec<String>,
pub homepage: Option<String>,
pub imdb_id: Option<String>,
}
#[derive(Clone, Debug)]

View File

@@ -4,7 +4,7 @@ use super::*;
fn person_new() {
let ext = ExternalPersonId::new("tmdb:12345");
let pid = PersonId::from_external(&ext);
let p = Person::new(
let p = Person::basic(
pid,
ext,
"Keanu Reeves".into(),
@@ -38,7 +38,7 @@ fn person_id_deterministic() {
fn person_credits_default_empty() {
let ext = ExternalPersonId::new("tmdb:1");
let pid = PersonId::from_external(&ext);
let p = Person::new(pid, ext, "Test".into(), None, None);
let p = Person::basic(pid, ext, "Test".into(), None, None);
let credits = PersonCredits {
person: p,
cast: vec![],