diff --git a/src/service/contact.rs b/src/service/contact.rs new file mode 100644 index 0000000..603e3e6 --- /dev/null +++ b/src/service/contact.rs @@ -0,0 +1,69 @@ +pub struct Contact { + pub app: crate::app::App, + pub token: textsender_models::token::LoginResult, +} + +impl Contact { + pub async fn get( + &self, + contact_id: &uuid::Uuid, + ) -> Result, std::io::Error> + { + let client = reqwest::Client::new(); + let endpoint = + format!("api/v1/contact?id={contact_id}"); + let api_url = format!("{}/{endpoint}", self.app.api_url); + + println!("Url: {api_url:?}"); + + let (key, header) = super::auth_header(&self.token.access_token); + + match client.get(api_url).header(key, header).send().await { + Ok(response) => match response.status() { + reqwest::StatusCode::OK => match response.text().await { + Ok(val) => match parse_response(&val).await { + Ok(login_result) => Ok(login_result), + Err(err) => Err(err), + }, + Err(err) => Err(std::io::Error::other(err)), + }, + _ => Err(std::io::Error::other("Error getting token")), + }, + Err(err) => Err(std::io::Error::other(err.to_string())), + } + } +} + +async fn parse_response( + response: &str, +) -> Result, std::io::Error> { + match serde_json::from_str::(response) { + Ok(j) => match j.get("data") { + Some(serde_json::Value::Array(lrs)) => { + if lrs.is_empty() { + Err(std::io::Error::other("Error response is empty")) + } else { + let mut events: Vec< + textsender_models::contact::Contact, + > = Vec::new(); + + for event in lrs.iter() { + let ll: textsender_models::contact::Contact = + match serde_json::from_value(event.clone()) { + Ok(lr) => lr, + Err(err) => { + return Err(std::io::Error::other(err.to_string())); + } + }; + events.push(ll); + } + + Ok(events) + } + } + _ => Err(std::io::Error::other("Error parsing response")), + }, + Err(err) => Err(std::io::Error::other(err.to_string())), + } +} + diff --git a/src/service/core.rs b/src/service/core.rs index 6de4c83..97441db 100644 --- a/src/service/core.rs +++ b/src/service/core.rs @@ -51,9 +51,22 @@ impl Service { } }; + let contacts = super::contact::Contact { + app: self.app.clone(), + token: self.token.clone() + }; let events = events.unwrap_or_default(); for event in events { println!("Event: {event:?}"); + let contact = &match contacts.get(&event.contact_id).await { + Ok(contact) => contact, + Err(err) => { + eprintln!("Error: {err:?}"); + continue; + } + }[0]; + + println!("Contact Id: {:?}", contact.id); } todo!( diff --git a/src/service/message.rs b/src/service/message.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/service/mod.rs b/src/service/mod.rs index 0095e9d..fa12fdd 100644 --- a/src/service/mod.rs +++ b/src/service/mod.rs @@ -1,3 +1,4 @@ +pub mod contact; pub mod core; pub mod event; pub mod queue;