feat: atomic review writes with events

This commit is contained in:
2026-10-26 00:40:43 +01:00
parent 0236a488fa
commit c8a1e8bfe4
19 changed files with 440 additions and 117 deletions

View File

@@ -2,6 +2,7 @@ use async_trait::async_trait;
use crate::{
errors::DomainError,
events::DomainEvent,
models::Review,
ports::ReviewRepository,
value_objects::{ReviewId, UserId},
@@ -11,11 +12,16 @@ use super::InMemoryStore;
#[async_trait]
impl ReviewRepository for InMemoryStore {
async fn save_review(&self, review: &Review) -> Result<(), DomainError> {
async fn save_review(
&self,
review: &Review,
events: &[DomainEvent],
) -> Result<(), DomainError> {
self.reviews
.write()
.unwrap()
.insert(review.id().value(), review.clone());
self.record_events(events);
Ok(())
}
@@ -28,16 +34,26 @@ impl ReviewRepository for InMemoryStore {
.cloned())
}
async fn update_review(&self, review: &Review) -> Result<(), DomainError> {
async fn update_review(
&self,
review: &Review,
events: &[DomainEvent],
) -> Result<(), DomainError> {
self.reviews
.write()
.unwrap()
.insert(review.id().value(), review.clone());
self.record_events(events);
Ok(())
}
async fn delete_review(&self, review_id: &ReviewId) -> Result<(), DomainError> {
async fn delete_review(
&self,
review_id: &ReviewId,
events: &[DomainEvent],
) -> Result<(), DomainError> {
self.reviews.write().unwrap().remove(&review_id.value());
self.record_events(events);
Ok(())
}