diff --git a/koucha/src/bin/webapi/routes/get_feeds.rs b/koucha/src/bin/webapi/routes/get_feeds.rs new file mode 100644 index 0000000..0fb7488 --- /dev/null +++ b/koucha/src/bin/webapi/routes/get_feeds.rs @@ -0,0 +1,37 @@ +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, +} + +pub async fn handler( + headers: HeaderMap, + State(state): State, + Json(_body): Json, +) -> ApiResult { + 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 = dbusers.iter().map(|u| User { + name: u.name().to_string(), + }).collect(); + + Ok(ApiResponse(StatusCode::OK, Output { users })) +} diff --git a/koucha/src/bin/webapi/routes/mod.rs b/koucha/src/bin/webapi/routes/mod.rs index 58afe73..24dc59c 100644 --- a/koucha/src/bin/webapi/routes/mod.rs +++ b/koucha/src/bin/webapi/routes/mod.rs @@ -11,6 +11,7 @@ use axum::{ }; use reqwest::StatusCode; +mod get_feeds; mod create_session; mod get_users; mod new_user; @@ -30,6 +31,7 @@ pub struct ApiError { pub fn router() -> Router { Router::new() .route("/create_session", post(create_session::handler)) + .route("/get_feeds", get(get_feeds::handler)) .route("/get_users", get(get_users::handler)) .route("/new_user", post(new_user::handler)) }