Skip to content

Commit 97057ff

Browse files
committed
reflactor(handler): move db handlers to state
1 parent 227b2d3 commit 97057ff

File tree

6 files changed

+92
-16
lines changed

6 files changed

+92
-16
lines changed

mc-db/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
mod mcp_handler;
22
pub mod model;
33
mod settings_handler;
4-
mod token_handler;
54

65
pub use mcp_handler::*;
76
pub use settings_handler::*;

mc-db/src/model/mcp_servers.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
use chrono::NaiveDateTime;
12
use serde::{Deserialize, Serialize};
23
use sqlx::FromRow;
3-
use chrono::NaiveDateTime;
44
use std::fmt::Display;
55
use std::str::FromStr;
66
use uuid::Uuid;

mc-db/src/token_handler.rs

Lines changed: 0 additions & 1 deletion
This file was deleted.

mc-registry/src/lib.rs

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use cache::mcp_servers::Cache;
66
use hyper_rustls::HttpsConnector;
77
use hyper_util::client::legacy::Client;
88
use hyper_util::client::legacy::connect::HttpConnector;
9-
use mc_db::DBClient;
9+
use mc_db::{DBClient, McpDBHandler, SystemSettingsDBHandler};
1010
pub use mcp_server::*;
1111
use serde::{Deserialize, Serialize};
1212
use std::sync::Arc;
@@ -21,6 +21,54 @@ pub struct AppState {
2121
pub event_sender: Sender<Event>,
2222
pub https_client: Arc<Client<HttpsConnector<HttpConnector>, Body>>,
2323
pub mcp_cache: Arc<Cache>,
24+
handler_manager: HandlerManager,
25+
}
26+
impl AppState {
27+
pub fn new(
28+
db: Arc<DBClient>,
29+
event_sender: Sender<Event>,
30+
https_client: Arc<Client<HttpsConnector<HttpConnector>, Body>>,
31+
mcp_cache: Arc<Cache>,
32+
handler_manager: HandlerManager,
33+
) -> Self {
34+
Self {
35+
db,
36+
event_sender,
37+
https_client,
38+
mcp_cache,
39+
handler_manager,
40+
}
41+
}
42+
pub fn handlers(&self) -> &HandlerManager {
43+
&self.handler_manager
44+
}
45+
}
46+
47+
#[derive(Clone)]
48+
pub struct HandlerManager {
49+
pub mcp_handler: Option<Arc<McpDBHandler>>,
50+
pub system_settings_handler: Option<Arc<SystemSettingsDBHandler>>,
51+
db: Arc<DBClient>,
52+
}
53+
54+
impl HandlerManager {
55+
pub fn new(db: Arc<DBClient>) -> Self {
56+
HandlerManager {
57+
db,
58+
mcp_handler: None,
59+
system_settings_handler: None,
60+
}
61+
}
62+
63+
pub fn with_mcp_handler(mut self) -> Self {
64+
self.mcp_handler = Some(Arc::new(McpDBHandler::new(self.db.clone())));
65+
self
66+
}
67+
pub fn with_system_settings_handler(mut self) -> Self {
68+
self.system_settings_handler =
69+
Some(Arc::new(SystemSettingsDBHandler::new(self.db.clone())));
70+
self
71+
}
2472
}
2573

2674
#[derive(Deserialize, Serialize, Clone, Debug)]

mc-registry/src/mcp_server.rs

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use axum::Json;
44
use axum::extract::{Query, State};
55
use axum::http::StatusCode;
66
use mc_db::model::{CreateFrom, McpServers, SettingKey};
7-
use mc_db::{McpDBHandler, SystemSettingsDBHandler};
87
use serde::{Deserialize, Serialize};
98
use uuid::Uuid;
109

@@ -17,8 +16,25 @@ pub async fn list_all(
1716
State(state): State<AppState>,
1817
Query(params): Query<ListAllRequest>,
1918
) -> Result<Json<Response>, (StatusCode, String)> {
20-
let mcp_handler = McpDBHandler::new(state.db.clone());
21-
let settings_handler = SystemSettingsDBHandler::new(state.db.clone());
19+
let mcp_handler = match &state.handlers().mcp_handler {
20+
None => {
21+
return Err((
22+
StatusCode::INTERNAL_SERVER_ERROR,
23+
"Can't get MCP handler not found".to_string(),
24+
));
25+
}
26+
Some(handler) => handler,
27+
};
28+
29+
let settings_handler = match &state.handlers().system_settings_handler {
30+
None => {
31+
return Err((
32+
StatusCode::INTERNAL_SERVER_ERROR,
33+
"Can't get MCP handler not found".to_string(),
34+
));
35+
}
36+
Some(handler) => handler,
37+
};
2238

2339
let self_address = settings_handler
2440
.get_system_settings(SettingKey::SelfAddress)
@@ -67,8 +83,17 @@ pub async fn register_mcp_server(
6783
State(state): State<AppState>,
6884
Json(server): Json<McpRegisterRequest>,
6985
) -> Result<Json<Response>, (StatusCode, String)> {
70-
let db_client = state.db.clone();
71-
let res = McpDBHandler::new(db_client)
86+
let mcp_handler = match &state.handlers().mcp_handler {
87+
None => {
88+
return Err((
89+
StatusCode::INTERNAL_SERVER_ERROR,
90+
"Can't get MCP handler not found".to_string(),
91+
));
92+
}
93+
Some(handler) => handler,
94+
};
95+
96+
let res = mcp_handler
7297
.create(&McpServers {
7398
id: Uuid::new_v4(),
7499
name: server.name.clone(),

mc-service/src/server.rs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ use hyper_util::client::legacy::Client;
88
use hyper_util::rt::TokioExecutor;
99
use mc_booter::app::application::Application;
1010
use mc_db::DBClient;
11-
use mc_registry::AppState;
1211
use mc_registry::cache::mcp_servers::Cache;
1312
use mc_registry::event::Event;
13+
use mc_registry::{AppState, HandlerManager};
1414
use std::error::Error;
1515
use std::sync::Arc;
1616
use tokio::runtime::Runtime;
@@ -161,12 +161,17 @@ impl Application for McpCenterServer {
161161
100,
162162
));
163163

164-
let state = AppState {
165-
db: db_client.clone(),
166-
event_sender: tx.clone(),
167-
https_client: client.clone(),
168-
mcp_cache: cache.clone(),
169-
};
164+
let manager = HandlerManager::new(db_client.clone())
165+
.with_mcp_handler()
166+
.with_system_settings_handler();
167+
168+
let state = AppState::new(
169+
db_client.clone(),
170+
tx.clone(),
171+
client.clone(),
172+
cache.clone(),
173+
manager,
174+
);
170175

171176
self.state = Some(state);
172177

0 commit comments

Comments
 (0)