Spells endpoints
This commit is contained in:
79
src/db/spells/routes.rs
Normal file
79
src/db/spells/routes.rs
Normal file
@@ -0,0 +1,79 @@
|
||||
use actix_web::{get, post, put, delete, web, HttpResponse, HttpRequest, ResponseError};
|
||||
use serde::{Serialize, Deserialize};
|
||||
|
||||
use crate::db::{spells::QuerySpell, GetResponse, Metadata};
|
||||
|
||||
use super::{Spell, InsertSpell};
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
struct GetAllParams {
|
||||
limit: Option<i32>,
|
||||
page: Option<i32>,
|
||||
}
|
||||
|
||||
#[get("/spells")]
|
||||
async fn get_all(req: HttpRequest) -> HttpResponse {
|
||||
let params = web::Query::<GetAllParams>::from_query(req.query_string()).unwrap();
|
||||
let limit = params.limit.unwrap_or(20);
|
||||
let page = params.page.unwrap_or(1);
|
||||
match web::block(move || QuerySpell::get_all(limit, page)).await.unwrap() {
|
||||
Ok(spells) => {
|
||||
let mut response: Vec<Spell> = Vec::new();
|
||||
for spell in spells {
|
||||
response.push(Spell::from(spell));
|
||||
}
|
||||
let total_count = QuerySpell::get_count().unwrap();
|
||||
HttpResponse::Ok().json(GetResponse {
|
||||
data: response,
|
||||
metadata: Some(Metadata {
|
||||
total: total_count as i32,
|
||||
limit,
|
||||
page
|
||||
})
|
||||
})
|
||||
},
|
||||
Err(err) => ResponseError::error_response(&err)
|
||||
}
|
||||
}
|
||||
|
||||
#[get("/spells/{id}")]
|
||||
async fn get_by_id(id: web::Path<i32>) -> HttpResponse {
|
||||
match web::block(move || QuerySpell::get_by_id(id.into_inner())).await.unwrap() {
|
||||
Ok(spell) => HttpResponse::Ok().json(GetResponse {
|
||||
data: Spell::from(spell),
|
||||
metadata: None
|
||||
}),
|
||||
Err(err) => ResponseError::error_response(&err)
|
||||
}
|
||||
}
|
||||
|
||||
#[post("/spells")]
|
||||
async fn create(spell: web::Json<Spell>) -> HttpResponse {
|
||||
match InsertSpell::insert(spell.into_inner().into()) {
|
||||
Ok(spell) => HttpResponse::Created().json(Spell::from(spell)),
|
||||
Err(err) => ResponseError::error_response(&err)
|
||||
}
|
||||
}
|
||||
|
||||
#[put("/spells/{id}")]
|
||||
async fn update(id: web::Path<i32>, spell: web::Json<Spell>) -> HttpResponse {
|
||||
match web::block(move || InsertSpell::update(id.into_inner(), spell.into_inner().into())).await.unwrap() {
|
||||
Ok(spell) => HttpResponse::Ok().json(Spell::from(spell)),
|
||||
Err(err) => ResponseError::error_response(&err)
|
||||
}
|
||||
}
|
||||
|
||||
#[delete("/spells/{id}")]
|
||||
async fn delete(id: web::Path<i32>) -> HttpResponse {
|
||||
match web::block(move || QuerySpell::delete(id.into_inner())).await.unwrap() {
|
||||
Ok(spell) => HttpResponse::Ok().json(Spell::from(spell)),
|
||||
Err(err) => ResponseError::error_response(&err)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn init_routes(config: &mut web::ServiceConfig) {
|
||||
config.service(get_all);
|
||||
config.service(get_by_id);
|
||||
config.service(create);
|
||||
config.service(delete);
|
||||
}
|
||||
Reference in New Issue
Block a user