use std::sync::Arc; use application::{ catalog::{ CreateStackHandler, DeleteAssetHandler, DeleteStackHandler, DetectLivePhotosHandler, GetAssetHandler, GetDateSummaryHandler, GetStackHandler, GetTimelineHandler, ListDuplicatesHandler, ListStacksHandler, ListTrashHandler, ReadAssetFileHandler, ReadDerivativeHandler, RegisterAssetHandler, ResolveDuplicateHandler, RestoreAssetHandler, SearchAssetsHandler, UpdateMetadataHandler, }, identity::{ GetProfileHandler, LoginUserHandler, LogoutHandler, RefreshTokenHandler, RegisterUserHandler, }, organization::{ CreateAlbumHandler, DeleteAlbumHandler, GetAlbumHandler, ListAlbumsHandler, ManageAlbumEntriesHandler, TagAssetHandler, UpdateAlbumHandler, }, processing::{ CompleteJobHandler, ConfigurePipelineHandler, EnqueueJobHandler, FailJobHandler, ListJobsHandler, ListPipelinesHandler, ListPluginsHandler, ManagePluginHandler, ReportBatchProgressHandler, StartJobHandler, }, sharing::{ AccessSharedResourceHandler, GenerateShareLinkHandler, RevokeShareHandler, ShareResourceHandler, }, sidecar::{ DetectExternalChangesHandler, ExportSidecarHandler, FullExportHandler, FullImportHandler, ImportSidecarHandler, ResolveConflictHandler, }, storage::{ CheckQuotaHandler, DeleteLibraryPathHandler, DeleteVolumeHandler, IngestAssetHandler, ListAllLibraryPathsHandler, ListIngestPathsHandler, ListVolumesHandler, RegisterLibraryPathHandler, RegisterVolumeHandler, }, }; use domain::ports::{RefreshTokenRepository, TokenIssuer}; #[derive(Clone)] pub struct IdentityHandlers { pub register: Arc, pub login: Arc, pub get_profile: Arc, pub refresh: Arc, pub logout: Arc, pub refresh_token_repo: Arc, } #[derive(Clone)] pub struct CatalogHandlers { pub ingest_asset: Arc, pub get_asset: Arc, pub get_timeline: Arc, pub get_date_summary: Arc, pub update_metadata: Arc, pub read_asset_file: Arc, pub read_derivative: Arc, pub register_asset: Arc, pub delete_asset: Arc, pub restore_asset: Arc, pub list_trash: Arc, pub search_assets: Arc, pub list_duplicates: Arc, pub resolve_duplicate: Arc, pub create_stack: Arc, pub get_stack: Arc, pub delete_stack: Arc, pub detect_live_photos: Arc, pub list_stacks: Arc, } #[derive(Clone)] pub struct OrganizationHandlers { pub create_album: Arc, pub delete_album: Arc, pub get_album: Arc, pub list_albums: Arc, pub manage_album_entries: Arc, pub update_album: Arc, pub tag_asset: Arc, } #[derive(Clone)] pub struct StorageHandlers { pub register_volume: Arc, pub delete_volume: Arc, pub list_volumes: Arc, pub register_library_path: Arc, pub list_ingest_paths: Arc, pub list_all_library_paths: Arc, pub delete_library_path: Arc, pub check_quota: Arc, } #[derive(Clone)] pub struct SharingHandlers { pub share_resource: Arc, pub generate_link: Arc, pub revoke: Arc, pub access: Arc, } #[derive(Clone)] pub struct SidecarHandlers { pub export: Arc, pub detect_changes: Arc, pub import: Arc, pub resolve: Arc, pub full_export: Arc, pub full_import: Arc, } #[derive(Clone)] pub struct ProcessingHandlers { pub enqueue_job: Arc, pub start_job: Arc, pub complete_job: Arc, pub fail_job: Arc, pub list_jobs: Arc, pub batch_progress: Arc, pub manage_plugin: Arc, pub list_plugins: Arc, pub configure_pipeline: Arc, pub list_pipelines: Arc, } #[derive(Clone)] pub struct AppState { pub identity: IdentityHandlers, pub catalog: CatalogHandlers, pub organization: OrganizationHandlers, pub storage: StorageHandlers, pub sharing: SharingHandlers, pub sidecar: SidecarHandlers, pub processing: ProcessingHandlers, pub token_issuer: Arc, }