diff options
Diffstat (limited to 'src/user')
| -rw-r--r-- | src/user/app.rs | 44 | ||||
| -rw-r--r-- | src/user/create.rs | 5 |
2 files changed, 21 insertions, 28 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), - } - } -} diff --git a/src/user/create.rs b/src/user/create.rs index d6656e5..cb52c5d 100644 --- a/src/user/create.rs +++ b/src/user/create.rs @@ -3,6 +3,7 @@ use sqlx::{Transaction, sqlite::Sqlite}; use super::{History, repo::Provider as _, validate}; use crate::{ clock::DateTime, + error::failed::{Failed, ResultExt as _}, event::{Broadcaster, Event, Sequence, repo::Provider as _}, login::{self, Login, repo::Provider as _}, name::Name, @@ -36,7 +37,7 @@ impl<'a> Create<'a> { return Err(Error::InvalidName(name.clone())); } - let password_hash = password.hash()?; + let password_hash = password.hash().fail("Failed to digest new password")?; Ok(Validated { name, @@ -112,5 +113,5 @@ pub enum Error { #[error("invalid user name: {0}")] InvalidName(Name), #[error(transparent)] - PasswordHash(#[from] password_hash::Error), + Failed(#[from] Failed), } |
