use axum::Json;
use axum::extract::State;
use axum::http::StatusCode;
use crate::web::app_state_facets::WebChatAppFacet;
use crate::web::http_types::chat::{
ApiError, SessionConversationStoreRequestBody, SessionConversationStoreResponseBody,
};
pub(crate) async fn session_conversation_store_handler(
State(state): State<WebChatAppFacet>,
Json(body): Json<SessionConversationStoreRequestBody>,
) -> Result<Json<SessionConversationStoreResponseBody>, (StatusCode, Json<ApiError>)> {
match state.set_web_conversation_store_sqlite(body.sqlite).await {
Ok(()) => {
let msg = if body.sqlite {
"已切换为 SQLite 会话存储(当前进程)。重启 serve 后仍以配置文件为准。"
} else {
"已切换为内存会话存储(当前进程);未写入配置文件。重启 serve 后仍以配置文件为准。"
};
Ok(Json(SessionConversationStoreResponseBody {
ok: true,
message: msg.to_string(),
}))
}
Err(e) => Err((
StatusCode::BAD_REQUEST,
Json(ApiError::new("SESSION_STORE_SWITCH_FAILED", e)),
)),
}
}