Correctly delete mails with aliases

This commit is contained in:
traxys 2023-10-09 13:22:48 +02:00
parent 237ef6250d
commit e8e9e9df8c

View file

@ -638,20 +638,29 @@ async fn delete_mail(
User(user): User, User(user): User,
Form(delete): Form<Mail>, Form(delete): Form<Mail>,
) -> Result<Redirect, Error> { ) -> Result<Redirect, Error> {
let mut tx = state.db.begin().await?;
sqlx::query!("DELETE FROM alias WHERE dest = $1", delete.mail)
.execute(&mut *tx)
.await?;
let rows_affected = sqlx::query!( let rows_affected = sqlx::query!(
"DELETE FROM emails WHERE id = $1 AND mail = $2", "DELETE FROM emails WHERE id = $1 AND mail = $2",
user, user,
delete.mail delete.mail
) )
.execute(&state.db) .execute(&mut *tx)
.await? .await?
.rows_affected(); .rows_affected();
if rows_affected != 1 { if rows_affected != 1 {
tx.rollback().await?;
tracing::warn!("Invalid number of rows affected in delete: {rows_affected}"); tracing::warn!("Invalid number of rows affected in delete: {rows_affected}");
return Err(Error::InternalError); return Err(Error::InternalError);
} }
tx.commit().await?;
Ok(Redirect::to("/")) Ok(Redirect::to("/"))
} }