diff --git a/crates/adapters/activitypub/src/federation_event_bridge.rs b/crates/adapters/activitypub/src/federation_event_bridge.rs index cb2ca05..58d2153 100644 --- a/crates/adapters/activitypub/src/federation_event_bridge.rs +++ b/crates/adapters/activitypub/src/federation_event_bridge.rs @@ -33,16 +33,15 @@ impl k_ap::EventPublisher for FederationEventBridge { inbox, activity, signing_actor_id, - } => { - self.domain_publisher - .publish(&DomainEvent::FederationDeliveryRequested { - inbox_url: inbox.to_string(), - activity_json: activity, - signing_actor_id, - }) - .await - .map_err(|e| anyhow::anyhow!(e.to_string())) - } + } => self + .domain_publisher + .publish(&DomainEvent::FederationDeliveryRequested { + inbox_url: inbox.to_string(), + activity_json: activity, + signing_actor_id, + }) + .await + .map_err(|e| anyhow::anyhow!(e.to_string())), FederationEvent::DeliveryFailed { inbox, error, .. } => { tracing::warn!(inbox = %inbox, error = %error, "federation delivery failed permanently"); Ok(()) diff --git a/crates/application/src/goals/delete.rs b/crates/application/src/goals/delete.rs index 2095f04..526cbec 100644 --- a/crates/application/src/goals/delete.rs +++ b/crates/application/src/goals/delete.rs @@ -1,15 +1,8 @@ -use domain::{ - errors::DomainError, - events::DomainEvent, - value_objects::UserId, -}; +use domain::{errors::DomainError, events::DomainEvent, value_objects::UserId}; use super::{commands::DeleteGoalCommand, deps::GoalCommandDeps}; -pub async fn execute( - deps: &GoalCommandDeps, - cmd: DeleteGoalCommand, -) -> Result<(), DomainError> { +pub async fn execute(deps: &GoalCommandDeps, cmd: DeleteGoalCommand) -> Result<(), DomainError> { let user_id = UserId::from_uuid(cmd.user_id); let g = deps diff --git a/crates/application/src/goals/get.rs b/crates/application/src/goals/get.rs index cb41900..4fe7bbe 100644 --- a/crates/application/src/goals/get.rs +++ b/crates/application/src/goals/get.rs @@ -1,8 +1,4 @@ -use domain::{ - errors::DomainError, - models::GoalWithProgress, - value_objects::UserId, -}; +use domain::{errors::DomainError, models::GoalWithProgress, value_objects::UserId}; use super::{deps::GoalQueryDeps, queries::GetGoalQuery}; @@ -12,11 +8,17 @@ pub async fn execute( ) -> Result, DomainError> { let user_id = UserId::from_uuid(query.user_id); - let found = deps.goal.find_by_user_and_year(&user_id, query.year).await?; + let found = deps + .goal + .find_by_user_and_year(&user_id, query.year) + .await?; let Some(g) = found else { return Ok(None) }; - let current_count = deps.stats.count_reviews_in_year(&user_id, query.year).await?; + let current_count = deps + .stats + .count_reviews_in_year(&user_id, query.year) + .await?; Ok(Some(GoalWithProgress { goal: g, diff --git a/crates/application/src/goals/list.rs b/crates/application/src/goals/list.rs index 340f2eb..b793b3b 100644 --- a/crates/application/src/goals/list.rs +++ b/crates/application/src/goals/list.rs @@ -1,8 +1,4 @@ -use domain::{ - errors::DomainError, - models::GoalWithProgress, - value_objects::UserId, -}; +use domain::{errors::DomainError, models::GoalWithProgress, value_objects::UserId}; use super::{deps::GoalQueryDeps, queries::ListGoalsQuery}; diff --git a/crates/application/src/goals/update.rs b/crates/application/src/goals/update.rs index 5aa890d..16e6df9 100644 --- a/crates/application/src/goals/update.rs +++ b/crates/application/src/goals/update.rs @@ -1,8 +1,5 @@ use domain::{ - errors::DomainError, - events::DomainEvent, - models::GoalWithProgress, - value_objects::UserId, + errors::DomainError, events::DomainEvent, models::GoalWithProgress, value_objects::UserId, }; use super::{commands::UpdateGoalCommand, deps::GoalCommandDeps}; diff --git a/crates/application/src/import/create_session.rs b/crates/application/src/import/create_session.rs index 6e22b53..cc22281 100644 --- a/crates/application/src/import/create_session.rs +++ b/crates/application/src/import/create_session.rs @@ -17,7 +17,9 @@ pub async fn execute( cmd: CreateImportSessionCommand, ) -> Result { let user_id = UserId::from_uuid(cmd.user_id); - deps.import_session.delete_expired_for_user(&user_id).await?; + deps.import_session + .delete_expired_for_user(&user_id) + .await?; let parsed = deps .document_parser diff --git a/crates/application/src/integrations/cleanup.rs b/crates/application/src/integrations/cleanup.rs index 54b11b1..02d7fc8 100644 --- a/crates/application/src/integrations/cleanup.rs +++ b/crates/application/src/integrations/cleanup.rs @@ -5,7 +5,9 @@ use domain::{errors::DomainError, ports::WatchEventCommand}; pub async fn execute(watch_event_command: Arc) -> Result { let cutoff = chrono::Utc::now().naive_utc() - Duration::days(30); - watch_event_command.delete_non_pending_older_than(cutoff).await + watch_event_command + .delete_non_pending_older_than(cutoff) + .await } #[cfg(test)] diff --git a/crates/application/src/test_helpers.rs b/crates/application/src/test_helpers.rs index a0cf0f7..44eb2ae 100644 --- a/crates/application/src/test_helpers.rs +++ b/crates/application/src/test_helpers.rs @@ -9,10 +9,9 @@ use domain::{ GoalRepository, ImportProfileRepository, ImportSessionRepository, MetadataClient, MovieCommand, MovieProfileRepository, MovieQuery, ObjectStorage, PasswordHasher, PersonCommand, PersonQuery, PosterFetcherClient, RefreshSessionRepository, - ReviewRepository, SearchCommand, SearchPort, StatsRepository, - UserProfileFieldsRepository, UserRepository, UserSettingsRepository, WatchEventCommand, - WatchEventQuery, WatchlistRepository, WebhookTokenRepository, - WrapUpRepository, WrapUpStatsQuery, + ReviewRepository, SearchCommand, SearchPort, StatsRepository, UserProfileFieldsRepository, + UserRepository, UserSettingsRepository, WatchEventCommand, WatchEventQuery, + WatchlistRepository, WebhookTokenRepository, WrapUpRepository, WrapUpStatsQuery, }, testing::{ FakeAuthService, FakeDiaryRepository, FakeDocumentParser, FakeMetadataClient, diff --git a/crates/application/src/users/update_profile.rs b/crates/application/src/users/update_profile.rs index 596aefd..ebfb04e 100644 --- a/crates/application/src/users/update_profile.rs +++ b/crates/application/src/users/update_profile.rs @@ -22,9 +22,9 @@ async fn upload_image( let ct = content_type.unwrap_or(""); if !["image/jpeg", "image/png", "image/webp"].contains(&ct) { - return Err(DomainError::ValidationError( - format!("{kind} must be jpeg, png, or webp"), - )); + return Err(DomainError::ValidationError(format!( + "{kind} must be jpeg, png, or webp" + ))); } if let Some(old) = old_path { diff --git a/crates/application/src/watchlist/deps.rs b/crates/application/src/watchlist/deps.rs index d0879ad..75da4a3 100644 --- a/crates/application/src/watchlist/deps.rs +++ b/crates/application/src/watchlist/deps.rs @@ -1,6 +1,8 @@ use std::sync::Arc; -use domain::ports::{EventPublisher, MetadataClient, MovieCommand, MovieQuery, WatchlistRepository}; +use domain::ports::{ + EventPublisher, MetadataClient, MovieCommand, MovieQuery, WatchlistRepository, +}; pub struct WatchlistAddDeps { pub movie_command: Arc, diff --git a/crates/domain/src/testing/in_memory.rs b/crates/domain/src/testing/in_memory.rs index 65773d6..3c7359a 100644 --- a/crates/domain/src/testing/in_memory.rs +++ b/crates/domain/src/testing/in_memory.rs @@ -17,11 +17,11 @@ use crate::{ collections::{PageParams, Paginated}, }, ports::{ - GoalRepository, ImportProfileRepository, ImportSessionRepository, MovieProfileRepository, - MovieCommand, MovieQuery, RefreshSessionRepository, ReviewRepository, + GoalRepository, ImportProfileRepository, ImportSessionRepository, MovieCommand, + MovieProfileRepository, MovieQuery, RefreshSessionRepository, ReviewRepository, UserFederationSettingsQuery, UserProfileFieldsRepository, UserRepository, - UserSettingsRepository, WatchEventCommand, WatchEventQuery, - WatchlistRepository, WebhookTokenRepository, + UserSettingsRepository, WatchEventCommand, WatchEventQuery, WatchlistRepository, + WebhookTokenRepository, }, value_objects::{ Email, ExternalMetadataId, GoalId, ImportProfileId, ImportSessionId, MovieId, MovieTitle, @@ -604,7 +604,6 @@ impl WatchEventQuery for InMemoryWatchEventRepository { && *e.watched_at() > after })) } - } // ── InMemoryImportSessionRepository ───────────────────────────────────────── diff --git a/crates/presentation/src/context.rs b/crates/presentation/src/context.rs index 4c8d51a..5217dae 100644 --- a/crates/presentation/src/context.rs +++ b/crates/presentation/src/context.rs @@ -3,13 +3,12 @@ use std::sync::Arc; use domain::ports::{ AuthService, DiaryExporter, DiaryRepository, DocumentParser, EventPublisher, FederatedProfileQuery, GoalRepository, ImportProfileRepository, ImportSessionRepository, - MetadataClient, MovieCommand, MovieProfileRepository, MovieQuery, ObjectStorage, PasswordHasher, - PersonCommand, PersonEnrichmentClient, PersonQuery, PosterFetcherClient, + MetadataClient, MovieCommand, MovieProfileRepository, MovieQuery, ObjectStorage, + PasswordHasher, PersonCommand, PersonEnrichmentClient, PersonQuery, PosterFetcherClient, RefreshSessionRepository, RemoteGoalRepository, RemoteWatchlistRepository, ReviewRepository, SearchCommand, SearchPort, SocialQueryPort, StatsRepository, UserProfileFieldsRepository, UserRepository, UserSettingsRepository, WatchEventCommand, WatchEventQuery, - WatchlistRepository, - WebhookTokenRepository, WrapUpRepository, WrapUpStatsQuery, + WatchlistRepository, WebhookTokenRepository, WrapUpRepository, WrapUpStatsQuery, }; use application::config::AppConfig; diff --git a/crates/presentation/src/errors.rs b/crates/presentation/src/errors.rs index 073151a..da5e6f5 100644 --- a/crates/presentation/src/errors.rs +++ b/crates/presentation/src/errors.rs @@ -40,9 +40,17 @@ impl IntoResponse for ApiError { match &self.0 { DomainError::InfrastructureError(_) => { tracing::error!("Internal error: {:?}", self.0); - (status, axum::Json(serde_json::json!({"error": "internal server error"}))).into_response() + ( + status, + axum::Json(serde_json::json!({"error": "internal server error"})), + ) + .into_response() } - _ => (status, axum::Json(serde_json::json!({"error": self.0.to_string()}))).into_response(), + _ => ( + status, + axum::Json(serde_json::json!({"error": self.0.to_string()})), + ) + .into_response(), } } } diff --git a/crates/presentation/src/factory.rs b/crates/presentation/src/factory.rs index 3b99011..a78a261 100644 --- a/crates/presentation/src/factory.rs +++ b/crates/presentation/src/factory.rs @@ -3,8 +3,8 @@ use std::sync::Arc; use anyhow::Context; use domain::ports::{ AuthService, LocalApContentQuery, MetadataClient, ObjectStorage, PasswordHasher, - PosterFetcherClient, RefreshSessionRepository, UserProfileFieldsRepository, - WatchEventCommand, WatchEventQuery, WebhookTokenRepository, + PosterFetcherClient, RefreshSessionRepository, UserProfileFieldsRepository, WatchEventCommand, + WatchEventQuery, WebhookTokenRepository, }; pub use infra_wiring::DbPool; diff --git a/crates/presentation/src/handlers/import.rs b/crates/presentation/src/handlers/import.rs index 442712e..1491354 100644 --- a/crates/presentation/src/handlers/import.rs +++ b/crates/presentation/src/handlers/import.rs @@ -19,7 +19,9 @@ use application::import::{ DeleteImportProfileCommand, ExecuteImportCommand, SaveImportProfileCommand, }, create_session as create_import_session, delete_profile as delete_import_profile, - deps::{ApplyMappingDeps, ApplyProfileDeps, CreateSessionDeps, ExecuteImportDeps, SaveProfileDeps}, + deps::{ + ApplyMappingDeps, ApplyProfileDeps, CreateSessionDeps, ExecuteImportDeps, SaveProfileDeps, + }, execute as execute_import, list_profiles as list_import_profiles, save_profile as save_import_profile, }; diff --git a/crates/presentation/src/handlers/integrations.rs b/crates/presentation/src/handlers/integrations.rs index 6e7be2e..11803f2 100644 --- a/crates/presentation/src/handlers/integrations.rs +++ b/crates/presentation/src/handlers/integrations.rs @@ -204,7 +204,13 @@ pub async fn post_dismiss_single( event_ids: vec![event_id], }; - match dismiss_watch_events::execute(state.app_ctx.repos.watch_event_command.clone(), state.app_ctx.repos.watch_event_query.clone(), cmd).await { + match dismiss_watch_events::execute( + state.app_ctx.repos.watch_event_command.clone(), + state.app_ctx.repos.watch_event_query.clone(), + cmd, + ) + .await + { Ok(_) => Redirect::to("/watch-queue").into_response(), Err(e) => { let msg = encode_error(&e.to_string()); diff --git a/crates/presentation/src/handlers/webhook.rs b/crates/presentation/src/handlers/webhook.rs index 8c4edd9..b877f10 100644 --- a/crates/presentation/src/handlers/webhook.rs +++ b/crates/presentation/src/handlers/webhook.rs @@ -251,7 +251,8 @@ pub async fn get_watch_queue( let query = GetWatchQueueQuery { user_id: user.0.value(), }; - let events = get_watch_queue::execute(state.app_ctx.repos.watch_event_query.clone(), query).await?; + let events = + get_watch_queue::execute(state.app_ctx.repos.watch_event_query.clone(), query).await?; let dtos = events .into_iter() @@ -326,7 +327,11 @@ pub async fn post_dismiss_watch_events( event_ids: req.event_ids, }; - let dismissed = - dismiss_watch_events::execute(state.app_ctx.repos.watch_event_command.clone(), state.app_ctx.repos.watch_event_query.clone(), cmd).await?; + let dismissed = dismiss_watch_events::execute( + state.app_ctx.repos.watch_event_command.clone(), + state.app_ctx.repos.watch_event_query.clone(), + cmd, + ) + .await?; Ok(Json(DismissWatchResponse { dismissed })) } diff --git a/crates/presentation/src/openapi/users.rs b/crates/presentation/src/openapi/users.rs index 6f9f292..67e4bed 100644 --- a/crates/presentation/src/openapi/users.rs +++ b/crates/presentation/src/openapi/users.rs @@ -1,6 +1,6 @@ use api_types::{ - ProfileFieldDto, ProfileResponse, ProfileViewData, UpdateProfileFieldsRequest, - UserProfileBase, UserProfileResponse, UserStatsDto, UserSummaryDto, UsersResponse, + ProfileFieldDto, ProfileResponse, ProfileViewData, UpdateProfileFieldsRequest, UserProfileBase, + UserProfileResponse, UserStatsDto, UserSummaryDto, UsersResponse, }; use utoipa::OpenApi; diff --git a/crates/worker/src/db.rs b/crates/worker/src/db.rs index 8c1a696..56e0706 100644 --- a/crates/worker/src/db.rs +++ b/crates/worker/src/db.rs @@ -21,7 +21,7 @@ pub struct WorkerDbOutput { pub import_session: Arc, pub movie_profile: Arc, pub watch_event_command: Arc, - pub watch_event_query: Arc, + pub _watch_event_query: Arc, pub person_command: Arc, pub person_query: Arc, pub search_command: Arc, @@ -60,7 +60,7 @@ pub async fn connect(database_url: &str, backend: &str) -> anyhow::Result anyhow::Result anyhow::Result<()> { let import_session = db.import_session; let movie_profile = db.movie_profile; let watch_event_command = db.watch_event_command; - let watch_event_query = db.watch_event_query; let person_command = db.person_command; let person_query = db.person_query; let search_command = db.search_command;