structural refactor and codebase improvements
This commit is contained in:
@@ -30,3 +30,11 @@ pub struct ReindexSearchDeps {
|
||||
pub person_command: Arc<dyn PersonCommand>,
|
||||
pub person_query: Arc<dyn PersonQuery>,
|
||||
}
|
||||
|
||||
pub struct GetMovieProfileDeps {
|
||||
pub movie_profile: Arc<dyn MovieProfileRepository>,
|
||||
}
|
||||
|
||||
pub struct GetMoviesDeps {
|
||||
pub movie: Arc<dyn MovieQuery>,
|
||||
}
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use domain::{
|
||||
errors::DomainError,
|
||||
models::{CastMember, CrewMember, ExternalPersonId, MovieProfile, PersonId},
|
||||
ports::MovieProfileRepository,
|
||||
value_objects::MovieId,
|
||||
};
|
||||
use uuid::Uuid;
|
||||
|
||||
use crate::movies::deps::GetMovieProfileDeps;
|
||||
|
||||
pub struct GetMovieProfileQuery {
|
||||
pub movie_id: Uuid,
|
||||
}
|
||||
@@ -61,11 +60,11 @@ fn resolve_crew(member: &CrewMember) -> CrewMemberWithId {
|
||||
}
|
||||
|
||||
pub async fn execute(
|
||||
movie_profile: Arc<dyn MovieProfileRepository>,
|
||||
deps: &GetMovieProfileDeps,
|
||||
query: GetMovieProfileQuery,
|
||||
) -> Result<Option<MovieProfileResult>, DomainError> {
|
||||
let movie_id = MovieId::from_uuid(query.movie_id);
|
||||
let profile = movie_profile.get_by_movie_id(&movie_id).await?;
|
||||
let profile = deps.movie_profile.get_by_movie_id(&movie_id).await?;
|
||||
|
||||
Ok(profile.map(|p| {
|
||||
let cast = p.cast.iter().map(resolve_cast).collect();
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use domain::{
|
||||
errors::DomainError,
|
||||
models::collections::{PageParams, Paginated},
|
||||
models::{MovieFilter, MovieSummary},
|
||||
ports::MovieQuery,
|
||||
};
|
||||
|
||||
use crate::movies::deps::GetMoviesDeps;
|
||||
use crate::movies::queries::GetMoviesQuery;
|
||||
|
||||
pub async fn execute(
|
||||
movie: Arc<dyn MovieQuery>,
|
||||
deps: &GetMoviesDeps,
|
||||
query: GetMoviesQuery,
|
||||
) -> Result<Paginated<MovieSummary>, DomainError> {
|
||||
let page = PageParams::new(query.limit, query.offset)?;
|
||||
@@ -19,7 +17,7 @@ pub async fn execute(
|
||||
genre: query.genre,
|
||||
language: query.language,
|
||||
};
|
||||
movie.list_movies(&page, &filter).await
|
||||
deps.movie.list_movies(&page, &filter).await
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
||||
@@ -8,14 +8,16 @@ use domain::{
|
||||
value_objects::MovieId,
|
||||
};
|
||||
|
||||
use crate::movies::deps::GetMovieProfileDeps;
|
||||
use crate::movies::get_movie_profile::{self, GetMovieProfileQuery};
|
||||
|
||||
#[tokio::test]
|
||||
async fn returns_none_when_no_profile() {
|
||||
let movie_profile = InMemoryMovieProfileRepository::new();
|
||||
let deps = GetMovieProfileDeps { movie_profile };
|
||||
|
||||
let result = get_movie_profile::execute(
|
||||
movie_profile,
|
||||
&deps,
|
||||
GetMovieProfileQuery {
|
||||
movie_id: Uuid::new_v4(),
|
||||
},
|
||||
@@ -64,8 +66,11 @@ async fn returns_profile_with_cast_and_crew() {
|
||||
};
|
||||
profile_repo.upsert(&profile).await.unwrap();
|
||||
|
||||
let deps = GetMovieProfileDeps {
|
||||
movie_profile: profile_repo.clone(),
|
||||
};
|
||||
let result = get_movie_profile::execute(
|
||||
profile_repo.clone(),
|
||||
&deps,
|
||||
GetMovieProfileQuery {
|
||||
movie_id: movie_id.value(),
|
||||
},
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
use domain::testing::InMemoryMovieRepository;
|
||||
|
||||
use crate::movies::{get_movies, queries::GetMoviesQuery};
|
||||
use crate::movies::{deps::GetMoviesDeps, get_movies, queries::GetMoviesQuery};
|
||||
|
||||
#[tokio::test]
|
||||
async fn returns_empty_when_no_movies() {
|
||||
let movie = InMemoryMovieRepository::new();
|
||||
let deps = GetMoviesDeps { movie };
|
||||
|
||||
let result = get_movies::execute(
|
||||
movie,
|
||||
&deps,
|
||||
GetMoviesQuery {
|
||||
limit: None,
|
||||
offset: None,
|
||||
|
||||
Reference in New Issue
Block a user