diff options
Diffstat (limited to 'src/message')
| -rw-r--r-- | src/message/app.rs | 27 | ||||
| -rw-r--r-- | src/message/history.rs | 8 | ||||
| -rw-r--r-- | src/message/repo.rs | 9 |
3 files changed, 10 insertions, 34 deletions
diff --git a/src/message/app.rs b/src/message/app.rs index 1e50a65..385c92e 100644 --- a/src/message/app.rs +++ b/src/message/app.rs @@ -44,33 +44,6 @@ impl<'a> Messages<'a> { Ok(message.as_sent()) } - pub async fn in_channel( - &self, - channel: &channel::Id, - resume_point: Option<Sequence>, - ) -> Result<Vec<Message>, DeleteError> { - let mut tx = self.db.begin().await?; - let channel = tx - .channels() - .by_id(channel) - .await - .not_found(|| DeleteError::ChannelNotFound(channel.clone()))?; - let messages = tx.messages().in_channel(&channel, resume_point).await?; - tx.commit().await?; - - let messages = messages - .into_iter() - .filter_map(|message| { - message - .events() - .filter(Sequence::up_to(resume_point)) - .collect() - }) - .collect(); - - Ok(messages) - } - pub async fn delete(&self, message: &Id, deleted_at: &DateTime) -> Result<(), DeleteError> { let mut tx = self.db.begin().await?; let deleted = tx.sequence().next(deleted_at).await?; diff --git a/src/message/history.rs b/src/message/history.rs index c44d954..f267f4c 100644 --- a/src/message/history.rs +++ b/src/message/history.rs @@ -2,7 +2,7 @@ use super::{ event::{Deleted, Event, Sent}, Id, Message, }; -use crate::event::Instant; +use crate::event::{Instant, ResumePoint, Sequence}; #[derive(Clone, Debug, Eq, PartialEq)] pub struct History { @@ -24,6 +24,12 @@ impl History { pub fn as_sent(&self) -> Message { self.message.clone() } + + pub fn as_of(&self, resume_point: impl Into<ResumePoint>) -> Option<Message> { + self.events() + .filter(Sequence::up_to(resume_point.into())) + .collect() + } } // Events interface diff --git a/src/message/repo.rs b/src/message/repo.rs index 2ca409d..5b199a7 100644 --- a/src/message/repo.rs +++ b/src/message/repo.rs @@ -4,7 +4,7 @@ use super::{snapshot::Message, History, Id}; use crate::{ channel::{self, Channel}, clock::DateTime, - event::{Instant, Sequence}, + event::{Instant, ResumePoint, Sequence}, login::{self, Login}, }; @@ -69,7 +69,7 @@ impl<'c> Messages<'c> { pub async fn in_channel( &mut self, channel: &channel::History, - resume_at: Option<Sequence>, + resume_at: ResumePoint, ) -> Result<Vec<History>, sqlx::Error> { let channel_id = channel.id(); let messages = sqlx::query!( @@ -203,10 +203,7 @@ impl<'c> Messages<'c> { Ok(messages) } - pub async fn replay( - &mut self, - resume_at: Option<Sequence>, - ) -> Result<Vec<History>, sqlx::Error> { + pub async fn replay(&mut self, resume_at: ResumePoint) -> Result<Vec<History>, sqlx::Error> { let messages = sqlx::query!( r#" select |
