From 1517e72833eccaf7a870c3a87ba67216f1d363b9 Mon Sep 17 00:00:00 2001 From: Colin McKechney Date: Tue, 2 May 2023 17:53:33 -0400 Subject: [PATCH] added 3 new endpoints --- backend/src/api/mod.rs | 2 ++ backend/src/api/plan.rs | 45 ++++++++++++++++++++++++++++++++++++ backend/src/api/result.rs | 48 +++++++++++++++++++++++++++++++++++++++ backend/src/api/week.rs | 27 ++++++++++++++++++++++ backend/src/main.rs | 9 ++++++++ 5 files changed, 131 insertions(+) create mode 100644 backend/src/api/result.rs diff --git a/backend/src/api/mod.rs b/backend/src/api/mod.rs index 1055da8..624e50f 100644 --- a/backend/src/api/mod.rs +++ b/backend/src/api/mod.rs @@ -3,4 +3,6 @@ pub mod eatery; pub mod plan; pub mod week; pub mod menu; +pub mod result; + diff --git a/backend/src/api/plan.rs b/backend/src/api/plan.rs index 071ece2..1173b80 100644 --- a/backend/src/api/plan.rs +++ b/backend/src/api/plan.rs @@ -47,6 +47,18 @@ pub async fn plan_lookup(net_id: Path) -> Json { } +pub async fn all_plan(net_id: Path) -> Json> { + + let net_id = net_id.into_inner(); + + match get_all_plan(&net_id) { + Ok(plans) => Json(plans), + Err(e) => { + error!("failed to grab plans from {}: {}", net_id, e); + Json(vec![]) + } + } +} fn create_plan(plan: PlanData) -> Result<()> { let conn = Connection::connect(ORACLE_USER, ORACLE_PASS, ORACLE_CON_STR)?; @@ -105,3 +117,36 @@ fn plan_search(net_id: &str) -> Result { Ok(plan) } + +fn get_all_plan(net_id: &str) -> Result> { + + + let conn = Connection::connect(ORACLE_USER, ORACLE_PASS, ORACLE_CON_STR)?; + + let mut stmt = conn.statement("select * from goal where s_net_id = :1 order by week_date").build()?; + + + let rows = stmt.query(&[&net_id])?; + let mut row_vec: Vec = vec![]; + + for row_result in rows { + let row = row_result?; + row_vec.push(PlanData { + net_id: row.get(0)?, + week_date: row.get(1)?, + total_cal: row.get(2).unwrap_or(None), + total_fat: row.get(3).unwrap_or(None), + total_sat_fat: row.get(4).unwrap_or(None), + total_trans_fat: row.get(5).unwrap_or(None), + total_carbs: row.get(6).unwrap_or(None), + total_fiber: row.get(7).unwrap_or(None), + total_sugar: row.get(8).unwrap_or(None), + total_protein: row.get(9).unwrap_or(None), + total_sodium: row.get(10).unwrap_or(None), + total_potassium: row.get(11).unwrap_or(None), + total_cholesterol: row.get(12).unwrap_or(None)}); + } + + Ok(row_vec) + +} diff --git a/backend/src/api/result.rs b/backend/src/api/result.rs new file mode 100644 index 0000000..fcc79e4 --- /dev/null +++ b/backend/src/api/result.rs @@ -0,0 +1,48 @@ +use log::error; +use actix_web::{web::Json, web::Path}; +use oracle::{Connection, Result}; +use crate::{api::plan::PlanData, config::{ORACLE_USER, ORACLE_PASS, ORACLE_CON_STR}}; + + + +pub async fn all_result(net_id: Path) -> Json> { + let net_id = net_id.into_inner(); + + match get_result(&net_id){ + Ok(r) => Json(r), + Err(e) => { + error!("failed to get results for user {}: {}", net_id, e); + Json(vec![]) + } + } +} + + +fn get_result(net_id: &str) -> Result> { + + let conn = Connection::connect(ORACLE_USER, ORACLE_PASS, ORACLE_CON_STR)?; + let mut stmt = conn.statement("select * from result where net_id = :1").build()?; + + let rows = stmt.query(&[&net_id])?; + let mut row_vec: Vec = vec![]; + for row_result in rows { + let row = row_result?; + + row_vec.push(PlanData { + net_id: row.get(0)?, + week_date: row.get(1)?, + total_cal: row.get(2).unwrap_or(None), + total_fat: row.get(3).unwrap_or(None), + total_sat_fat: row.get(4).unwrap_or(None), + total_trans_fat: row.get(5).unwrap_or(None), + total_carbs: row.get(6).unwrap_or(None), + total_fiber: row.get(7).unwrap_or(None), + total_sugar: row.get(8).unwrap_or(None), + total_protein: row.get(9).unwrap_or(None), + total_sodium: row.get(10).unwrap_or(None), + total_potassium: row.get(11).unwrap_or(None), + total_cholesterol: row.get(12).unwrap_or(None) }); + } + + Ok(row_vec) +} diff --git a/backend/src/api/week.rs b/backend/src/api/week.rs index dfdf843..651370a 100644 --- a/backend/src/api/week.rs +++ b/backend/src/api/week.rs @@ -130,6 +130,19 @@ pub async fn week_sums(net_id: Path) -> Json { } +pub async fn delete_meals(items: Json ) -> impl Responder { + let items = items.into_inner(); + + match week_meal_delete(&items) { + Ok(_) => HttpResponse::Ok(), + Err(e) => { + error!("failed to delete items from {}: {}", items.net_id, e); + HttpResponse::InternalServerError() + } + } +} + + fn add_item(item: &ItemData) -> Result<()> { let conn = Connection::connect(ORACLE_USER, ORACLE_PASS, ORACLE_CON_STR)? ; @@ -264,3 +277,17 @@ fn get_week(net_id: &str) -> Result> { } + + +fn week_meal_delete(items: &MenuItems) -> Result<()> { + + let conn = Connection::connect(ORACLE_USER, ORACLE_PASS, ORACLE_CON_STR)?; + + let mut stmt = conn.statement(format!("delete from {} where item_id = :1", items.net_id).as_str()).build()?; + + for meal in items.item_list { + stmt.execute(&[&items.net_id])?; + } + + Ok(()) +} diff --git a/backend/src/main.rs b/backend/src/main.rs index e0d1754..6bf9992 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -70,6 +70,7 @@ async fn main() -> std::io::Result<()> { .service( web::resource("/week_meals") .route(web::post().to(api::week::week_meals)) + .route(web::delete().to(api::week::delete_meals)) ) .service( web::resource("/week_progress/{net_id}") @@ -83,6 +84,14 @@ async fn main() -> std::io::Result<()> { web::resource("week_sum/{net_id}") .route(web::get().to(api::week::week_sums)) ) + .service( + web::resource("all_goal/{net_id}") + .route(web::get().to(api::plan::all_plan)) + ) + .service( + web::resource("result/{net_id}") + .route(web::get().to(api::result::all_result)) + ) .route("/", web::get().to(api_index)) ) .route("/", web::get().to(index))