use axum::{extract::State, Json}; use serde_json::{json, Value}; use crate::{app::AppState, error::AppResult, services::settings as settings_svc}; fn defaults(settings: &std::collections::HashMap) -> Value { json!({ "difficulty": settings.get("difficulty").cloned().unwrap_or_else(|| "beginner".into()), "preferred_formation": settings.get("preferred_formation").cloned().unwrap_or_else(|| "4-4-2".into()), }) } pub async fn get_settings(State(state): State) -> AppResult> { let settings = settings_svc::get_all(&state.pool).await?; Ok(Json(defaults(&settings))) } pub async fn put_settings( State(state): State, Json(req): Json, ) -> AppResult> { if let Some(difficulty) = req.get("difficulty").and_then(|v| v.as_str()) { settings_svc::upsert(&state.pool, "difficulty", difficulty).await?; } if let Some(formation) = req.get("preferred_formation").and_then(|v| v.as_str()) { settings_svc::upsert(&state.pool, "preferred_formation", formation).await?; } let settings = settings_svc::get_all(&state.pool).await?; Ok(Json(defaults(&settings))) }