fix: NewRemoteReview param struct, atomic review+orphan movie delete
This commit is contained in:
@@ -4,7 +4,7 @@ use domain::{
|
||||
events::DomainEvent,
|
||||
models::{Review, ReviewSource},
|
||||
ports::ReviewRepository,
|
||||
value_objects::{ReviewId, UserId},
|
||||
value_objects::{MovieId, ReviewId, UserId},
|
||||
};
|
||||
use sqlx::SqlitePool;
|
||||
|
||||
@@ -114,12 +114,15 @@ impl ReviewRepository for SqliteReviewRepository {
|
||||
tx.commit().await.map_err(crate::shared::map_sqlx_error)
|
||||
}
|
||||
|
||||
async fn delete_review(
|
||||
async fn delete_review_and_orphaned_movie(
|
||||
&self,
|
||||
review_id: &ReviewId,
|
||||
events: &[DomainEvent],
|
||||
movie_id: &MovieId,
|
||||
review_events: &[DomainEvent],
|
||||
orphan_events: &[DomainEvent],
|
||||
) -> Result<(), DomainError> {
|
||||
let id = review_id.value().to_string();
|
||||
let movie = movie_id.value().to_string();
|
||||
let mut tx = self
|
||||
.pool
|
||||
.begin()
|
||||
@@ -130,7 +133,19 @@ impl ReviewRepository for SqliteReviewRepository {
|
||||
.execute(&mut *tx)
|
||||
.await
|
||||
.map_err(crate::shared::map_sqlx_error)?;
|
||||
enqueue_events(&mut tx, events).await?;
|
||||
enqueue_events(&mut tx, review_events).await?;
|
||||
let orphaned = sqlx::query(
|
||||
"DELETE FROM movies WHERE id = ? \
|
||||
AND NOT EXISTS (SELECT 1 FROM reviews WHERE movie_id = ?)",
|
||||
)
|
||||
.bind(&movie)
|
||||
.bind(&movie)
|
||||
.execute(&mut *tx)
|
||||
.await
|
||||
.map_err(crate::shared::map_sqlx_error)?;
|
||||
if orphaned.rows_affected() > 0 {
|
||||
enqueue_events(&mut tx, orphan_events).await?;
|
||||
}
|
||||
tx.commit().await.map_err(crate::shared::map_sqlx_error)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user