diff --git a/api/router.go b/api/router.go index af4ff83..c040963 100644 --- a/api/router.go +++ b/api/router.go @@ -11,11 +11,13 @@ import ( api_acladmin "git.oblat.lv/alex/triggerssmith/api/acl_admin" api_auth "git.oblat.lv/alex/triggerssmith/api/auth" api_block "git.oblat.lv/alex/triggerssmith/api/block" + api_user "git.oblat.lv/alex/triggerssmith/api/user" _ "git.oblat.lv/alex/triggerssmith/docs" "git.oblat.lv/alex/triggerssmith/internal/acl" "git.oblat.lv/alex/triggerssmith/internal/auth" "git.oblat.lv/alex/triggerssmith/internal/config" "git.oblat.lv/alex/triggerssmith/internal/server" + "git.oblat.lv/alex/triggerssmith/internal/user" "git.oblat.lv/alex/triggerssmith/internal/vars" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" @@ -30,12 +32,15 @@ type Router struct { authService *auth.Service aclService *acl.Service + + userService *user.Service } type RouterDependencies struct { AuthService *auth.Service Configuration *config.Config ACLService *acl.Service + UserService *user.Service } func NewRouter(deps RouterDependencies) *Router { @@ -48,12 +53,16 @@ func NewRouter(deps RouterDependencies) *Router { if deps.ACLService == nil { panic("ACLService is required") } + if deps.UserService == nil { + panic("UserService is required") + } r := chi.NewRouter() return &Router{ r: r, cfg: deps.Configuration, authService: deps.AuthService, aclService: deps.ACLService, + userService: deps.UserService, } } @@ -92,7 +101,8 @@ func (r *Router) MustRoute() chi.Router { api.Route("/block", api_block.MustRoute(r.cfg)) authRoute := api_auth.MustRoute(r.cfg, r.authService) api.Route("/auth", authRoute) - //api.Route("/users", authRoute) // legacy support + usersRoute := api_user.MustRoute(r.cfg, r.userService) + api.Route("/users", usersRoute) aclAdminRoute := api_acladmin.MustRoute(r.cfg, r.aclService, r.authService) api.Route("/acl", aclAdminRoute) api.Route("/acl-admin", aclAdminRoute) // legacy support diff --git a/api/user/handle.go b/api/user/handle.go index 240c44f..a4442d8 100644 --- a/api/user/handle.go +++ b/api/user/handle.go @@ -1,14 +1,19 @@ 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 - a *user.Service + u *user.Service } func MustRoute(config *config.Config, userService *user.Service) func(chi.Router) { @@ -20,14 +25,44 @@ func MustRoute(config *config.Config, userService *user.Service) func(chi.Router } h := &userHandler{ cfg: config, - a: userService, + 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} + 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) +} diff --git a/cmd/serve.go b/cmd/serve.go index fa6eac8..67166aa 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -254,6 +254,7 @@ var serveCmd = &cobra.Command{ AuthService: authService, Configuration: cfg, ACLService: aclService, + UserService: userService, }) srv.SetHandler(router.MustRoute())