summaryrefslogtreecommitdiff
path: root/src/message
diff options
context:
space:
mode:
Diffstat (limited to 'src/message')
-rw-r--r--src/message/app.rs27
-rw-r--r--src/message/history.rs8
-rw-r--r--src/message/repo.rs9
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