use diesel::prelude::*; use log::info; use serde_json::{json, Value}; use uuid::Uuid; use crate::shared::models::TriggerKind; pub fn execute_set_schedule( conn: &mut diesel::PgConnection, cron: &str, script_name: &str, bot_uuid: Uuid, ) -> Result> { info!( "Scheduling SET SCHEDULE cron: {}, script: {}, bot_id: {:?}", cron, script_name, bot_uuid ); use crate::shared::models::system_automations::dsl::*; let new_automation = ( bot_id.eq(bot_uuid), kind.eq(TriggerKind::Scheduled as i32), schedule.eq(cron), param.eq(script_name), is_active.eq(true), ); let result = diesel::insert_into(system_automations) .values(&new_automation) .on_conflict((bot_id, kind, param)) .do_update() .set(( schedule.eq(cron), is_active.eq(true), last_triggered.eq(None::>), )) .execute(&mut *conn)?; Ok(json!({ "command": "set_schedule", "schedule": cron, "script": script_name, "bot_id": bot_uuid.to_string(), "rows_affected": result })) }