use std::sync::Arc; use application::{ catalog::{ GetAssetHandler, GetTimelineHandler, ReadAssetFileHandler, RegisterAssetHandler, UpdateMetadataHandler, }, identity::{GetProfileHandler, LoginUserHandler, RegisterUserHandler}, organization::{ CreateAlbumHandler, GetAlbumHandler, ManageAlbumEntriesHandler, TagAssetHandler, }, processing::{ CompleteJobHandler, ConfigurePipelineHandler, EnqueueJobHandler, FailJobHandler, ManagePluginHandler, ReportBatchProgressHandler, StartJobHandler, }, sharing::{ AccessSharedResourceHandler, GenerateShareLinkHandler, RevokeShareHandler, ShareResourceHandler, }, sidecar::{ DetectExternalChangesHandler, ExportSidecarHandler, FullExportHandler, FullImportHandler, ImportSidecarHandler, ResolveConflictHandler, }, storage::{ CheckQuotaHandler, IngestAssetHandler, RegisterLibraryPathHandler, RegisterVolumeHandler, }, }; use domain::ports::TokenIssuer; #[derive(Clone)] pub struct IdentityHandlers { pub register: Arc, pub login: Arc, pub get_profile: Arc, } #[derive(Clone)] pub struct CatalogHandlers { pub ingest_asset: Arc, pub get_asset: Arc, pub get_timeline: Arc, pub update_metadata: Arc, pub read_asset_file: Arc, pub register_asset: Arc, } #[derive(Clone)] pub struct OrganizationHandlers { pub create_album: Arc, pub get_album: Arc, pub manage_album_entries: Arc, pub tag_asset: Arc, } #[derive(Clone)] pub struct StorageHandlers { pub register_volume: Arc, pub register_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 batch_progress: Arc, pub manage_plugin: Arc, pub configure_pipeline: 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, }