refactor: remove watchlist repository references and add get_remote_watchlist use case

This commit is contained in:
2026-05-13 00:34:23 +02:00
parent 53df90ab1f
commit 31fbb79451
7 changed files with 25 additions and 19 deletions

View File

@@ -3,7 +3,7 @@ use domain::ports::EventHandler;
use domain::{ use domain::{
errors::DomainError, errors::DomainError,
events::DomainEvent, events::DomainEvent,
ports::{MovieRepository, ReviewRepository, WatchlistRepository}, ports::{MovieRepository, ReviewRepository},
value_objects::{ReviewId, UserId}, value_objects::{ReviewId, UserId},
}; };
use std::sync::Arc; use std::sync::Arc;
@@ -17,7 +17,6 @@ pub struct ActivityPubEventHandler {
ap_service: Arc<ActivityPubService>, ap_service: Arc<ActivityPubService>,
movie_repository: Arc<dyn MovieRepository>, movie_repository: Arc<dyn MovieRepository>,
review_repository: Arc<dyn ReviewRepository>, review_repository: Arc<dyn ReviewRepository>,
watchlist_repository: Arc<dyn WatchlistRepository>,
base_url: String, base_url: String,
} }
@@ -26,14 +25,12 @@ impl ActivityPubEventHandler {
ap_service: Arc<ActivityPubService>, ap_service: Arc<ActivityPubService>,
movie_repository: Arc<dyn MovieRepository>, movie_repository: Arc<dyn MovieRepository>,
review_repository: Arc<dyn ReviewRepository>, review_repository: Arc<dyn ReviewRepository>,
watchlist_repository: Arc<dyn WatchlistRepository>,
base_url: String, base_url: String,
) -> Self { ) -> Self {
Self { Self {
ap_service, ap_service,
movie_repository, movie_repository,
review_repository, review_repository,
watchlist_repository,
base_url, base_url,
} }
} }

View File

@@ -30,7 +30,6 @@ pub async fn wire(
federation_repo: std::sync::Arc<dyn FederationRepository>, federation_repo: std::sync::Arc<dyn FederationRepository>,
review_store: std::sync::Arc<dyn RemoteReviewRepository>, review_store: std::sync::Arc<dyn RemoteReviewRepository>,
remote_watchlist_repo: std::sync::Arc<dyn domain::ports::RemoteWatchlistRepository>, remote_watchlist_repo: std::sync::Arc<dyn domain::ports::RemoteWatchlistRepository>,
watchlist_repo: std::sync::Arc<dyn domain::ports::WatchlistRepository>,
user_repo: std::sync::Arc<dyn domain::ports::UserRepository>, user_repo: std::sync::Arc<dyn domain::ports::UserRepository>,
movie_repo: std::sync::Arc<dyn domain::ports::MovieRepository>, movie_repo: std::sync::Arc<dyn domain::ports::MovieRepository>,
review_repo: std::sync::Arc<dyn domain::ports::ReviewRepository>, review_repo: std::sync::Arc<dyn domain::ports::ReviewRepository>,
@@ -70,7 +69,6 @@ pub async fn wire(
std::sync::Arc::clone(&concrete), std::sync::Arc::clone(&concrete),
movie_repo, movie_repo,
review_repo, review_repo,
watchlist_repo,
base_url, base_url,
)) as std::sync::Arc<dyn domain::ports::EventHandler>; )) as std::sync::Arc<dyn domain::ports::EventHandler>;

View File

@@ -0,0 +1,7 @@
use domain::{errors::DomainError, models::RemoteWatchlistEntry};
use crate::context::AppContext;
pub async fn execute(ctx: &AppContext, uuid: uuid::Uuid) -> Result<Vec<RemoteWatchlistEntry>, DomainError> {
ctx.remote_watchlist_repository.get_by_derived_uuid(uuid).await
}

View File

@@ -28,3 +28,5 @@ pub mod add_to_watchlist;
pub mod remove_from_watchlist; pub mod remove_from_watchlist;
pub mod get_watchlist; pub mod get_watchlist;
pub mod is_on_watchlist; pub mod is_on_watchlist;
#[cfg(feature = "federation")]
pub mod get_remote_watchlist;

View File

