use luoshu_core::Store;
use salvo::{handler, writer::Json, Depot, Request, Response, Router};
use std::sync::Arc;
use tokio::sync::RwLock;
use crate::data::{LuoshuDataHandle, LuoshuSledData, NamespaceReg};
use crate::web::error::WebResult;
use crate::web::resp::Resp;
pub fn get_routers() -> Router {
Router::with_path("namespace").post(append).get(list)
}
#[handler]
async fn append(req: &mut Request, res: &mut Response, depot: &mut Depot) -> WebResult<()> {
let value = req.parse_body::<NamespaceReg>().await?;
let data = depot.obtain::<Arc<RwLock<LuoshuSledData>>>().unwrap();
data.write().await.append(&value.into(), None, None).await?;
res.render(Json(Resp::success("ok")));
Ok(())
}
#[handler]
async fn list(_: &mut Request, res: &mut Response, depot: &mut Depot) -> WebResult<()> {
let data = depot.obtain::<Arc<RwLock<LuoshuSledData>>>().unwrap();
res.render(Json(Resp::success(
data.write().await.namespace_store.get_values(),
)));
Ok(())
}