use std::sync::Arc; use domain::ports::{ AuthService, DiaryExporter, DiaryRepository, DocumentParser, EventPublisher, ImageStorage, ImportProfileRepository, ImportSessionRepository, MetadataClient, MovieProfileRepository, MovieRepository, PasswordHasher, PersonCommand, PersonQuery, PosterFetcherClient, RemoteWatchlistRepository, ReviewRepository, SearchCommand, SearchPort, SocialQueryPort, StatsRepository, UserProfileFieldsRepository, UserRepository, WatchEventRepository, WatchlistRepository, WrapUpRepository, WrapUpStatsQuery, WebhookTokenRepository, }; use crate::config::AppConfig; #[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, } #[derive(Clone)] pub struct Services { pub auth: Arc, pub password_hasher: Arc, pub metadata: Arc, pub poster_fetcher: Arc, pub image_storage: Arc, pub event_publisher: Arc, pub diary_exporter: Arc, pub document_parser: Arc, } #[derive(Clone)] pub struct AppContext { pub repos: Repositories, pub services: Services, pub config: AppConfig, }