Refactor application context and repository structure
- Updated `AppContext` to include separate repositories for movies, reviews, diaries, and stats. - Modified use cases to utilize the new repository structure, ensuring that the correct repositories are called for their respective operations. - Introduced `DiaryRepository` and `StatsRepository` traits to encapsulate diary and statistics-related operations. - Updated all relevant use cases, handlers, and tests to reflect the changes in repository usage. - Ensured that panic repositories are updated to implement the new traits for testing purposes.
This commit is contained in:
@@ -2,7 +2,7 @@ use async_trait::async_trait;
|
||||
use domain::{
|
||||
errors::DomainError,
|
||||
events::DomainEvent,
|
||||
ports::MovieRepository,
|
||||
ports::{MovieRepository, ReviewRepository},
|
||||
value_objects::{ReviewId, UserId},
|
||||
};
|
||||
use domain::ports::EventHandler;
|
||||
@@ -15,17 +15,19 @@ use crate::urls::{actor_url, review_url};
|
||||
|
||||
pub struct ActivityPubEventHandler {
|
||||
ap_service: Arc<ActivityPubService>,
|
||||
movie_repo: Arc<dyn MovieRepository>,
|
||||
movie_repository: Arc<dyn MovieRepository>,
|
||||
review_repository: Arc<dyn ReviewRepository>,
|
||||
base_url: String,
|
||||
}
|
||||
|
||||
impl ActivityPubEventHandler {
|
||||
pub fn new(
|
||||
ap_service: Arc<ActivityPubService>,
|
||||
movie_repo: Arc<dyn MovieRepository>,
|
||||
movie_repository: Arc<dyn MovieRepository>,
|
||||
review_repository: Arc<dyn ReviewRepository>,
|
||||
base_url: String,
|
||||
) -> Self {
|
||||
Self { ap_service, movie_repo, base_url }
|
||||
Self { ap_service, movie_repository, review_repository, base_url }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +50,7 @@ impl ActivityPubEventHandler {
|
||||
user_id: &UserId,
|
||||
review_id: &ReviewId,
|
||||
) -> anyhow::Result<()> {
|
||||
let review = match self.movie_repo.get_review_by_id(review_id).await? {
|
||||
let review = match self.review_repository.get_review_by_id(review_id).await? {
|
||||
Some(r) => r,
|
||||
None => return Ok(()),
|
||||
};
|
||||
@@ -56,7 +58,7 @@ impl ActivityPubEventHandler {
|
||||
let ap_id = review_url(&self.base_url, review_id);
|
||||
let actor = actor_url(&self.base_url, user_id.value());
|
||||
|
||||
let movie = self.movie_repo.get_movie_by_id(review.movie_id()).await.ok().flatten();
|
||||
let movie = self.movie_repository.get_movie_by_id(review.movie_id()).await.ok().flatten();
|
||||
let movie_title = movie.as_ref()
|
||||
.map(|m| m.title().value().to_string())
|
||||
.unwrap_or_else(|| "Unknown".to_string());
|
||||
|
||||
@@ -4,7 +4,7 @@ use activitypub_base::ApObjectHandler;
|
||||
use async_trait::async_trait;
|
||||
use domain::{
|
||||
models::{Review, ReviewSource},
|
||||
ports::MovieRepository,
|
||||
ports::{DiaryRepository, MovieRepository},
|
||||
value_objects::{Comment, MovieId, Rating, ReviewId, UserId},
|
||||
};
|
||||
use url::Url;
|
||||
@@ -14,7 +14,8 @@ use crate::remote_review_repository::RemoteReviewRepository;
|
||||
use crate::urls::{actor_url, review_url};
|
||||
|
||||
pub struct ReviewObjectHandler {
|
||||
pub movie_repo: Arc<dyn MovieRepository>,
|
||||
pub movie_repository: Arc<dyn MovieRepository>,
|
||||
pub diary_repository: Arc<dyn DiaryRepository>,
|
||||
pub review_store: Arc<dyn RemoteReviewRepository>,
|
||||
pub base_url: String,
|
||||
}
|
||||
@@ -26,7 +27,7 @@ impl ApObjectHandler for ReviewObjectHandler {
|
||||
user_id: uuid::Uuid,
|
||||
) -> anyhow::Result<Vec<(Url, serde_json::Value)>> {
|
||||
let domain_user_id = UserId::from_uuid(user_id);
|
||||
let history = self.movie_repo.get_user_history(&domain_user_id).await?;
|
||||
let history = self.diary_repository.get_user_history(&domain_user_id).await?;
|
||||
|
||||
let mut results = Vec::new();
|
||||
for entry in history {
|
||||
@@ -38,7 +39,7 @@ impl ApObjectHandler for ReviewObjectHandler {
|
||||
let ap_id = review_url(&self.base_url, review.id());
|
||||
let actor_url = actor_url(&self.base_url, user_id);
|
||||
|
||||
let movie = self.movie_repo.get_movie_by_id(review.movie_id()).await.ok().flatten();
|
||||
let movie = self.movie_repository.get_movie_by_id(review.movie_id()).await.ok().flatten();
|
||||
let movie_title = movie.as_ref()
|
||||
.map(|m| m.title().value().to_string())
|
||||
.unwrap_or_else(|| "Unknown".to_string());
|
||||
|
||||
Reference in New Issue
Block a user