added endpoint for plan lookup

This commit is contained in:
Colin McKechney
2023-05-01 17:16:12 -04:00
parent 9a362728e3
commit 50b5fe53dd
2 changed files with 49 additions and 1 deletions

View File

@@ -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<PlanData>) -> impl Responder {
}
pub async fn plan_lookup(net_id: Path<String>) -> Json<PlanData> {
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<PlanData> {
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)
}

View File

@@ -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))