add user service to router

This commit is contained in:
2026-01-18 21:54:41 +02:00
parent 7fd02119b8
commit 376ce4ca62
3 changed files with 54 additions and 8 deletions

View File

@@ -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

View File

@@ -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)
}

View File

@@ -254,6 +254,7 @@ var serveCmd = &cobra.Command{
AuthService: authService,
Configuration: cfg,
ACLService: aclService,
UserService: userService,
})
srv.SetHandler(router.MustRoute())