summaryrefslogtreecommitdiff
path: root/src/boot/app.rs
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2024-10-09 01:43:34 -0400
committerOwen Jacobson <owen@grimoire.ca>2024-10-09 11:45:31 -0400
commit2f0b77e8fd02a137047c8975a573626cd76310ff (patch)
tree481d82e99cf8aad8fe256d8186ae72bcee23bf9f /src/boot/app.rs
parentba96974bdebd6d4ec345907d49944b5ee644ed47 (diff)
Return a flat message list on boot, not nested lists by channel.
This is a bit easier to compute, and sets us up nicely for pulling message boot out of the `/api/boot` response entirely.
Diffstat (limited to 'src/boot/app.rs')
-rw-r--r--src/boot/app.rs42
1 files changed, 15 insertions, 27 deletions
diff --git a/src/boot/app.rs b/src/boot/app.rs
index 03e7230..ef48b2f 100644
--- a/src/boot/app.rs
+++ b/src/boot/app.rs
@@ -1,6 +1,6 @@
use sqlx::sqlite::SqlitePool;
-use super::{Channel, Snapshot};
+use super::Snapshot;
use crate::{
channel::repo::Provider as _, event::repo::Provider as _, login::repo::Provider as _,
message::repo::Provider as _,
@@ -20,43 +20,31 @@ impl<'a> Boot<'a> {
let resume_point = tx.sequence().current().await?;
let logins = tx.logins().all(resume_point.into()).await?;
+ let channels = tx.channels().all(resume_point.into()).await?;
+ let messages = tx.messages().all(resume_point.into()).await?;
+
+ tx.commit().await?;
+
let logins = logins
.into_iter()
.filter_map(|login| login.as_of(resume_point))
.collect();
- let channels = tx.channels().all(resume_point.into()).await?;
- let channels = {
- let mut snapshots = Vec::with_capacity(channels.len());
-
- let channels = channels.into_iter().filter_map(|channel| {
- channel
- .as_of(resume_point)
- .map(|snapshot| (channel, snapshot))
- });
-
- for (channel, snapshot) in channels {
- let messages = tx
- .messages()
- .in_channel(&channel, resume_point.into())
- .await?;
-
- let messages = messages
- .into_iter()
- .filter_map(|message| message.as_of(resume_point));
-
- snapshots.push(Channel::new(snapshot, messages));
- }
-
- snapshots
- };
+ let channels = channels
+ .into_iter()
+ .filter_map(|channel| channel.as_of(resume_point))
+ .collect();
- tx.commit().await?;
+ let messages = messages
+ .into_iter()
+ .filter_map(|message| message.as_of(resume_point))
+ .collect();
Ok(Snapshot {
resume_point,
logins,
channels,
+ messages,
})
}
}