server: implement getuser

This commit is contained in:
2026-05-16 20:47:53 +00:00
parent 26b00f8566
commit de106c61fe
3 changed files with 37 additions and 2 deletions
+30
View File
@@ -1,9 +1,11 @@
package api
import (
"errors"
"log/slog"
"net/http"
"github.com/go-chi/chi/v5"
"github.com/go-chi/render"
"github.com/google/uuid"
)
@@ -35,6 +37,34 @@ func ListUsers(w http.ResponseWriter, r *http.Request) {
}
}
func GetUser(w http.ResponseWriter, r *http.Request) {
slog.Debug("user: entering GetUser handler")
userID := chi.URLParam(r, "userID")
parsed, err := uuid.Parse(userID)
if err != nil {
render.Render(w, r, ErrInvalidRequest(err))
return
}
user, err := dbGetUser(parsed.String())
if err != nil {
if errors.Is(err, ErrUserNotFound) {
render.Render(w, r, ErrNotFound)
} else {
slog.Error("user: failed to fetch user", "userid", parsed.String(), "error", err)
render.Render(w, r, ErrRender(err))
}
return
}
slog.Debug("user: rendering user", "userid", user.ID, "username", user.Name)
if err := render.Render(w, r, NewUserPayloadResponse(user)); err != nil {
slog.Error("user: failed to render user", "userid", parsed.String(), "error", err)
render.Render(w, r, ErrRender(err))
}
}
func newUserID() uuid.UUID {
return uuid.New()
}