ironflow_api/entities/
schedule.rs1use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
6use uuid::Uuid;
7use validator::Validate;
8
9use ironflow_store::entities::{Schedule, ScheduleSource};
10
11#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
13#[derive(Debug, Serialize)]
14pub struct ScheduleResponse {
15 pub id: Uuid,
17 pub workflow_name: String,
19 pub cron_expression: String,
21 pub inputs: Value,
23 pub source: ScheduleSource,
25 pub disabled_at: Option<DateTime<Utc>>,
27 pub last_triggered_at: Option<DateTime<Utc>>,
29 pub next_trigger_at: Option<DateTime<Utc>>,
31 pub last_error: Option<String>,
34 pub priority: i16,
36 pub created_by_user_id: Option<Uuid>,
38 pub created_at: DateTime<Utc>,
40 pub updated_at: DateTime<Utc>,
42}
43
44impl From<Schedule> for ScheduleResponse {
45 fn from(s: Schedule) -> Self {
46 Self {
47 id: s.id,
48 workflow_name: s.workflow_name,
49 cron_expression: s.cron_expression,
50 inputs: s.inputs,
51 source: s.source,
52 disabled_at: s.disabled_at,
53 last_triggered_at: s.last_triggered_at,
54 next_trigger_at: s.next_trigger_at,
55 last_error: s.last_error,
56 priority: s.priority,
57 created_by_user_id: s.created_by_user_id,
58 created_at: s.created_at,
59 updated_at: s.updated_at,
60 }
61 }
62}
63
64#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
66#[derive(Debug, Deserialize, Validate)]
67pub struct CreateScheduleRequest {
68 #[validate(length(min = 1, message = "workflow_name must not be empty"))]
70 pub workflow_name: String,
71 #[validate(length(min = 1, message = "cron_expression must not be empty"))]
73 pub cron_expression: String,
74 #[serde(default = "default_inputs")]
76 pub inputs: Value,
77 #[serde(default)]
83 pub priority: Option<i16>,
84}
85
86fn default_inputs() -> Value {
87 Value::Object(serde_json::Map::new())
88}
89
90#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
92#[derive(Debug, Deserialize)]
93pub struct UpdateScheduleRequest {
94 pub cron_expression: Option<String>,
96 pub inputs: Option<Value>,
98}