accounted for null

This commit is contained in:
Colin McKechney
2023-04-30 21:03:44 +00:00
parent ec08c12780
commit 5117a3318f
2 changed files with 34 additions and 35 deletions

View File

@@ -7,37 +7,36 @@ const ORACLE_USER: &str = "timmy";
const ORACLE_PASS: &str = "timmy"; const ORACLE_PASS: &str = "timmy";
#[derive(Serialize, Deserialize, Debug, Default)] #[derive(Serialize, Deserialize, Debug, Default)]
struct FoodItem { pub struct FoodItem {
item_id: u32, item_id: u32,
eatery_id: u32, eatery_id: Option<u32>,
item_name: String, item_name: Option<String>,
serving_size: f32, serving_size: Option<String>,
calories: f32, calories: Option<f32>,
fat: f32, fat: Option<f32>,
sat_fat: f32, sat_fat: Option<f32>,
trans_fat: f32, trans_fat: Option<f32>,
carbs: f32, carbs: Option<f32>,
fiber: f32, fiber: Option<f32>,
sugar: f32, sugar: Option<f32>,
protein: f32, protein: Option<f32>,
sodium: f32, sodium: Option<f32>,
potassium: f32, potassium: Option<f32>,
cholesterol: f32 cholesterol: Option<f32>
} }
pub async fn menu(eatery: Path<String>) -> impl Responder { pub async fn menu(eatery: Path<String>) -> Json<Vec<FoodItem>> {
let eatery = eatery.into_inner(); let eatery = eatery.into_inner();
let response = match grab_rows(eatery) { let response = match grab_rows(eatery) {
Ok(r) => r, Ok(r) => r,
Err(e) => { Err(e) => {
error!("Failed to grab rows: {}", e); error!("Failed to grab rows: {}", e);
return HttpResponse::InternalServerError(); return Json(vec![]);
} }
}; };
Json(response); Json(response)
HttpResponse::Ok()
} }
@@ -46,7 +45,7 @@ fn grab_rows(eatery: String) -> oracle::Result<Vec<FoodItem>> {
let conn = Connection::connect(ORACLE_USER, ORACLE_PASS, "")?; let conn = Connection::connect(ORACLE_USER, ORACLE_PASS, "")?;
let mut stmt = conn.statement("select * from menu_item natural join nutrition_info food where menu_item.eatery_id = :1").build()?; let mut stmt = conn.statement("select * from menu_item natural join nutrition_info where eatery_id = :1").build()?;
let rows = stmt.query(&[&eatery])?; let rows = stmt.query(&[&eatery])?;
@@ -56,20 +55,20 @@ fn grab_rows(eatery: String) -> oracle::Result<Vec<FoodItem>> {
let row = row_result?; let row = row_result?;
row_vec.push( FoodItem { row_vec.push( FoodItem {
item_id: row.get(0)?, item_id: row.get(0)?,
eatery_id: row.get(1)?, eatery_id: row.get(1).unwrap_or(None),
item_name: row.get(2)?, item_name: row.get(2).unwrap_or(None),
serving_size: row.get(3)?, serving_size: row.get(3).unwrap_or(None),
calories: row.get(4)?, calories: row.get(4).unwrap_or(None),
fat: row.get(5)?, fat: row.get(5).unwrap_or(None),
sat_fat: row.get(6)?, sat_fat: row.get(6).unwrap_or(None),
trans_fat: row.get(7)?, trans_fat: row.get(7).unwrap_or(None),
carbs: row.get(8)?, carbs: row.get(8).unwrap_or(None),
fiber: row.get(9)?, fiber: row.get(9).unwrap_or(None),
sugar: row.get(10)?, sugar: row.get(10).unwrap_or(None),
protein: row.get(11)?, protein: row.get(11).unwrap_or(None),
sodium: row.get(12)?, sodium: row.get(12).unwrap_or(None),
potassium: row.get(13)?, potassium: row.get(13).unwrap_or(None),
cholesterol: row.get(14)?}); cholesterol: row.get(14).unwrap_or(None)});
} }
Ok(row_vec) Ok(row_vec)

View File

@@ -58,7 +58,7 @@ async fn main() -> std::io::Result<()> {
) )
.route("/", web::get().to(index)) .route("/", web::get().to(index))
}) })
.bind(("127.0.0.1", PORT))? .bind(("0.0.0.0", PORT))?
.run() .run()
.await; .await;