Private
Public Access
1
0

client: Started working on ability to sync messages after last known message

This commit is contained in:
2025-04-28 15:17:58 -07:00
parent 6375284d9e
commit 9c245a5b52
8 changed files with 55 additions and 11 deletions

View File

@@ -10,7 +10,7 @@ use async_trait::async_trait;
use serde::{de::DeserializeOwned, Deserialize, Serialize};
use crate::{
model::{Conversation, ConversationID, JwtToken, Message},
model::{Conversation, ConversationID, JwtToken, Message, MessageID},
APIInterface
};
@@ -118,8 +118,27 @@ impl<K: TokenStore + Send + Sync> APIInterface for HTTPAPIClient<K> {
Ok(token)
}
async fn get_messages(&mut self, conversation_id: &ConversationID) -> Result<Vec<Message>, Self::Error> {
let endpoint = format!("messages?guid={}", conversation_id);
async fn get_messages(
&mut self,
conversation_id: &ConversationID,
limit: Option<u32>,
before: Option<MessageID>,
after: Option<MessageID>,
) -> Result<Vec<Message>, Self::Error> {
let mut endpoint = format!("messages?guid={}", conversation_id);
if let Some(limit_val) = limit {
endpoint.push_str(&format!("&limit={}", limit_val));
}
if let Some(before_id) = before {
endpoint.push_str(&format!("&beforeMessageGUID={}", before_id));
}
if let Some(after_id) = after {
endpoint.push_str(&format!("&afterMessageGUID={}", after_id));
}
let messages: Vec<Message> = self.request(&endpoint, Method::GET).await?;
Ok(messages)
}
@@ -288,7 +307,7 @@ mod test {
let mut client = local_mock_client();
let conversations = client.get_conversations().await.unwrap();
let conversation = conversations.first().unwrap();
let messages = client.get_messages(&conversation.guid).await.unwrap();
let messages = client.get_messages(&conversation.guid, None, None, None).await.unwrap();
assert!(!messages.is_empty());
}
}

View File

@@ -1,6 +1,6 @@
use async_trait::async_trait;
pub use crate::model::{
Conversation, Message, ConversationID
Conversation, Message, ConversationID, MessageID,
};
use crate::model::JwtToken;
@@ -20,7 +20,13 @@ pub trait APIInterface {
async fn get_conversations(&mut self) -> Result<Vec<Conversation>, Self::Error>;
// (GET) /messages
async fn get_messages(&mut self, conversation_id: &ConversationID) -> Result<Vec<Message>, Self::Error>;
async fn get_messages(
&mut self,
conversation_id: &ConversationID,
limit: Option<u32>,
before: Option<MessageID>,
after: Option<MessageID>,
) -> Result<Vec<Message>, Self::Error>;
// (POST) /authenticate
async fn authenticate(&mut self, credentials: Credentials) -> Result<JwtToken, Self::Error>;