diff options
Diffstat (limited to 'src/message/app.rs')
| -rw-r--r-- | src/message/app.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/message/app.rs b/src/message/app.rs index 385c92e..1e50a65 100644 --- a/src/message/app.rs +++ b/src/message/app.rs @@ -44,6 +44,33 @@ 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?; |
