add user getter by id
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"git.oblat.lv/alex/triggerssmith/internal/config"
|
"git.oblat.lv/alex/triggerssmith/internal/config"
|
||||||
"git.oblat.lv/alex/triggerssmith/internal/server"
|
"git.oblat.lv/alex/triggerssmith/internal/server"
|
||||||
@@ -30,7 +31,7 @@ func MustRoute(config *config.Config, userService *user.Service) func(chi.Router
|
|||||||
|
|
||||||
return func(r chi.Router) {
|
return func(r chi.Router) {
|
||||||
r.Get("/", h.getUsers) // /users
|
r.Get("/", h.getUsers) // /users
|
||||||
//r.Get("/{userId}", h.GetUser) // /users/{userId}
|
r.Get("/{userId}", h.GetUser) // /users/{userId}
|
||||||
//r.Post("/", h.createUser) // /users
|
//r.Post("/", h.createUser) // /users
|
||||||
//r.Patch("/{userId}", h.updateUser) // /users/{userId}
|
//r.Patch("/{userId}", h.updateUser) // /users/{userId}
|
||||||
//r.Delete("/{userId}", h.deleteUser) // /users/{userId}
|
//r.Delete("/{userId}", h.deleteUser) // /users/{userId}
|
||||||
@@ -66,3 +67,37 @@ func (h *userHandler) getUsers(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
json.NewEncoder(w).Encode(resp_users)
|
json.NewEncoder(w).Encode(resp_users)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Summary Get user by ID
|
||||||
|
// @Tags users
|
||||||
|
// @Produce json
|
||||||
|
// @Param userId path int true "User ID"
|
||||||
|
// @Success 200 {object} getUserResponseUnit
|
||||||
|
// @Failure 400 {object} server.ProblemDetails
|
||||||
|
// @Failure 404 {object} server.ProblemDetails
|
||||||
|
// @Failure 500 {object} server.ProblemDetails
|
||||||
|
// @Router /api/users/{userId} [get]
|
||||||
|
func (h *userHandler) GetUser(w http.ResponseWriter, r *http.Request) {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
userIdStr := chi.URLParam(r, "userId")
|
||||||
|
userId, err := strconv.Atoi(userIdStr)
|
||||||
|
if err != nil || userId < 0 {
|
||||||
|
server.WriteProblem(w, http.StatusBadRequest, "/errors/acl/invalid-user-id", "Invalid user ID", "User ID must be positive integer", r)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
user, err := h.u.GetBy("id", userIdStr)
|
||||||
|
if err != nil {
|
||||||
|
slog.Error("failed get user by id", "err", err.Error())
|
||||||
|
server.WriteProblem(w, http.StatusInternalServerError, "/errors/internal-server-error", "Internal Server Error", "Failed to get user by ID, may not found", r)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if user == nil {
|
||||||
|
server.WriteProblem(w, http.StatusNotFound, "/errors/not-found", "Not Found", "User not found", r)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp_user := getUserResponseUnit{
|
||||||
|
UserId: user.ID,
|
||||||
|
UserName: user.Username,
|
||||||
|
}
|
||||||
|
json.NewEncoder(w).Encode(resp_user)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user