diff options
Diffstat (limited to 'src/user/app.rs')
| -rw-r--r-- | src/user/app.rs | 44 |
1 files changed, 18 insertions, 26 deletions
diff --git a/src/user/app.rs b/src/user/app.rs index 891e3b9..d993654 100644 --- a/src/user/app.rs +++ b/src/user/app.rs @@ -1,7 +1,15 @@ use sqlx::sqlite::SqlitePool; -use super::create::{self, Create}; -use crate::{clock::DateTime, event::Broadcaster, login::Login, name::Name, password::Password}; +use super::create::Create; +use crate::{ + clock::DateTime, + db, + error::failed::{Failed, ResultExt as _}, + event::Broadcaster, + login::Login, + name::Name, + password::Password, +}; pub struct Users { db: SqlitePool, @@ -18,13 +26,16 @@ impl Users { name: &Name, password: &Password, created_at: &DateTime, - ) -> Result<Login, CreateError> { + ) -> Result<Login, Failed> { let create = Create::begin(name, password, created_at); - let validated = create.validate()?; + let validated = create.validate().fail("Failed to validate new user")?; - let mut tx = self.db.begin().await?; - let stored = validated.store(&mut tx).await?; - tx.commit().await?; + let mut tx = self.db.begin().await.fail(db::failed::BEGIN)?; + let stored = validated + .store(&mut tx) + .await + .fail("Failed to store new user")?; + tx.commit().await.fail(db::failed::COMMIT)?; let login = stored.login().to_owned(); stored.publish(&self.events); @@ -32,22 +43,3 @@ impl Users { Ok(login) } } - -#[derive(Debug, thiserror::Error)] -pub enum CreateError { - #[error("invalid user name: {0}")] - InvalidName(Name), - #[error(transparent)] - PasswordHash(#[from] password_hash::Error), - #[error(transparent)] - Database(#[from] sqlx::Error), -} - -impl From<create::Error> for CreateError { - fn from(error: create::Error) -> Self { - match error { - create::Error::InvalidName(name) => Self::InvalidName(name), - create::Error::PasswordHash(error) => Self::PasswordHash(error), - } - } -} |
