use axum::extract::{Query, State}; use axum::{Json, Router}; use crate::app_state::AppState; use crate::error_handlers::AppError; use crate::models::{Enchantment, PrimaryAttribute}; use crate::roll; #[derive(serde::Deserialize)] #[serde(rename_all = "camelCase")] struct EnchantmentsQuery { tier: i32, primary_attribute: PrimaryAttribute, } pub async fn init_enchantment_handlers(state: AppState) -> Router { Router::new() .route("/api/enchantments", axum::routing::get(get_enchantments)) .with_state(state) } async fn get_enchantments( State(state): State, Query(q): Query, ) -> Result>, AppError> { let mut enchantments = roll::fetch_enchantments_for_tier_and_attribute(&state.pool, q.tier, q.primary_attribute).await?; for e in enchantments.iter_mut() { roll::hydrate_enchantment_attributes(&state.pool, e).await?; } Ok(Json(enchantments)) }