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::UserKey }; #[derive(Deserialize)] pub struct Input { pub user_name: String, } #[derive(Serialize, Deserialize)] pub struct Output { user_key: UserKey, } pub async fn handler( State(mut state): State, Json(body): Json, ) -> ApiResult { let dbuser = DbUser::temporary_auth( 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 authentiating user ".to_owned() + &body.user_name ), } })?; let key = state.create_user_key(dbuser.key()); Ok(ApiResponse(StatusCode::OK, Output { user_key: key })) }