refactoring de pmoconfig

This commit is contained in:
2025-10-21 18:37:56 +02:00
parent 1567beee2e
commit ffaa56fac9
9 changed files with 711 additions and 188 deletions

View File

@@ -4,8 +4,9 @@ version = "0.1.0"
edition = "2024"
[dependencies]
pmoconfig = { path = "../pmoconfig" }
pmoconfig = { path = "../pmoconfig", features = ["api"] }
anyhow = "1.0"
axum = "0.8.4"
tokio = { version = "1.35", features = ["rt-multi-thread", "macros", "sync", "time", "signal"] }
tokio-stream = "0.1"

View File

@@ -0,0 +1,49 @@
//! Extension pour intégrer l'API de configuration de pmoconfig dans pmoserver
//!
//! Ce module fournit le trait `ConfigExt` qui permet d'ajouter facilement
//! l'API REST de configuration au serveur.
use crate::Server;
use anyhow::Result;
use pmoconfig::{api, get_config, ApiDoc};
use utoipa::OpenApi;
/// Trait d'extension pour ajouter l'API de configuration à pmoserver
pub trait ConfigExt {
/// Initialise l'API de configuration et enregistre les routes HTTP
///
/// # Routes enregistrées
///
/// - `GET /api/config` - Récupérer toute la configuration
/// - `GET /api/config/{path}` - Récupérer une valeur spécifique (ex: host.http_port)
/// - `POST /api/config` - Mettre à jour une valeur
/// - `GET /swagger-ui/config` - Documentation interactive Swagger
///
/// # Exemple
///
/// ```rust,ignore
/// use pmoserver::{ServerBuilder, ConfigExt};
///
/// #[tokio::main]
/// async fn main() -> anyhow::Result<()> {
/// let mut server = ServerBuilder::new_configured().build();
/// server.init_config_api().await?;
/// server.start().await;
/// Ok(())
/// }
/// ```
async fn init_config_api(&mut self) -> Result<()>;
}
impl ConfigExt for Server {
async fn init_config_api(&mut self) -> Result<()> {
let config = get_config();
// API REST pour la configuration
let api_router = api::create_router(config);
let openapi = ApiDoc::openapi();
self.add_openapi(api_router, openapi, "config").await;
Ok(())
}
}

View File

@@ -68,9 +68,11 @@
//! # }
//! ```
pub mod config_ext;
pub mod logs;
pub mod server;
pub use config_ext::ConfigExt;
pub use logs::{
LogState, LoggingOptions, LogsApiDoc, SseLayer, create_logs_router, init_logging, log_dump,
log_setup_get, log_setup_post, log_sse,