diff options
Diffstat (limited to 'src/boot')
| -rw-r--r-- | src/boot/app.rs | 12 | ||||
| -rw-r--r-- | src/boot/mod.rs | 5 |
2 files changed, 13 insertions, 4 deletions
diff --git a/src/boot/app.rs b/src/boot/app.rs index fc84b3a..03e7230 100644 --- a/src/boot/app.rs +++ b/src/boot/app.rs @@ -2,7 +2,8 @@ use sqlx::sqlite::SqlitePool; use super::{Channel, Snapshot}; use crate::{ - channel::repo::Provider as _, event::repo::Provider as _, message::repo::Provider as _, + channel::repo::Provider as _, event::repo::Provider as _, login::repo::Provider as _, + message::repo::Provider as _, }; pub struct Boot<'a> { @@ -17,8 +18,14 @@ impl<'a> Boot<'a> { pub async fn snapshot(&self) -> Result<Snapshot, sqlx::Error> { let mut tx = self.db.begin().await?; let resume_point = tx.sequence().current().await?; - let channels = tx.channels().all(resume_point.into()).await?; + let logins = tx.logins().all(resume_point.into()).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()); @@ -48,6 +55,7 @@ impl<'a> Boot<'a> { Ok(Snapshot { resume_point, + logins, channels, }) } diff --git a/src/boot/mod.rs b/src/boot/mod.rs index a68acac..1f94106 100644 --- a/src/boot/mod.rs +++ b/src/boot/mod.rs @@ -4,7 +4,7 @@ mod routes; use crate::{ channel, event::{Instant, Sequence}, - login::Login, + login::{self, Login}, message, }; @@ -13,6 +13,7 @@ pub use self::routes::router; #[derive(serde::Serialize)] pub struct Snapshot { pub resume_point: Sequence, + pub logins: Vec<Login>, pub channels: Vec<Channel>, } @@ -43,7 +44,7 @@ impl Channel { pub struct Message { #[serde(flatten)] pub sent: Instant, - pub sender: Login, + pub sender: login::Id, pub id: message::Id, pub body: String, } |
