fix: NewRemoteReview param struct, atomic review+orphan movie delete
This commit is contained in:
@@ -20,29 +20,28 @@ pub async fn execute(deps: &DeleteReviewDeps, cmd: DeleteReviewCommand) -> Resul
|
||||
}
|
||||
|
||||
let movie_id = review.movie_id().clone();
|
||||
// Read before the write: the orphan event carries the poster to clean up.
|
||||
let poster_path = deps
|
||||
.diary
|
||||
.get_review_history(&movie_id)
|
||||
.await?
|
||||
.movie()
|
||||
.poster_path()
|
||||
.cloned();
|
||||
|
||||
// One write: the review, plus its movie when this was the last review.
|
||||
deps.review
|
||||
.delete_review(
|
||||
.delete_review_and_orphaned_movie(
|
||||
&review_id,
|
||||
&movie_id,
|
||||
&[DomainEvent::ReviewDeleted {
|
||||
review_id: review_id.clone(),
|
||||
user_id: requesting_user_id.clone(),
|
||||
user_id: requesting_user_id,
|
||||
}],
|
||||
&[DomainEvent::MovieDeleted {
|
||||
movie_id: movie_id.clone(),
|
||||
poster_path,
|
||||
}],
|
||||
)
|
||||
.await?;
|
||||
|
||||
let history = deps.diary.get_review_history(&movie_id).await?;
|
||||
if history.viewings().is_empty() {
|
||||
let poster_path = history.movie().poster_path().cloned();
|
||||
deps.movie_command
|
||||
.delete_movie(
|
||||
&movie_id,
|
||||
&[DomainEvent::MovieDeleted {
|
||||
movie_id: movie_id.clone(),
|
||||
poster_path,
|
||||
}],
|
||||
)
|
||||
.await?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
.await
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use domain::ports::{
|
||||
DiaryExporter, DiaryQuery, FollowGraphQuery, MovieCommand, MovieProfileRepository, MovieQuery,
|
||||
DiaryExporter, DiaryQuery, FollowGraphQuery, MovieProfileRepository, MovieQuery,
|
||||
ReviewRepository, UserRepository,
|
||||
};
|
||||
|
||||
@@ -10,7 +10,6 @@ use crate::config::AppSettings;
|
||||
pub struct DeleteReviewDeps {
|
||||
pub review: Arc<dyn ReviewRepository>,
|
||||
pub diary: Arc<dyn DiaryQuery>,
|
||||
pub movie_command: Arc<dyn MovieCommand>,
|
||||
}
|
||||
|
||||
pub struct EditReviewDeps {
|
||||
|
||||
Reference in New Issue
Block a user