diff --git a/src/service/core.rs b/src/service/core.rs index 6953bef..b384668 100644 --- a/src/service/core.rs +++ b/src/service/core.rs @@ -55,6 +55,10 @@ impl Service { app: self.app.clone(), token: self.token.clone(), }; + let messages = super::message::Message { + app: self.app.clone(), + token: self.token.clone() + }; let events = events.unwrap_or_default(); for event in events { println!("Event: {event:?}"); @@ -65,8 +69,16 @@ impl Service { continue; } }[0]; + let message = &match messages.get(&event.message_id).await { + Ok(messages) => messages, + Err(err) => { + eprintln!("Error: {err:?}"); + continue; + } + }[0]; println!("Contact Id: {:?}", contact.id); + println!("Message Id: {:?}", message.id); } todo!( diff --git a/src/service/message.rs b/src/service/message.rs index e69de29..67c7150 100644 --- a/src/service/message.rs +++ b/src/service/message.rs @@ -0,0 +1,65 @@ +pub struct Message { + pub app: crate::app::App, + pub token: textsender_models::token::LoginResult, +} + +impl Message { + pub async fn get( + &self, + message_id: &uuid::Uuid, + ) -> Result, std::io::Error> { + let client = reqwest::Client::new(); + let endpoint = format!("api/v1/message?id={message_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 = Vec::new(); + + for event in lrs.iter() { + let ll: textsender_models::message::Message = + 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/mod.rs b/src/service/mod.rs index 7c8ac02..91d76d9 100644 --- a/src/service/mod.rs +++ b/src/service/mod.rs @@ -1,6 +1,7 @@ pub mod auth; pub mod contact; pub mod core; +pub mod message; pub mod event; pub mod queue;