32 lines
960 B
Rust
32 lines
960 B
Rust
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<AppState>,
|
|
Query(q): Query<EnchantmentsQuery>,
|
|
) -> Result<Json<Vec<Enchantment>>, 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))
|
|
}
|