From 50b5fe53dda927b50ccf3e8c9a7372e1f3fcf807 Mon Sep 17 00:00:00 2001 From: Colin McKechney Date: Mon, 1 May 2023 17:16:12 -0400 Subject: [PATCH] added endpoint for plan lookup --- backend/src/api/plan.rs | 46 ++++++++++++++++++++++++++++++++++++++++- backend/src/main.rs | 4 ++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/backend/src/api/plan.rs b/backend/src/api/plan.rs index f494d7c..dc4dba9 100644 --- a/backend/src/api/plan.rs +++ b/backend/src/api/plan.rs @@ -1,5 +1,5 @@ use serde::{Serialize, Deserialize}; -use actix_web::{web::Json, Responder, HttpResponse}; +use actix_web::{web::{Json, Path}, Responder, HttpResponse}; use oracle::{Connection, Result}; use log::{error, info}; use crate::config::{ORACLE_PASS, ORACLE_USER, ORACLE_CON_STR}; @@ -33,6 +33,20 @@ pub async fn plan(body: Json) -> impl Responder { } +pub async fn plan_lookup(net_id: Path) -> Json { + + let net_id = net_id.into_inner(); + + match plan_search(&net_id) { + Ok(plan) => Json(plan), + Err(e) => { + error!("failed to grab plan from {}: {}", net_id, e); + Json(PlanData::default()) + } + } + +} + fn create_plan(plan: PlanData) -> Result<()> { let conn = Connection::connect(ORACLE_USER, ORACLE_PASS, ORACLE_CON_STR)?; @@ -61,3 +75,33 @@ fn create_plan(plan: PlanData) -> Result<()> { } + +fn plan_search(net_id: &str) -> Result { + + let conn = Connection::connect(ORACLE_USER, ORACLE_PASS, ORACLE_CON_STR)?; + + let mut stmt = conn.statement("select * from goal where net_id = :1 and ROWNUM = 1 order by date").build()?; + + let row = stmt.query_row(&[&net_id])?; + + + let plan: PlanData = 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(plan) + +} diff --git a/backend/src/main.rs b/backend/src/main.rs index 18c7b5f..e0d1754 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -59,6 +59,10 @@ async fn main() -> std::io::Result<()> { web::resource("/goal") .route(web::post().to(api::plan::plan)) ) + .service( + web::resource("/goal/{net_id}") + .route(web::get().to(api::plan::plan_lookup)) + ) .service( web::resource("/week_plan") .route(web::post().to(api::week::week))