summaryrefslogtreecommitdiff
path: root/src/user/app.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/user/app.rs')
-rw-r--r--src/user/app.rs44
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),
- }
- }
-}