38 lines
931 B
Rust
38 lines
931 B
Rust
|
|
use axum::{Json, extract::State, http::HeaderMap};
|
||
|
|
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 { }
|
||
|
|
#[derive(Serialize, Deserialize)]
|
||
|
|
pub struct Output {
|
||
|
|
users: Vec<User>,
|
||
|
|
}
|
||
|
|
|
||
|
|
pub async fn handler(
|
||
|
|
headers: HeaderMap,
|
||
|
|
State(state): State<AppState>,
|
||
|
|
Json(_body): Json<Input>,
|
||
|
|
) -> ApiResult<Output> {
|
||
|
|
let dbusers = DbUser::get_all(state.adapter.get_pool())
|
||
|
|
.await.map_err(|_e| {
|
||
|
|
// TODO: Logging
|
||
|
|
ApiError {
|
||
|
|
status: StatusCode::INTERNAL_SERVER_ERROR,
|
||
|
|
error: "InternalError",
|
||
|
|
message: "Error getting all users from DB.".to_string(),
|
||
|
|
}
|
||
|
|
})?;
|
||
|
|
|
||
|
|
let users: Vec<User> = dbusers.iter().map(|u| User {
|
||
|
|
name: u.name().to_string(),
|
||
|
|
}).collect();
|
||
|
|
|
||
|
|
Ok(ApiResponse(StatusCode::OK, Output { users }))
|
||
|
|
}
|