From 7c52c2dd0eaedaee98af3e18501e35d57a6b9d95 Mon Sep 17 00:00:00 2001 From: Colin McKechney Date: Sun, 30 Apr 2023 21:31:04 -0400 Subject: [PATCH] added menu search --- backend/src/api/menu.rs | 61 +++++++++++++++++++++++++++++++++++++++++ backend/src/api/mod.rs | 1 + backend/src/main.rs | 4 +++ 3 files changed, 66 insertions(+) create mode 100644 backend/src/api/menu.rs diff --git a/backend/src/api/menu.rs b/backend/src/api/menu.rs new file mode 100644 index 0000000..195bc5d --- /dev/null +++ b/backend/src/api/menu.rs @@ -0,0 +1,61 @@ +use oracle::{Result, Connection}; +use serde::{Serialize, Deserialize}; +use log::{info, error}; +use actix_web::{self, Responder, web::Json, HttpResponse}; + +use crate::config::{ORACLE_USER, ORACLE_PASS, ORACLE_CON_STR}; + +#[derive(Serialize, Deserialize, Debug, Default)] +pub struct SearchTerm{ + search_term: String +} + +#[derive(Serialize, Deserialize, Debug, Default)] +pub struct SearchResults { + results: Vec +} + +#[derive(Serialize, Deserialize, Debug, Default)] +pub struct SearchResult { + item_name: Option, + item_id: u32, + eatery_id: Option, + serving_size: Option +} + +pub async menu_search(term: Json) -> Json { + + let term = term.into_inner(); + + match fuzzy_search(term) { + Ok(result) => Json(result), + Err(e) => { + error!("failed to search for {}", term); + Json(vec![]) + } + } + +} + +fn fuzzy_search(term: &str) -> Result { + let conn = Connection::connect(ORACLE_USER,ORACLE_PASS,ORACLE_CON_STR)?; + let stmt = conn.statement("select * from menu_item where item_name like :term").build()?; + + let rows = stmt.query_named(&[("term", &term))?; + + let rows_vec = SearchResults::default(); + + for row_result in rows{ + let row = row_result?; + rows_vec.results.push( SearchResult { + item_name: row.get(0).unwrap_or(None), + item_id: row.get(1)?, + eatery_id: row.get(2).unwrap_or(None), + serving_size: row.get(3).unwrap_or(None) + }; + } + + Ok(rows_vec) + +} + diff --git a/backend/src/api/mod.rs b/backend/src/api/mod.rs index 5b20f13..1055da8 100644 --- a/backend/src/api/mod.rs +++ b/backend/src/api/mod.rs @@ -2,4 +2,5 @@ pub mod user; pub mod eatery; pub mod plan; pub mod week; +pub mod menu; diff --git a/backend/src/main.rs b/backend/src/main.rs index 3e536fc..e9506ef 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -67,6 +67,10 @@ async fn main() -> std::io::Result<()> { web::resource("/week_meals") .route(web::post().to(api::week::week_meals)) ) + .service( + web::resource("/week_progress/{net_id}") + .route(web::get().to(api::week::week_lookup)) + ) .route("/", web::get().to(api_index)) ) .route("/", web::get().to(index))