feat: atomic review writes with events
This commit is contained in:
@@ -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(())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user