fix: NewRemoteReview param struct, atomic review+orphan movie delete

This commit is contained in:
2026-10-26 01:19:09 +01:00
parent 9a4d0c1714
commit 7f9c252d35
18 changed files with 261 additions and 116 deletions

View File

@@ -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
}

View File

@@ -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 {