use std::sync::Arc; use adapters_postgres::{ PgPool, PostgresJobBatchRepository, PostgresJobRepository, PostgresPipelineRepository, PostgresPluginRepository, }; use application::processing::{ CompleteJobHandler, ConfigurePipelineHandler, EnqueueJobHandler, FailJobHandler, ListJobsHandler, ManagePluginHandler, ReportBatchProgressHandler, StartJobHandler, }; use domain::ports::EventPublisher; use presentation::state::ProcessingHandlers; pub fn build(pool: &PgPool, event_publisher: Arc) -> ProcessingHandlers { let job_repo = Arc::new(PostgresJobRepository::new(pool.clone())); let batch_repo = Arc::new(PostgresJobBatchRepository::new(pool.clone())); let plugin_repo = Arc::new(PostgresPluginRepository::new(pool.clone())); let pipeline_repo = Arc::new(PostgresPipelineRepository::new(pool.clone())); let enqueue_job = Arc::new(EnqueueJobHandler::new( job_repo.clone(), event_publisher.clone(), )); let start_job = Arc::new(StartJobHandler::new(job_repo.clone())); let complete_job = Arc::new(CompleteJobHandler::new( job_repo.clone(), batch_repo.clone(), event_publisher.clone(), )); let fail_job = Arc::new(FailJobHandler::new( job_repo.clone(), batch_repo.clone(), event_publisher, )); let list_jobs = Arc::new(ListJobsHandler::new(job_repo.clone())); let batch_progress = Arc::new(ReportBatchProgressHandler::new(batch_repo, job_repo)); let manage_plugin = Arc::new(ManagePluginHandler::new(plugin_repo.clone())); let configure_pipeline = Arc::new(ConfigurePipelineHandler::new(pipeline_repo, plugin_repo)); ProcessingHandlers { enqueue_job, start_job, complete_job, fail_job, list_jobs, batch_progress, manage_plugin, configure_pipeline, } }