diff --git a/src/api/users.rs b/src/api/users.rs new file mode 100644 index 0000000..14820e2 --- /dev/null +++ b/src/api/users.rs @@ -0,0 +1,26 @@ +use axum::{extract::{Path, State}, http::StatusCode, Json}; +use uuid::Uuid; +use crate::models::user::User; + +pub async fn list_users( + State(pool): State, +) -> Result>, StatusCode> { + let users = sqlx::query_as::<_, User>("SELECT id, username, email FROM users ORDER BY created_at DESC") + .fetch_all(&pool) + .await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + Ok(Json(users)) +} + +pub async fn get_user( + State(pool): State, + Path(id): Path, +) -> Result, StatusCode> { + sqlx::query_as::<_, User>("SELECT id, username, email FROM users WHERE id = $1") + .bind(id) + .fetch_optional(&pool) + .await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)? + .map(Json) + .ok_or(StatusCode::NOT_FOUND) +}