Add User route and Refactor code
This commit is contained in:
parent
519749fd3a
commit
b311a41dc7
24 changed files with 902 additions and 489 deletions
98
server/routers/user.go
Normal file
98
server/routers/user.go
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
package routers
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"github.com/go-chi/chi/v5"
|
||||
"go.uber.org/zap"
|
||||
"net/http"
|
||||
"recipe-manager/contracts"
|
||||
"recipe-manager/enums/permissions"
|
||||
"recipe-manager/middlewares"
|
||||
"recipe-manager/services/logger"
|
||||
"recipe-manager/services/user"
|
||||
"time"
|
||||
)
|
||||
|
||||
type UserRouter struct {
|
||||
taoLogger *logger.TaoLogger
|
||||
userService user.UserService
|
||||
}
|
||||
|
||||
func NewUserRouter(taoLogger *logger.TaoLogger, userService user.UserService) *UserRouter {
|
||||
return &UserRouter{taoLogger, userService}
|
||||
}
|
||||
|
||||
func (ur *UserRouter) Route(r chi.Router) {
|
||||
|
||||
// Users
|
||||
r.Route("/users", func(r chi.Router) {
|
||||
r.Get("/", middlewares.Authorize([]permissions.Permission{permissions.SuperAdmin}, ur.getUsers))
|
||||
|
||||
r.Post("/", middlewares.Authorize([]permissions.Permission{permissions.SuperAdmin}, ur.createUser))
|
||||
})
|
||||
|
||||
// User
|
||||
r.Route("/user", func(r chi.Router) {
|
||||
r.Get("/{id}", middlewares.OwnOrAuthorize([]permissions.Permission{permissions.SuperAdmin}, ur.getUser))
|
||||
})
|
||||
}
|
||||
|
||||
// ================== Users Handler ================================
|
||||
|
||||
func (ur *UserRouter) getUsers(w http.ResponseWriter, r *http.Request) {
|
||||
// TODO: get all User, This route only SuperAdmin permission can access
|
||||
json.NewEncoder(w).Encode(map[string]interface{}{
|
||||
"status": "OK",
|
||||
})
|
||||
}
|
||||
|
||||
func (ur *UserRouter) createUser(w http.ResponseWriter, r *http.Request) {
|
||||
ctx, cancel := context.WithTimeout(r.Context(), time.Second*5)
|
||||
defer cancel()
|
||||
|
||||
u := &contracts.CreateUserReq{}
|
||||
if err := json.NewDecoder(r.Body).Decode(u); err != nil {
|
||||
ur.taoLogger.Log.Error("UserRouter.CreateUser", zap.Error(err))
|
||||
}
|
||||
|
||||
ur.taoLogger.Log.Info("UserRouter.CreateUser", zap.Reflect("u", u))
|
||||
|
||||
if err := ur.userService.CreateNewUser(ctx, u.Name, u.Email, u.Picture, u.Permissions); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
w.WriteHeader(http.StatusNoContent)
|
||||
if err := json.NewEncoder(w).Encode(&contracts.ResponseDefault{
|
||||
Status: http.StatusText(http.StatusNoContent),
|
||||
Message: "Created",
|
||||
}); err != nil {
|
||||
ur.taoLogger.Log.Error("UserRouter.CreateUser", zap.Error(err))
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== User Handler ===============================
|
||||
|
||||
func (ur *UserRouter) getUser(w http.ResponseWriter, r *http.Request) {
|
||||
ctx, cancel := context.WithTimeout(r.Context(), time.Second*5)
|
||||
defer cancel()
|
||||
|
||||
userID := chi.URLParam(r, "id")
|
||||
|
||||
getUser, err := ur.userService.GetUserByID(ctx, userID)
|
||||
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
if err := json.NewEncoder(w).Encode(&contracts.UserRes{
|
||||
ID: getUser.ID,
|
||||
Name: getUser.Name,
|
||||
Email: getUser.Email,
|
||||
Picture: getUser.Picture,
|
||||
Permissions: getUser.Permissions,
|
||||
}); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue