agent_office/services/schedule/
mod.rs1use crate::services::schedule::domain::Schedule;
2use async_trait::async_trait;
3use chrono::{DateTime, Utc};
4use thiserror::Error;
5use uuid::Uuid;
6
7pub mod domain;
8pub mod service_impl;
9
10pub use service_impl::ScheduleServiceImpl;
11
12#[derive(Error, Debug)]
13pub enum ScheduleError {
14 #[error("Schedule not found: {0}")]
15 ScheduleNotFound(Uuid),
16
17 #[error("Invalid cron expression: {0}")]
18 InvalidCronExpression(String),
19
20 #[error("Storage error: {0}")]
21 Storage(String),
22}
23
24pub type Result<T> = std::result::Result<T, ScheduleError>;
25
26#[async_trait]
27pub trait ScheduleService: Send + Sync {
28 async fn create_schedule(
30 &self,
31 agent_id: String,
32 cron_expression: String,
33 action: String,
34 ) -> Result<Schedule>;
35
36 async fn get_schedule(&self, id: Uuid) -> Result<Schedule>;
38
39 async fn list_schedules_by_agent(&self, agent_id: &str) -> Result<Vec<Schedule>>;
41
42 async fn update_schedule(
44 &self,
45 id: Uuid,
46 cron_expression: Option<String>,
47 action: Option<String>,
48 ) -> Result<Schedule>;
49
50 async fn delete_schedule(&self, id: Uuid) -> Result<()>;
52
53 async fn toggle_schedule(&self, id: Uuid) -> Result<Schedule>;
55
56 async fn check_and_fire_schedules(
60 &self,
61 agent_id: &str,
62 current_time: DateTime<Utc>,
63 ) -> Result<Vec<String>>;
64
65 fn get_next_run(&self, schedule: &Schedule, current_time: DateTime<Utc>) -> Option<DateTime<Utc>>;
67}