use crate::state::*;
use axum::{
extract::State,
http::StatusCode,
routing::{delete, get},
Json,
};
pub fn routes() -> axum::Router<AppState> {
axum::Router::new()
.route("/api/languages", get(get_languages))
.route("/api/data/all", delete(delete_all_data))
}
pub async fn get_languages() -> Json<serde_json::Value> {
let json_str = microresolve::phrase::supported_languages_json();
let val: serde_json::Value = serde_json::from_str(&json_str).unwrap_or_default();
Json(val)
}
pub async fn delete_all_data(State(state): State<AppState>) -> StatusCode {
if let Some(ref dir) = state.data_dir {
if let Ok(entries) = std::fs::read_dir(dir) {
for entry in entries.flatten() {
let p = entry.path();
let name = p.file_name().and_then(|n| n.to_str()).unwrap_or("");
if name == "_settings.json" || name == "logs" {
continue;
}
if p.is_dir() {
let _ = std::fs::remove_dir_all(&p);
} else if p.extension().map(|e| e == "json").unwrap_or(false) {
let _ = std::fs::remove_file(&p);
}
}
}
}
state.log_store.lock().unwrap().clear_all();
for id in state.engine.namespaces() {
state.engine.remove_namespace(&id);
}
let _ = state.engine.namespace("default");
state.review_mode.write().unwrap().clear();
maybe_commit(&state, "default");
StatusCode::OK
}