diff --git a/k-tv-backend/api/src/main.rs b/k-tv-backend/api/src/main.rs index fc04434..75f7cf3 100644 --- a/k-tv-backend/api/src/main.rs +++ b/k-tv-backend/api/src/main.rs @@ -28,6 +28,7 @@ mod log_layer; mod poller; mod routes; mod scheduler; +mod startup; mod state; mod telemetry; mod webhook; @@ -115,16 +116,11 @@ async fn main() -> anyhow::Result<()> { cors_origins: config.cors_allowed_origins.clone(), }; - let bg_channel_repo_poller = bg_channel_repo.clone(); - let bg_schedule_engine = Arc::clone(&state.schedule_engine); - tokio::spawn(scheduler::run_auto_scheduler(bg_schedule_engine, bg_channel_repo, event_tx.clone())); - - let bg_schedule_engine_poller = Arc::clone(&state.schedule_engine); - tokio::spawn(poller::run_broadcast_poller( - bg_schedule_engine_poller, - bg_channel_repo_poller, + startup::spawn_background_tasks( + Arc::clone(&state.schedule_engine), + bg_channel_repo, event_tx, - )); + ); let app = Router::new() .nest("/api/v1", routes::api_v1_router()) diff --git a/k-tv-backend/api/src/startup.rs b/k-tv-backend/api/src/startup.rs new file mode 100644 index 0000000..cd66509 --- /dev/null +++ b/k-tv-backend/api/src/startup.rs @@ -0,0 +1,24 @@ +use std::sync::Arc; + +use domain::{ChannelRepository, DomainEvent, ScheduleEngineService}; +use tokio::sync::broadcast; + +use crate::{poller, scheduler}; + +pub fn spawn_background_tasks( + schedule_engine: Arc, + channel_repo: Arc, + event_tx: broadcast::Sender, +) { + let bg_channel_repo = channel_repo.clone(); + tokio::spawn(scheduler::run_auto_scheduler( + Arc::clone(&schedule_engine), + bg_channel_repo, + event_tx.clone(), + )); + tokio::spawn(poller::run_broadcast_poller( + schedule_engine, + channel_repo, + event_tx, + )); +}