From ef3b0f228552101d49fe6458f70b68211fd7183d Mon Sep 17 00:00:00 2001 From: Felipe Diniello Date: Sat, 16 Sep 2023 14:20:29 +0200 Subject: [PATCH] Refactor antennas endpoints --- kairo-core/src/antennas.rs | 67 ++++++++++++++++++++++++++++++++------ kairo-core/src/main.rs | 6 +--- 2 files changed, 58 insertions(+), 15 deletions(-) diff --git a/kairo-core/src/antennas.rs b/kairo-core/src/antennas.rs index 2144bcb..763dcc1 100644 --- a/kairo-core/src/antennas.rs +++ b/kairo-core/src/antennas.rs @@ -1,10 +1,32 @@ use diesel::prelude::*; -use rocket::{http::Status, serde::json::Json, State}; +use rocket::{http::Status, serde::json::Json, Route, State}; use kairo_common::{postgres, schema::antennas, Antenna}; + + +#[cfg(debug_assertions)] +pub fn routes() -> Vec { + routes![get_by_id, get_list, new, update, delete, purge] +} + +#[cfg(not(debug_assertions))] +pub fn routes() -> Vec { + routes![get_by_id, get_list, new, update, delete] +} + +fn notify_changes() { + use kairo_common::mqtt::for_sync::MqttClient; + + MqttClient::new(Some("antennas_mqtt_client")) + .publish("antennas/refresh", None) + .unwrap_or_else(|e| { + println!("Unable to publish antennas update: {}", e); + }); +} + #[rocket::get("/id/")] -pub fn get_by_id(db_pool: &State, id: String) -> Option> { +fn get_by_id(db_pool: &State, id: String) -> Option> { let mut db = db_pool.get().unwrap(); let res = antennas::table @@ -19,7 +41,7 @@ pub fn get_by_id(db_pool: &State, id: String) -> Option) -> Json> { +fn get_list(db_pool: &State) -> Json> { let mut db = db_pool.get().unwrap(); let res = antennas::table @@ -33,7 +55,7 @@ pub fn get_list(db_pool: &State) -> Json> { } #[rocket::post("/new", format = "json", data = "")] -pub fn new(db_pool: &State, antenna: Json) -> Status { +fn new(db_pool: &State, antenna: Json) -> Status { let mut db = db_pool.get().unwrap(); let res = diesel::insert_into(antennas::table) @@ -41,13 +63,16 @@ pub fn new(db_pool: &State, antenna: Json) -> Status .execute(&mut db); match res { - Ok(_) => Status::Ok, + Ok(_) => { + notify_changes(); + Status::Ok + } _ => Status::NotAcceptable, } } #[rocket::patch("/update", format = "json", data = "")] -pub fn update(db_pool: &State, antenna: Json) -> Status { +fn update(db_pool: &State, antenna: Json) -> Status { let mut db = db_pool.get().unwrap(); let res = diesel::update(antennas::table) @@ -57,21 +82,43 @@ pub fn update(db_pool: &State, antenna: Json) -> Stat match res { Ok(0) => Status::NotModified, - Ok(1) => Status::Ok, + Ok(1) => { + notify_changes(); + Status::Ok + } _ => Status::BadRequest, } } #[rocket::delete("/delete/")] -pub fn delete(db_pool: &State, id: String) -> Status { +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) ) + .filter(antennas::id.eq(id)) .execute(&mut db); match res { - Ok(1) => Status::Ok, + Ok(1) => { + notify_changes(); + Status::Ok + } + _ => Status::BadRequest, + } +} + +#[cfg(debug_assertions)] +#[rocket::delete("/purge")] +fn purge(db_pool: &State) -> Status { + let mut db = db_pool.get().unwrap(); + + let res = diesel::delete(antennas::table).execute(&mut db); + + match res { + Ok(1) => { + notify_changes(); + Status::Ok + } _ => Status::BadRequest, } } diff --git a/kairo-core/src/main.rs b/kairo-core/src/main.rs index b8f0fd9..4465fe7 100644 --- a/kairo-core/src/main.rs +++ b/kairo-core/src/main.rs @@ -23,9 +23,5 @@ 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::delete]) - .mount("/antennas/", routes![antennas::update]) - .mount("/antennas/", routes![antennas::new]) + .mount("/antennas", antennas::routes()) }