use axum::{extract::State, Json}; use common_contracts::config_models::{ AnalysisModulesConfig, DataSourceConfig, LlmProvidersConfig, }; use service_kit::api; use std::collections::HashMap; use crate::{db::system_config, AppState, ServerError}; #[api(GET, "/api/v1/configs/llm_providers", output(detail = "LlmProvidersConfig"))] pub async fn get_llm_providers_config( State(state): State, ) -> Result, ServerError> { let pool = state.pool(); let config = system_config::get_config::(pool, "llm_providers").await?; Ok(Json(config)) } #[api(PUT, "/api/v1/configs/llm_providers", output(detail = "LlmProvidersConfig"))] pub async fn update_llm_providers_config( State(state): State, Json(payload): Json, ) -> Result, ServerError> { let pool = state.pool(); let updated_config = system_config::update_config(pool, "llm_providers", &payload).await?; Ok(Json(updated_config)) } #[api(GET, "/api/v1/configs/analysis_modules", output(detail = "AnalysisModulesConfig"))] pub async fn get_analysis_modules_config( State(state): State, ) -> Result, ServerError> { let pool = state.pool(); let config = system_config::get_config::(pool, "analysis_modules").await?; Ok(Json(config)) } #[api(PUT, "/api/v1/configs/analysis_modules", output(detail = "AnalysisModulesConfig"))] pub async fn update_analysis_modules_config( State(state): State, Json(payload): Json, ) -> Result, ServerError> { let pool = state.pool(); let updated_config = system_config::update_config(pool, "analysis_modules", &payload).await?; Ok(Json(updated_config)) } pub type DataSourcesConfig = HashMap; #[api( GET, "/api/v1/configs/data_sources", output(detail = "DataSourcesConfig") )] pub async fn get_data_sources_config( State(state): State, ) -> Result, ServerError> { let pool = state.pool(); let config = system_config::get_config::(pool, "data_sources").await?; Ok(Json(config)) } #[api( PUT, "/api/v1/configs/data_sources", output(detail = "DataSourcesConfig") )] pub async fn update_data_sources_config( State(state): State, Json(payload): Json, ) -> Result, ServerError> { let pool = state.pool(); let updated_config = system_config::update_config(pool, "data_sources", &payload).await?; Ok(Json(updated_config)) }