personal settings: update username, name, email

This commit is contained in:
Philippe Loctaux 2023-04-05 23:41:25 +02:00
parent 1346b57b30
commit a47e4c204a
14 changed files with 247 additions and 5 deletions

View file

@ -1,6 +1,7 @@
use crate::error::Error;
use crate::User;
use database::sqlx::SqliteExecutor;
use database::Error as DatabaseError;
use database::Users as DatabaseUsers;
use email_address::EmailAddress;
use hash::Password;
@ -105,4 +106,53 @@ impl User {
.await?
.map(Self::from))
}
pub async fn set_username(
&self,
conn: impl SqliteExecutor<'_>,
username: &str,
) -> Result<(), Error> {
DatabaseUsers::set_username(conn, self.id.as_ref(), username)
.await
.map_err(|e| match e {
DatabaseError::UniqueConstraint(column) => {
if &column == "username" {
Error::UsernameNotAvailable(username.into())
} else {
Error::ColumnNotAvailable(column)
}
}
_ => e.into(),
})?;
Ok(())
}
pub async fn set_name(&self, conn: impl SqliteExecutor<'_>, name: &str) -> Result<(), Error> {
DatabaseUsers::set_name(conn, self.id.as_ref(), name).await?;
Ok(())
}
pub async fn set_email(
&self,
conn: impl SqliteExecutor<'_>,
email: EmailAddress,
) -> Result<(), Error> {
let email = email.as_str();
DatabaseUsers::set_email(conn, self.id.as_ref(), email)
.await
.map_err(|e| match e {
DatabaseError::UniqueConstraint(column) => {
if &column == "email" {
Error::EmailNotAvailable(email.into())
} else {
Error::ColumnNotAvailable(column)
}
}
_ => e.into(),
})?;
Ok(())
}
}

View file

@ -5,4 +5,13 @@
pub enum Error {
#[error("Database: {0}")]
Database(#[from] database::Error),
#[error("The database column \"{0}\" is not available.")]
ColumnNotAvailable(String),
#[error("The username \"{0}\" is not available.")]
UsernameNotAvailable(String),
#[error("The email \"{0}\" is linked to another user.")]
EmailNotAvailable(String),
}