diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2024-10-09 00:57:31 -0400 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2024-10-09 11:45:31 -0400 |
| commit | ba96974bdebd6d4ec345907d49944b5ee644ed47 (patch) | |
| tree | 8811ef8981a915a8cc17d8a1e576750b31cbdd0b /src/login/app.rs | |
| parent | da1810afc5a627a518131cfb0af0996c5ec60bcf (diff) | |
Provide a view of logins to clients.
Diffstat (limited to 'src/login/app.rs')
| -rw-r--r-- | src/login/app.rs | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/src/login/app.rs b/src/login/app.rs index 4f60b89..bb1419b 100644 --- a/src/login/app.rs +++ b/src/login/app.rs @@ -1,24 +1,38 @@ use sqlx::sqlite::SqlitePool; use super::{repo::Provider as _, Login, Password}; +use crate::{ + clock::DateTime, + event::{repo::Provider as _, Broadcaster, Event}, +}; pub struct Logins<'a> { db: &'a SqlitePool, + events: &'a Broadcaster, } impl<'a> Logins<'a> { - pub const fn new(db: &'a SqlitePool) -> Self { - Self { db } + pub const fn new(db: &'a SqlitePool, events: &'a Broadcaster) -> Self { + Self { db, events } } - pub async fn create(&self, name: &str, password: &Password) -> Result<Login, CreateError> { + pub async fn create( + &self, + name: &str, + password: &Password, + created_at: &DateTime, + ) -> Result<Login, CreateError> { let password_hash = password.hash()?; let mut tx = self.db.begin().await?; - let login = tx.logins().create(name, &password_hash).await?; + let created = tx.sequence().next(created_at).await?; + let login = tx.logins().create(name, &password_hash, &created).await?; tx.commit().await?; - Ok(login) + self.events + .broadcast(login.events().map(Event::from).collect::<Vec<_>>()); + + Ok(login.as_created()) } } |
