69 lines
1.7 KiB
Go
69 lines
1.7 KiB
Go
package api_user
|
|
|
|
import (
|
|
"encoding/json"
|
|
"log/slog"
|
|
"net/http"
|
|
|
|
"git.oblat.lv/alex/triggerssmith/internal/config"
|
|
"git.oblat.lv/alex/triggerssmith/internal/server"
|
|
"git.oblat.lv/alex/triggerssmith/internal/user"
|
|
"github.com/go-chi/chi/v5"
|
|
)
|
|
|
|
type userHandler struct {
|
|
cfg *config.Config
|
|
u *user.Service
|
|
}
|
|
|
|
func MustRoute(config *config.Config, userService *user.Service) func(chi.Router) {
|
|
if config == nil {
|
|
panic("config is nil")
|
|
}
|
|
if userService == nil {
|
|
panic("userService is nil")
|
|
}
|
|
h := &userHandler{
|
|
cfg: config,
|
|
u: userService,
|
|
}
|
|
|
|
return func(r chi.Router) {
|
|
r.Get("/", h.getUsers) // /users
|
|
//r.Get("/{userId}", h.GetUser) // /users/{userId}
|
|
//r.Post("/", h.createUser) // /users
|
|
//r.Patch("/{userId}", h.updateUser) // /users/{userId}
|
|
//r.Delete("/{userId}", h.deleteUser) // /users/{userId}
|
|
}
|
|
}
|
|
|
|
type getUserResponseUnit struct {
|
|
UserId uint `json:"userId"`
|
|
UserName string `json:"name"`
|
|
}
|
|
|
|
type getUsersResponse []getUserResponseUnit
|
|
|
|
// @Summary Get all user list
|
|
// @Tags users
|
|
// @Produce json
|
|
// @Success 200 {object} getUsersResponse
|
|
// @Failure 500 {object} server.ProblemDetails
|
|
// @Router /api/users [get]
|
|
func (h *userHandler) getUsers(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
users, err := h.u.GetUsers()
|
|
if err != nil {
|
|
slog.Error("failed get users", "err", err.Error())
|
|
server.WriteProblem(w, http.StatusInternalServerError, "/errors/internal-server-error", "Internal Server Error", "Failed to get all user list", r)
|
|
}
|
|
var resp_users getUsersResponse
|
|
for _, user := range users {
|
|
resp_users = append(resp_users, getUserResponseUnit{
|
|
UserId: user.ID,
|
|
UserName: user.Username,
|
|
})
|
|
}
|
|
json.NewEncoder(w).Encode(resp_users)
|
|
}
|