summaryrefslogtreecommitdiff
path: root/src/message/repo.rs
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2024-10-03 20:44:07 -0400
committerOwen Jacobson <owen@grimoire.ca>2024-10-03 21:03:02 -0400
commit617172576b95bbb935a75f98a98787da5a4e9a9d (patch)
treeae72fea2e81d023960c93d4efbf7e137c3705c48 /src/message/repo.rs
parent0a5599c60d20ccc2223779eeba5dc91a95ea0fe5 (diff)
List messages per channel.
Diffstat (limited to 'src/message/repo.rs')
-rw-r--r--src/message/repo.rs57
1 files changed, 45 insertions, 12 deletions
diff --git a/src/message/repo.rs b/src/message/repo.rs
index ae41736..fc835c8 100644
--- a/src/message/repo.rs
+++ b/src/message/repo.rs
@@ -48,12 +48,12 @@ impl<'c> Messages<'c> {
)
.map(|row| History {
message: Message {
+ sent: *sent,
channel: channel.clone(),
sender: sender.clone(),
id: row.id,
body: row.body,
},
- sent: *sent,
deleted: None,
})
.fetch_one(&mut *self.0)
@@ -62,18 +62,51 @@ impl<'c> Messages<'c> {
Ok(message)
}
- pub async fn in_channel(&mut self, channel: &Channel) -> Result<Vec<Id>, sqlx::Error> {
- let messages = sqlx::query_scalar!(
+ pub async fn in_channel(
+ &mut self,
+ channel: &Channel,
+ resume_at: Option<Sequence>,
+ ) -> Result<Vec<History>, sqlx::Error> {
+ let messages = sqlx::query!(
r#"
select
- message.id as "id: Id"
+ channel.id as "channel_id: channel::Id",
+ channel.name as "channel_name",
+ sender.id as "sender_id: login::Id",
+ sender.name as "sender_name",
+ message.id as "id: Id",
+ message.body,
+ sent_at as "sent_at: DateTime",
+ sent_sequence as "sent_sequence: Sequence"
from message
join channel on message.channel = channel.id
+ join login as sender on message.sender = sender.id
where channel.id = $1
+ and coalesce(message.sent_sequence <= $2, true)
order by message.sent_sequence
"#,
channel.id,
+ resume_at,
)
+ .map(|row| History {
+ message: Message {
+ sent: Instant {
+ at: row.sent_at,
+ sequence: row.sent_sequence,
+ },
+ channel: Channel {
+ id: row.channel_id,
+ name: row.channel_name,
+ },
+ sender: Login {
+ id: row.sender_id,
+ name: row.sender_name,
+ },
+ id: row.id,
+ body: row.body,
+ },
+ deleted: None,
+ })
.fetch_all(&mut *self.0)
.await?;
@@ -101,6 +134,10 @@ impl<'c> Messages<'c> {
)
.map(|row| History {
message: Message {
+ sent: Instant {
+ at: row.sent_at,
+ sequence: row.sent_sequence,
+ },
channel: Channel {
id: row.channel_id,
name: row.channel_name,
@@ -112,10 +149,6 @@ impl<'c> Messages<'c> {
id: row.id,
body: row.body,
},
- sent: Instant {
- at: row.sent_at,
- sequence: row.sent_sequence,
- },
deleted: None,
})
.fetch_one(&mut *self.0)
@@ -189,6 +222,10 @@ impl<'c> Messages<'c> {
)
.map(|row| History {
message: Message {
+ sent: Instant {
+ at: row.sent_at,
+ sequence: row.sent_sequence,
+ },
channel: Channel {
id: row.channel_id,
name: row.channel_name,
@@ -200,10 +237,6 @@ impl<'c> Messages<'c> {
id: row.id,
body: row.body,
},
- sent: Instant {
- at: row.sent_at,
- sequence: row.sent_sequence,
- },
deleted: None,
})
.fetch_all(&mut *self.0)