From 0ddbb21f52a17533d4fc4b8a2280d7a4e58d0ab1 Mon Sep 17 00:00:00 2001 From: Felipe Diniello Date: Fri, 21 Jul 2023 20:15:51 +0200 Subject: [PATCH] antennas endpoints working --- kairo-core/src/antennas.rs | 63 ++++++++++++++++++++++++++++++++++++++ kairo-core/src/main.rs | 31 +++++++++++++++++-- 2 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 kairo-core/src/antennas.rs diff --git a/kairo-core/src/antennas.rs b/kairo-core/src/antennas.rs new file mode 100644 index 0000000..2ee037d --- /dev/null +++ b/kairo-core/src/antennas.rs @@ -0,0 +1,63 @@ +use diesel::prelude::*; +use rocket::{http::Status, serde::json::Json, State}; + +use kairo_common::{postgres, schema::antennas, Antenna, NewAntenna}; + +#[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) + .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)) + .set(*antenna) + .execute(&mut db); + + match res { + Ok(0) => Status::NotModified, + Ok(1) => Status::Ok, + _ => Status::BadRequest, + } +} diff --git a/kairo-core/src/main.rs b/kairo-core/src/main.rs index e7a11a9..45a377e 100644 --- a/kairo-core/src/main.rs +++ b/kairo-core/src/main.rs @@ -1,3 +1,30 @@ -fn main() { - println!("Hello, world!"); +#[macro_use] +extern crate rocket; + +mod antennas; + +use std::path::{Path, PathBuf}; + +use rocket::fs::NamedFile; +use rocket::response::status::NotFound; + +use kairo_common::postgres; + +#[get("/")] +async fn serve_file(file: PathBuf) -> Result> { + let path = Path::new("static/").join(file); + NamedFile::open(&path) + .await + .map_err(|e| NotFound(e.to_string())) +} + +#[launch] +fn rocket() -> _ { + rocket::build() + .manage(postgres::init_pool()) + .mount("/static", routes![serve_file]) + .mount("/antennas/", routes![antennas::get_by_id]) + .mount("/antennas/", routes![antennas::get_list]) + .mount("/antennas/", routes![antennas::update]) + .mount("/antennas/", routes![antennas::new]) }