server: implement getuser
This commit is contained in:
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user