aboutsummaryrefslogtreecommitdiffstats
path: root/atuin-server/src/handlers/user.rs
diff options
context:
space:
mode:
Diffstat (limited to 'atuin-server/src/handlers/user.rs')
-rw-r--r--atuin-server/src/handlers/user.rs19
1 files changed, 18 insertions, 1 deletions
diff --git a/atuin-server/src/handlers/user.rs b/atuin-server/src/handlers/user.rs
index 89aa0601..ec2131e1 100644
--- a/atuin-server/src/handlers/user.rs
+++ b/atuin-server/src/handlers/user.rs
@@ -18,7 +18,7 @@ use uuid::Uuid;
use super::{ErrorResponse, ErrorResponseStatus, RespExt};
use crate::{
database::Database,
- models::{NewSession, NewUser},
+ models::{NewSession, NewUser, User},
router::AppState,
};
@@ -138,6 +138,23 @@ pub async fn register<DB: Database>(
}
}
+#[instrument(skip_all, fields(user.id = user.id))]
+pub async fn delete<DB: Database>(
+ user: User,
+ state: State<AppState<DB>>,
+) -> Result<Json<DeleteUserResponse>, ErrorResponseStatus<'static>> {
+ debug!("request to delete user {}", user.id);
+
+ let db = &state.0.database;
+ if let Err(e) = db.delete_user(&user).await {
+ error!("failed to delete user: {}", e);
+
+ return Err(ErrorResponse::reply("failed to delete user")
+ .with_status(StatusCode::INTERNAL_SERVER_ERROR));
+ };
+ Ok(Json(DeleteUserResponse {}))
+}
+
#[instrument(skip_all, fields(user.username = login.username.as_str()))]
pub async fn login<DB: Database>(
state: State<AppState<DB>>,