From 949a984d0c5e87ff62e4fc12a82a23e202ac691e Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 3 Mar 2026 11:33:46 -0800 Subject: [PATCH] routes, new_user route --- koucha/src/bin/webapi/routes/mod.rs | 12 ++++++- koucha/src/bin/webapi/routes/new_user.rs | 40 ++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 koucha/src/bin/webapi/routes/new_user.rs diff --git a/koucha/src/bin/webapi/routes/mod.rs b/koucha/src/bin/webapi/routes/mod.rs index acc21cf..ce4477a 100644 --- a/koucha/src/bin/webapi/routes/mod.rs +++ b/koucha/src/bin/webapi/routes/mod.rs @@ -1,9 +1,18 @@ use serde::Serialize; use serde_json::json; -use axum::{Json, Router, response::IntoResponse, routing::get}; +use axum::{ + Json, + Router, + response::IntoResponse, + routing::{ + get, + post, + }, +}; use reqwest::StatusCode; mod get_users; +mod new_user; use crate::AppState; @@ -20,6 +29,7 @@ pub struct ApiError { pub fn router() -> Router { Router::new() .route("/get_users", get(get_users::handler)) + .route("/new_user", post(new_user::handler)) } impl IntoResponse for ApiError { diff --git a/koucha/src/bin/webapi/routes/new_user.rs b/koucha/src/bin/webapi/routes/new_user.rs new file mode 100644 index 0000000..4c0fab9 --- /dev/null +++ b/koucha/src/bin/webapi/routes/new_user.rs @@ -0,0 +1,40 @@ +use axum::{Json, extract::State}; +use koucha::db::User as DbUser; +use reqwest::StatusCode; +use serde::{Serialize, Deserialize}; + +use crate::{ + AppState, routes::{ApiError, ApiResult, ApiResponse}, types::User +}; + +#[derive(Deserialize)] +pub struct Input { + user_name: String, +} +#[derive(Serialize, Deserialize)] +pub struct Output { + user: User, +} + +pub async fn handler( + State(state): State, + Json(body): Json, +) -> ApiResult { + let dbuser = DbUser::create( + state.adapter.get_pool(), + &body.user_name + ).await.map_err(|_e| { + // TODO: Logging + ApiError { + status: StatusCode::INTERNAL_SERVER_ERROR, + error: "InternalError", + message: String::from( + "Error creating user ".to_owned() + &body.user_name + ), + } + })?; + + let user = User { name: dbuser.name().to_string() }; + + Ok(ApiResponse(StatusCode::OK, Output { user })) +}