@@ -10,13 +10,16 @@ use chrono::Utc;
use uuid::Uuid; use uuid::Uuid;
#[cfg(feature = "federation")] #[cfg(feature = "federation")]
use application::ports::{ use application::{
ports::{
BlockedActorEntry, BlockedActorsPageData, BlockedDomainEntry, BlockedDomainsPageData, BlockedActorEntry, BlockedActorsPageData, BlockedDomainEntry, BlockedDomainsPageData,
FollowersPageData, FollowingPageData, FollowersPageData, FollowingPageData,
},
use_cases::get_remote_watchlist,
}; };
use application::{ use application::{
commands::{AddToWatchlistCommand, DeleteReviewCommand, MovieInput, RegisterCommand, RemoveFromWatchlistCommand}, commands::{AddToWatchlistCommand, DeleteReviewCommand, MovieInput, RegisterCommand, RemoveFromWatchlistCommand},
queries::{ExportQuery, GetMovieSocialPageQuery, GetWatchlistQuery, LoginQuery}, queries::{ExportQuery, GetMovieSocialPageQuery, GetWatchlistQuery, IsOnWatchlistQuery, LoginQuery},
ports::{ ports::{
HtmlPageContext, LoginPageData, MovieDetailPageData, NewReviewPageData, HtmlPageContext, LoginPageData, MovieDetailPageData, NewReviewPageData,
ProfileSettingsPageData, RegisterPageData, RemoteActorView, WatchlistDisplayEntry, ProfileSettingsPageData, RegisterPageData, RemoteActorView, WatchlistDisplayEntry,
@@ -24,7 +27,7 @@ use application::{
}, },
use_cases::{ use_cases::{
add_to_watchlist, delete_review, export_diary as export_diary_uc, get_movie_social_page, add_to_watchlist, delete_review, export_diary as export_diary_uc, get_movie_social_page,
get_watchlist, log_review, login as login_uc, register as register_uc, get_watchlist, is_on_watchlist, log_review, login as login_uc, register as register_uc,
remove_from_watchlist, update_profile, remove_from_watchlist, update_profile,
}, },
}; };
@@ -975,8 +978,10 @@ pub async fn get_movie_detail(
let has_more = result.reviews.offset + result.reviews.limit let has_more = result.reviews.offset + result.reviews.limit
< result.reviews.total_count as u32; < result.reviews.total_count as u32;
let on_watchlist = match &user_id { let on_watchlist = match &user_id {
Some(uid) => state.app_ctx.watchlist_repository Some(uid) => is_on_watchlist::execute(
.contains(uid, &domain::value_objects::MovieId::from_uuid(movie_id)) &state.app_ctx,
IsOnWatchlistQuery { user_id: uid.value(), movie_id },
)
.await .await
.unwrap_or(false), .unwrap_or(false),
None => false, None => false,
@@ -1056,8 +1061,7 @@ pub async fn get_watchlist_page(
} else { } else {
#[cfg(feature = "federation")] #[cfg(feature = "federation")]
{ {
let remote_entries = state.app_ctx.remote_watchlist_repository let remote_entries = get_remote_watchlist::execute(&state.app_ctx, owner_id)
.get_by_derived_uuid(owner_id)
.await .await
.unwrap_or_default(); .unwrap_or_default();
let display: Vec<WatchlistDisplayEntry> = remote_entries.into_iter().map(|e| { let display: Vec<WatchlistDisplayEntry> = remote_entries.into_iter().map(|e| {

View File

@@ -90,7 +90,6 @@ async fn wire_dependencies() -> anyhow::Result<(AppState, axum::Router)> {
federation_repo, federation_repo,
review_store, review_store,
remote_watchlist_repo.clone(), remote_watchlist_repo.clone(),
Arc::clone(&watchlist_repository),
Arc::clone(&user_repository), Arc::clone(&user_repository),
Arc::clone(&movie_repository), Arc::clone(&movie_repository),
Arc::clone(&review_repository), Arc::clone(&review_repository),

View File

@@ -170,7 +170,6 @@ async fn main() -> anyhow::Result<()> {
fed_federation_repo, fed_federation_repo,
fed_review_store, fed_review_store,
fed_remote_watchlist_repo, fed_remote_watchlist_repo,
Arc::clone(&ctx.watchlist_repository),
fed_user_repo, fed_user_repo,
fed_movie_repo, fed_movie_repo,
fed_review_repo, fed_review_repo,