From b504db6c0302f9ce02251d5093108b2b3c0315d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20M=C3=BCller?= Date: Thu, 19 Feb 2026 14:00:00 +0000 Subject: [PATCH] Implement users list and get-by-id endpoints --- src/api/users.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/api/users.rs 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) +}