From 8c3496ba48961e99ad1ac5882113e97dab025e34 Mon Sep 17 00:00:00 2001 From: Vinod J M Date: Mon, 28 Nov 2022 18:39:26 +0530 Subject: [PATCH] v0.13-dockerP3 --- backend/api/src/lib.rs | 74 +++++++++++++++++++++++++++--------------- 1 file changed, 48 insertions(+), 26 deletions(-) diff --git a/backend/api/src/lib.rs b/backend/api/src/lib.rs index 817c3c0..3cb0f11 100644 --- a/backend/api/src/lib.rs +++ b/backend/api/src/lib.rs @@ -91,18 +91,18 @@ struct BookPageOL { description: Option, } -#[derive(Deserialize, Serialize, Debug)] -struct DescriptionOL { - value: Option, +#[derive(Deserialize, Serialize, Debug, Clone)] +struct DescriptionOLValue { + value: String, } -/* -#[derive(Debug, Serialize, Deserialize)] + +#[derive(Debug, Serialize, Deserialize, Clone)] #[serde(untagged)] enum DescriptionOL { - DescriptionValueString{value: String}, + DescriptionValueString(DescriptionOLValue), DescriptionString(String), } -*/ + #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct BooksManyISBN { #[serde(flatten)] @@ -153,25 +153,46 @@ impl Books { } } } - /* + async fn set_all_descriptions(&mut self) { for book in self.docs.iter_mut() { let query = format!("https://openlibrary.org/{}.json", book.key); let res = reqwest::get(query).await.expect("Unable to request"); let resjson = res.json::().await.expect("Unable to return value"); let description = resjson.description; - match description { - Some(description) => { - match description.value { - Some(value) => book.description = Some(value), - None => (), + + if !description.is_none() { + if let DescriptionOL::DescriptionString(desc_string) = description.clone().unwrap() { + book.description = Some(desc_string); + } + if let DescriptionOL::DescriptionValueString(desc_val) = description.clone().unwrap() { + book.description = Some(desc_val.value); + } } - } - None => (), - } + } } - */ + +} + +impl BookUI { +async fn set_descriptions(&mut self) { + + let query = format!("https://openlibrary.org/{}.json", self.open_library_key.as_ref().unwrap().clone()); + let res = reqwest::get(query).await.expect("Unable to request"); + let resjson = res.json::().await.expect("Unable to return value"); + let description = resjson.description; + + if !description.is_none() { + if let DescriptionOL::DescriptionString(desc_string) = description.clone().unwrap() { + self.description = Some(desc_string); + } + if let DescriptionOL::DescriptionValueString(desc_val) = description.clone().unwrap() { + self.description = Some(desc_val.value); + } + } + } + } async fn handle_error(_err: io::Error) -> impl IntoResponse { @@ -212,7 +233,6 @@ pub async fn main() { dotenvy::dotenv().ok(); - let backend_url = env::var("BACKEND_URL").expect("BACKEND_URL is not set in .env file"); let images_dir = env::var("IMAGES_DIR").expect("IMAGES_DIR is not set in .env file"); let cors_url = env::var("CORS_URL").expect("CORS_URL is not set in .env file"); let db_url = env::var("DATABASE_URL").expect("DATABASE_URL is not set in .env file"); @@ -305,38 +325,39 @@ async fn create_by_isbn( goodread_id = goodread_identifier.unwrap().get(0).unwrap().to_string() } } - let mut authors_name = Some(vec!["".to_string()]); + //let mut authors_name = Some(vec!["".to_string()]); //if !bookfound.unwrap().authors.is_none() { - authors_name = Some(bookfound.clone().unwrap().authors.iter().map(|s| s.name.clone()).collect()); + let authors_name = Some(bookfound.clone().unwrap().authors.iter().map(|s| s.name.clone()).collect()); //} else { // authors_name = None //} - let mut persons = Some(vec!["".to_string()]); + let persons : Option>; + //= Some(vec!["".to_string()]); if !bookfound.unwrap().subject_people.is_none() { persons = Some(bookfound.clone().unwrap().subject_people.clone().unwrap().iter().map(|s| s.name.clone()).collect()); } else { persons = None; } - let mut places = Some(vec!["".to_string()]); + let places : Option>; if !bookfound.unwrap().subject_places.is_none() { places = Some(bookfound.clone().unwrap().subject_places.clone().unwrap().iter().map(|s| s.name.clone()).collect()); } else { places = None; } - let mut subjects = Some(vec!["".to_string()]); + let subjects : Option>; if !bookfound.unwrap().subjects.is_none() { subjects = Some(bookfound.clone().unwrap().subjects.clone().unwrap().iter().map(|s| s.name.clone()).collect()); } else { subjects = None; } - let mut times = Some(vec!["".to_string()]); + let times : Option>; if !bookfound.unwrap().subject_times.is_none() { times = Some(bookfound.clone().unwrap().subject_times.clone().unwrap().iter().map(|s| s.name.clone()).collect()); } else { times = None; } - let doc_sent = BookUI{ + let mut doc_sent = BookUI{ id: 1, open_library_key: Some(bookfound.clone().unwrap().key.clone()), title: bookfound.clone().unwrap().title.clone(), @@ -357,6 +378,7 @@ async fn create_by_isbn( time: times, isbn: Some(vec![isbnstring.split("ISBN:").last().unwrap().to_string()]) }; + doc_sent.set_descriptions().await; let book: book::Model = book::Model{ open_library_key: doc_sent.open_library_key.to_owned(), title: (doc_sent.title.to_owned()), @@ -479,7 +501,7 @@ async fn search_openlibrary( let mut resjson = res.json::().await.expect("Unable to return value"); resjson.docs.truncate(12); resjson.set_all_cover_urls(); -// resjson.set_all_descriptions().await; + resjson.set_all_descriptions().await; print!("Search token {:?}\n", search); let mut vec = Vec::with_capacity(12); for i in 0..12 as usize {