diff --git a/crates/service/job/seedance2_pro_job/src/job_dependencies.rs b/crates/service/job/seedance2_pro_job/src/job_dependencies.rs index c4308635b9..b2c17edbcb 100644 --- a/crates/service/job/seedance2_pro_job/src/job_dependencies.rs +++ b/crates/service/job/seedance2_pro_job/src/job_dependencies.rs @@ -6,6 +6,7 @@ use seedance2pro_client::creds::seedance2pro_session::Seedance2ProSession; use server_environment::ServerEnvironment; use sqlx::MySqlPool; +#[derive(Clone)] pub struct JobDependencies { pub mysql_pool: MySqlPool, diff --git a/crates/service/job/seedance2_pro_job/src/main.rs b/crates/service/job/seedance2_pro_job/src/main.rs index eef70c9319..9c603ed7c2 100644 --- a/crates/service/job/seedance2_pro_job/src/main.rs +++ b/crates/service/job/seedance2_pro_job/src/main.rs @@ -26,6 +26,7 @@ use seedance2pro_client::creds::seedance2pro_session::Seedance2ProSession; use server_environment::ServerEnvironment; use crate::http_server::run_http_server::{launch_http_server, CreateServerArgs}; +use crate::jobs::character_polling_job::character_polling_main_loop::character_polling_main_loop; use crate::jobs::video_polling_job::video_polling_main_loop::video_polling_main_loop; use crate::job_dependencies::JobDependencies; use crate::startup::build_pager::build_pager; @@ -176,7 +177,20 @@ async fn main() -> AnyhowResult<()> { } }); - video_polling_main_loop(job_dependencies).await; + // Spawn both polling loops as concurrent tasks. + let video_deps = job_dependencies.clone(); + let character_deps = job_dependencies; + + let video_handle = tokio::spawn(async move { + video_polling_main_loop(video_deps).await; + }); + + let character_handle = tokio::spawn(async move { + character_polling_main_loop(character_deps).await; + }); + + // Wait for both to finish (they exit when application_shutdown is set). + let _ = tokio::join!(video_handle, character_handle); info!("Shutting down pager worker..."); pager_for_shutdown.shutdown_worker();