diff --git a/src/model/filter.rs b/src/model/filter.rs index 60113b3..fd36882 100644 --- a/src/model/filter.rs +++ b/src/model/filter.rs @@ -18,15 +18,15 @@ pub struct Filter { #[builder(default, setter(strip_option))] pub search_text: Option, #[builder(default, setter(strip_option))] - pub catalog_ids: Option>, + pub catalog_ids: Option, #[builder(default, setter(strip_option))] - pub color_ids: Option>, + pub color_ids: Option, #[builder(default, setter(strip_option))] - pub brand_ids: Option>, + pub brand_ids: Option, #[builder(default, setter(strip_option))] - pub countries_ids: Option>, + pub countries_ids: Option, #[builder(default, setter(strip_option))] - pub size_ids: Option>, + pub size_ids: Option, #[builder(default, setter(strip_option))] pub article_status: Option>, #[builder(default, setter(strip_option))] @@ -43,14 +43,15 @@ pub enum ArticleStatus { } /// Para pasar de `ArticleStatus` a `i32` que es el id de vinted -impl From for i32 { - fn from(status: ArticleStatus) -> Self { - match status { - ArticleStatus::NewTags => 6, - ArticleStatus::NewNoTags => 1, - ArticleStatus::VeryGood => 2, - ArticleStatus::Good => 3, - ArticleStatus::Satisfactory => 4, +/// +impl From<&ArticleStatus> for &str { + fn from(status: &ArticleStatus) -> Self { + match *status { + ArticleStatus::NewTags => "6", + ArticleStatus::NewNoTags => "1", + ArticleStatus::VeryGood => "2", + ArticleStatus::Good => "3", + ArticleStatus::Satisfactory => "4", } } } diff --git a/src/queries.rs b/src/queries.rs index b3521e6..20602a4 100644 --- a/src/queries.rs +++ b/src/queries.rs @@ -26,7 +26,7 @@ pub enum VintedWrapperError { ItemNumberError, } -impl From for VintedWrapperError{ +impl From for VintedWrapperError { fn from(value: reqwest::Error) -> Self { VintedWrapperError::CookiesError(CookieError::ReqWestError(value)) } @@ -211,11 +211,7 @@ impl<'a> VintedWrapper<'a> { /// } /// } /// ``` - pub async fn get_items( - &self, - filters: &Filter, - num: u32, - ) -> Result { + pub async fn get_items(&self, filters: &Filter, num: u32) -> Result { if num == 0 { return Err(VintedWrapperError::ItemNumberError); } @@ -246,10 +242,8 @@ impl<'a> VintedWrapper<'a> { } // Filtro catalogo - if let Some(vec) = &filters.catalog_ids { - let querify_vec: Vec = vec.iter().map(|id| id.to_string()).collect(); - - let mut catalog_args: String = format!("&catalog_ids={}", querify_vec.join(",")); + if let Some(catalog_ids) = &filters.catalog_ids { + let mut catalog_args: String = format!("&catalog_ids={}", catalog_ids); VintedWrapper::substitute_if_first(&mut first, &mut catalog_args); @@ -257,26 +251,30 @@ impl<'a> VintedWrapper<'a> { } // Filtro colores - if let Some(vec) = &filters.color_ids { - let querify_vec: Vec = vec.iter().map(|id| id.to_string()).collect(); - - let mut color_args: String = format!("&color_ids={}", querify_vec.join(",")); + if let Some(color_ids) = &filters.color_ids { + let mut color_args: String = format!("&color_ids={}", color_ids); VintedWrapper::substitute_if_first(&mut first, &mut color_args); url = format!("{url}{color_args}"); } - if let Some(vec) = &filters.brand_ids { - let querify_vec: Vec = vec.iter().map(|id| id.to_string()).collect(); - - let mut brand_args: String = format!("&brand_ids={}", querify_vec.join(",")); + if let Some(brand_ids) = &filters.brand_ids { + let mut brand_args: String = format!("&brand_ids={}", brand_ids); VintedWrapper::substitute_if_first(&mut first, &mut brand_args); url = format!("{url}{brand_args}"); } + if let Some(vec) = &filters.article_status { + let querify_vec: Vec<&str> = vec.into_iter().map(|status| status.into()).collect(); + + let mut article_status_args: String = format!("&status_ids={}", querify_vec.join(",")); + + VintedWrapper::substitute_if_first(&mut first, &mut article_status_args); + } + // TODO terminar de procesar los filtros // Limitar el articulo a 1 diff --git a/src/tests/queries.rs b/src/tests/queries.rs index 21ad794..29a5927 100644 --- a/src/tests/queries.rs +++ b/src/tests/queries.rs @@ -1,7 +1,7 @@ use crate::db::DbController; use crate::model::filter::Filter; use crate::queries::VintedWrapperError; -use crate::{VintedWrapper}; +use crate::VintedWrapper; use bb8_postgres::tokio_postgres::NoTls; const DB_URL: &str = "postgres://postgres:postgres@localhost/vinted-rs"; @@ -31,7 +31,7 @@ async fn test_get_item_brands() { let db: DbController = DbController::new(DB_URL, POOL_SIZE, NoTls).await.unwrap(); let brand = db.get_brand_by_name(&String::from("Adidas")).await.unwrap(); - let filter: Filter = Filter::builder().brand_ids(vec![brand.id]).build(); + let filter: Filter = Filter::builder().brand_ids(brand.id.to_string()).build(); match vinted.get_items(&filter, 1).await { // Limitado el numero de elementos a 1 @@ -51,7 +51,7 @@ async fn test_get_items_brands() { let db: DbController = DbController::new(DB_URL, POOL_SIZE, NoTls).await.unwrap(); let brand = db.get_brand_by_name(&String::from("Adidas")).await.unwrap(); - let filter: Filter = Filter::builder().brand_ids(vec![brand.id]).build(); + let filter: Filter = Filter::builder().brand_ids(brand.id.to_string()).build(); match vinted.get_items(&filter, 10).await { Ok(items) => { @@ -70,7 +70,7 @@ async fn test_get_items_brands() { async fn test_get_items_catalogs_no_db() { let vinted = VintedWrapper::new(); //Woman elements - let filter: Filter = Filter::builder().catalog_ids(vec![1904]).build(); + let filter: Filter = Filter::builder().catalog_ids(String::from("1904")).build(); let substrings = vec![ "women", "mujer", "femme", "kobiety", "donna", "moterims", "noi", ];