personal settings: update username, name, email
This commit is contained in:
parent
1346b57b30
commit
a47e4c204a
14 changed files with 247 additions and 5 deletions
|
|
@ -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(())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue