use std::sync::Arc; use domain::ports::{ AuthService, DiaryExporter, DiaryRepository, DocumentParser, EventPublisher, GoalRepository, ImportProfileRepository, ImportSessionRepository, MetadataClient, MovieProfileRepository, MovieRepository, ObjectStorage, PasswordHasher, PersonCommand, PersonEnrichmentClient, PersonQuery, PosterFetcherClient, RemoteGoalRepository, RemoteWatchlistRepository, ReviewRepository, SearchCommand, SearchPort, SocialQueryPort, StatsRepository, UserProfileFieldsRepository, UserRepository, UserSettingsRepository, WatchEventRepository, WatchlistRepository, WebhookTokenRepository, WrapUpRepository, WrapUpStatsQuery, }; use crate::config::AppConfig; use crate::ports::ReviewLogger; #[derive(Clone)] pub struct Repositories { pub movie: Arc, pub review: Arc, pub diary: Arc, pub stats: Arc, pub user: Arc, pub import_session: Arc, pub import_profile: Arc, pub movie_profile: Arc, pub watchlist: Arc, pub watch_event: Arc, pub webhook_token: Arc, pub person_command: Arc, pub person_query: Arc, pub search_port: Arc, pub search_command: Arc, pub profile_fields: Arc, pub remote_watchlist: Arc, pub social_query: Arc, pub wrapup_stats: Arc, pub wrapup_repo: Arc, pub goal: Arc, pub user_settings: Arc, pub remote_goal: Arc, } #[derive(Clone)] pub struct Services { pub auth: Arc, pub password_hasher: Arc, pub metadata: Arc, pub poster_fetcher: Arc, pub object_storage: Arc, pub event_publisher: Arc, pub diary_exporter: Arc, pub document_parser: Arc, pub review_logger: Arc, pub person_enrichment: Option>, } #[derive(Clone)] pub struct AppContext { pub repos: Repositories, pub services: Services, pub config: AppConfig, }