use diesel::prelude::*; use rocket::{http::Status, serde::json::Json, State}; use kairo_common::{postgres, schema::antennas, Antenna}; #[rocket::get("/id/")] pub fn get_by_id(db_pool: &State, id: String) -> Option> { let mut db = db_pool.get().unwrap(); let res = antennas::table .select(antennas::all_columns) .find(id) .get_result::(&mut db); match res { Ok(v) => Some(rocket::serde::json::Json(v)), _ => None, } } #[rocket::get("/")] pub fn get_list(db_pool: &State) -> Json> { let mut db = db_pool.get().unwrap(); let res = antennas::table .select(antennas::all_columns) .load::(&mut db); match res { Ok(v) => rocket::serde::json::Json(v), _ => rocket::serde::json::Json(vec![]), } } #[rocket::post("/new", format = "json", data = "")] pub fn new(db_pool: &State, antenna: Json) -> Status { let mut db = db_pool.get().unwrap(); let res = diesel::insert_into(antennas::table) .values(antenna.0) .execute(&mut db); match res { Ok(_) => Status::Ok, _ => Status::NotAcceptable, } } #[rocket::patch("/update", format = "json", data = "")] pub fn update(db_pool: &State, antenna: Json) -> Status { let mut db = db_pool.get().unwrap(); let res = diesel::update(antennas::table) .filter(antennas::id.eq(antenna.id.clone())) .set(antenna.0) .execute(&mut db); match res { Ok(0) => Status::NotModified, Ok(1) => Status::Ok, _ => Status::BadRequest, } } #[rocket::delete("/delete/")] pub fn delete(db_pool: &State, id: String) -> Status { let mut db = db_pool.get().unwrap(); let res = diesel::delete(antennas::table) .filter( antennas::id.eq(id) ) .execute(&mut db); match res { Ok(1) => Status::Ok, _ => Status::BadRequest, } }