From 8e23998643d00ced4781a044ce39278e7d9c0d2e Mon Sep 17 00:00:00 2001 From: Tom Tang <4220945+shiba4life@users.noreply.github.com> Date: Fri, 13 Mar 2026 22:41:45 -0700 Subject: [PATCH] Fix handler inconsistencies and eliminate duplicated patterns MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Convert 3 log handler response structs to handler_response! macro for consistency with all other handler files (schema, query, mutation, system, ingestion) - Export LOG_LEVELS as pub const and reuse in routes/log.rs instead of duplicating the array inline - Consolidate duplicated perform_smart_folder_scan_with_progress call in smart_folder_routes.rs — extract optional node guard before the single call instead of two identical 6-line call sites Co-Authored-By: Claude Opus 4.6 --- src/handlers/logs.rs | 31 +++++++++++++------------ src/ingestion/smart_folder_routes.rs | 34 +++++++++++----------------- src/server/routes/log.rs | 3 +-- 3 files changed, 31 insertions(+), 37 deletions(-) diff --git a/src/handlers/logs.rs b/src/handlers/logs.rs index 638ff9c7..c4f71738 100644 --- a/src/handlers/logs.rs +++ b/src/handlers/logs.rs @@ -6,27 +6,30 @@ use crate::fold_node::node::FoldNode; use crate::fold_node::OperationProcessor; use crate::handlers::response::{ApiResponse, HandlerError, HandlerResult, IntoHandlerError, SuccessResponse}; -use serde::{Deserialize, Serialize}; +use crate::handlers::handler_response; -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct LogListResponse { - pub logs: serde_json::Value, - pub count: usize, - pub timestamp: u64, +handler_response! { + pub struct LogListResponse { + pub logs: serde_json::Value, + pub count: usize, + pub timestamp: u64, + } } -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct LogConfigResponse { - pub config: serde_json::Value, +handler_response! { + pub struct LogConfigResponse { + pub config: serde_json::Value, + } } -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct LogFeaturesResponse { - pub features: serde_json::Value, - pub available_levels: Vec, +handler_response! { + pub struct LogFeaturesResponse { + pub features: serde_json::Value, + pub available_levels: Vec, + } } -const LOG_LEVELS: &[&str] = &["TRACE", "DEBUG", "INFO", "WARN", "ERROR"]; +pub const LOG_LEVELS: &[&str] = &["TRACE", "DEBUG", "INFO", "WARN", "ERROR"]; pub async fn list_logs( since: Option, diff --git a/src/ingestion/smart_folder_routes.rs b/src/ingestion/smart_folder_routes.rs index bc0193b7..2b6c8835 100644 --- a/src/ingestion/smart_folder_routes.rs +++ b/src/ingestion/smart_folder_routes.rs @@ -173,28 +173,20 @@ pub async fn smart_folder_scan( }); }); - let result = if let Some(ref arc) = node_arc { - let node_guard = arc.read().await; - smart_folder::perform_smart_folder_scan_with_progress( - &folder_path, - max_depth, - max_files, - service_opt.as_deref(), - Some(&*node_guard), - Some(&on_progress), - ) - .await - } else { - smart_folder::perform_smart_folder_scan_with_progress( - &folder_path, - max_depth, - max_files, - service_opt.as_deref(), - None, - Some(&on_progress), - ) - .await + let node_guard; + let node_ref = match node_arc { + Some(ref arc) => { node_guard = arc.read().await; Some(&*node_guard) } + None => None, }; + let result = smart_folder::perform_smart_folder_scan_with_progress( + &folder_path, + max_depth, + max_files, + service_opt.as_deref(), + node_ref, + Some(&on_progress), + ) + .await; // Let any in-flight spawned progress-update tasks drain before // writing the final Completed/Failed status. diff --git a/src/server/routes/log.rs b/src/server/routes/log.rs index 998b8fa0..add461d7 100644 --- a/src/server/routes/log.rs +++ b/src/server/routes/log.rs @@ -107,8 +107,7 @@ pub async fn update_feature_level( level_update: web::Json, state: web::Data, ) -> impl Responder { - let valid_levels = ["TRACE", "DEBUG", "INFO", "WARN", "ERROR"]; - if !valid_levels.contains(&level_update.level.as_str()) { + if !crate::handlers::logs::LOG_LEVELS.contains(&level_update.level.as_str()) { return HttpResponse::BadRequest().json(json!({ "error": format!("Invalid log level: {}", level_update.level) }));