diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2024-10-09 01:43:34 -0400 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2024-10-09 11:45:31 -0400 |
| commit | 2f0b77e8fd02a137047c8975a573626cd76310ff (patch) | |
| tree | 481d82e99cf8aad8fe256d8186ae72bcee23bf9f /src/boot/app.rs | |
| parent | ba96974bdebd6d4ec345907d49944b5ee644ed47 (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.rs | 42 |
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, }) } } |
