koprogo_api/infrastructure/jobs/
sla_escalation_job.rs1use crate::application::error::AppError;
10use crate::application::ports::{SyndicResponseRepository, TicketRepository};
11use crate::application::use_cases::SyndicResponseUseCases;
12use chrono::Utc;
13use std::sync::Arc;
14
15pub struct SlaEscalationJob<R, T>
16where
17 R: SyndicResponseRepository,
18 T: TicketRepository,
19{
20 use_cases: Arc<SyndicResponseUseCases<R, T>>,
21}
22
23impl<R, T> SlaEscalationJob<R, T>
24where
25 R: SyndicResponseRepository,
26 T: TicketRepository,
27{
28 pub fn new(use_cases: Arc<SyndicResponseUseCases<R, T>>) -> Self {
29 Self { use_cases }
30 }
31
32 pub async fn run_once(&self) -> Result<usize, AppError> {
36 let now = Utc::now();
37 let escalated = self.use_cases.escalate_overdue(now).await?;
38 Ok(escalated.len())
39 }
40}