From 655bc6c6c6f0c3e60681bd6cf7f79bb6253960a3 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 21 Jan 2026 03:04:54 +0400 Subject: [PATCH] fix: reuse database connection in server state --- src/server/api.rs | 12 ++++++++---- src/server/mod.rs | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/server/api.rs b/src/server/api.rs index bd5cc8a..08e1343 100644 --- a/src/server/api.rs +++ b/src/server/api.rs @@ -18,6 +18,7 @@ use crate::core::{Database, EmbeddingEngine}; pub struct ServerState { embedding_engine: Mutex, config: Config, + db: Mutex, } #[derive(Debug, Deserialize)] @@ -98,9 +99,12 @@ pub async fn run_server(config: &Config, host: &str, port: u16) -> Result<()> { println!(" {}Model loaded successfully!", crate::ui::CHECK); println!(); + let db = Database::new(&config.db_path().unwrap_or_default())?; + let state = Arc::new(ServerState { embedding_engine: Mutex::new(engine), config, + db: Mutex::new(db), }); let cors = CorsLayer::new() @@ -143,13 +147,13 @@ async fn health() -> impl IntoResponse { } async fn status(State(state): State) -> impl IntoResponse { - let db = match Database::new(&state.config.db_path().unwrap_or_default()) { + let db = match state.db.lock() { Ok(db) => db, Err(e) => { return ( StatusCode::INTERNAL_SERVER_ERROR, Json(serde_json::json!({ - "error": format!("Failed to open database: {}", e) + "error": format!("Failed to lock database: {}", e) })), ) .into_response(); @@ -228,13 +232,13 @@ async fn search( }; // Search in database - let db = match Database::new(&state.config.db_path().unwrap_or_default()) { + let db = match state.db.lock() { Ok(db) => db, Err(e) => { return ( StatusCode::INTERNAL_SERVER_ERROR, Json(serde_json::json!({ - "error": format!("Failed to open database: {}", e) + "error": format!("Failed to lock database: {}", e) })), ) .into_response(); diff --git a/src/server/mod.rs b/src/server/mod.rs index f50f38d..16c42eb 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -3,5 +3,5 @@ mod api; mod client; -pub use api::run_server; +pub use api::{run_server, ServerState}; pub use client::Client;