diff --git a/.cline/config.json b/.cline/config.json new file mode 100644 index 00000000..7a06ce52 --- /dev/null +++ b/.cline/config.json @@ -0,0 +1,3 @@ +{ + "checkpoints": false +} diff --git a/src/basic/keywords/add_suggestion.rs b/src/basic/keywords/add_suggestion.rs new file mode 100644 index 00000000..99eccd4f --- /dev/null +++ b/src/basic/keywords/add_suggestion.rs @@ -0,0 +1,51 @@ +use crate::shared::state::AppState; +use crate::shared::models::UserSession; +use log::{debug, error, info}; +use rhai::{Dynamic, Engine}; +use serde_json::json; +use std::sync::Arc; + +pub fn add_suggestion_keyword(state: Arc, user: UserSession, engine: &mut Engine) { + let cache = state.redis_client.clone(); + + engine + .register_custom_syntax(&["ADD_SUGGESTION", "$expr$", "$expr$"], true, move |context, inputs| { + let context_name = context.eval_expression_tree(&inputs[0])?.to_string(); + let button_text = context.eval_expression_tree(&inputs[1])?.to_string(); + + info!("ADD_SUGGESTION command executed: context='{}', text='{}'", context_name, button_text); + + if let Some(cache_client) = &cache { + let cache_client = cache_client.clone(); + let redis_key = format!("suggestions:{}:{}", user.user_id, user.id); + let suggestion = json!({ "context": context_name, "text": button_text }); + + tokio::spawn(async move { + let mut conn = match cache_client.get_multiplexed_async_connection().await { + Ok(conn) => conn, + Err(e) => { + error!("Failed to connect to cache: {}", e); + return; + } + }; + + // Append suggestion to Redis list + let result: Result<(), redis::RedisError> = redis::cmd("RPUSH") + .arg(&redis_key) + .arg(suggestion.to_string()) + .query_async(&mut conn) + .await; + + match result { + Ok(_) => debug!("Suggestion added successfully to Redis key {}", redis_key), + Err(e) => error!("Failed to add suggestion to Redis: {}", e), + } + }); + } else { + debug!("No Redis client configured; suggestion will not persist"); + } + + Ok(Dynamic::UNIT) + }) + .unwrap(); +} diff --git a/src/basic/keywords/mod.rs b/src/basic/keywords/mod.rs index 7474d67f..f37c80ad 100644 --- a/src/basic/keywords/mod.rs +++ b/src/basic/keywords/mod.rs @@ -19,6 +19,7 @@ pub mod set; pub mod set_kb; pub mod set_schedule; pub mod wait; +pub mod add_suggestion; #[cfg(feature = "email")] pub mod create_draft_keyword; diff --git a/web/html/index.html b/web/html/index.html index d3b626ee..bfae8d91 100644 --- a/web/html/index.html +++ b/web/html/index.html @@ -878,6 +878,48 @@ /> +
+