merch-api/internal/user/controller.go
nquidox 081267a662
All checks were successful
/ Make image (push) Successful in 58s
get personal endpoint
2026-04-01 17:49:36 +03:00

159 lines
4.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package user
import (
"github.com/gin-gonic/gin"
"merch-api/internal/appLog"
"merch-api/pkg/responses"
"merch-api/pkg/router"
"merch-api/pkg/utils"
"net/http"
)
const controllerLogHeader string = "[Controller]"
type controller struct {
service *service
utils utils.Utils
}
func newController(s *service, utils utils.Utils) *controller {
return &controller{
service: s,
utils: utils,
}
}
func (h *Handler) RegisterRoutes(r *gin.RouterGroup, mw *router.Middlewares) {
userGroup := r.Group("/user")
userGroup.POST("", mw.RegMW, h.controller.create)
userGroup.DELETE("", mw.AuthMW, h.controller.delete)
userGroup.GET("/me", mw.AuthMW, h.controller.me)
userGroup.GET("/personal", mw.AuthMW, h.controller.getPersonalData)
}
// create godoc
//
// @Summary Create new user
// @Description Adds local user record based on user uuid from auth service
// @Tags User
// @Accept json
// @Success 201
// @Failure 400 {object} responses.BadRequest
// @Failure 401 {object} responses.Unauthorized
// @Failure 500 {object} responses.InternalServerError
// @Router /user [POST]
func (co *controller) create(c *gin.Context) {
u, err := co.utils.GetUserUuidFromContext(c)
if err != nil {
c.JSON(http.StatusBadRequest, responses.BadRequest{Error: err.Error()})
appLog.LogErr(pkgLogHeader, controllerLogHeader, err)
return
}
if err = co.service.createUser(c, u); err != nil {
c.JSON(http.StatusInternalServerError, responses.InternalServerError{Error: err.Error()})
appLog.LogErr(pkgLogHeader, controllerLogHeader, err)
return
}
c.Status(http.StatusCreated)
}
// delete godoc
//
// @Summary Delete user
// @Description Marks user as deleted by user uuid
// @Tags User
// @Accept json
// @Success 204
// @Failure 400 {object} responses.BadRequest
// @Failure 401 {object} responses.Unauthorized
// @Failure 500 {object} responses.InternalServerError
// @Router /user [DELETE]
func (co *controller) delete(c *gin.Context) {
u, err := co.utils.GetUserUuidFromContext(c)
if err != nil {
c.JSON(http.StatusBadRequest, responses.BadRequest{Error: err.Error()})
appLog.LogErr(pkgLogHeader, controllerLogHeader, err)
return
}
if err = co.service.deleteUser(c, u); err != nil {
c.JSON(http.StatusInternalServerError, responses.InternalServerError{Error: err.Error()})
appLog.LogErr(pkgLogHeader, controllerLogHeader, err)
return
}
c.Status(http.StatusNoContent)
}
// me godoc
//
// @Summary Returns user data
// @Description Returns user data
// @Tags User
// @Accept json
// @Success 200 {object} MeDTO
// @Failure 400 {object} responses.BadRequest
// @Failure 401 {object} responses.Unauthorized
// @Failure 404 {object} responses.NotFound
// @Failure 500 {object} responses.InternalServerError
// @Router /user [DELETE]
func (co *controller) me(c *gin.Context) {
u, err := co.utils.GetUserUuidFromContext(c)
if err != nil {
c.JSON(http.StatusBadRequest, responses.BadRequest{Error: err.Error()})
appLog.LogErr(pkgLogHeader, controllerLogHeader, err)
return
}
response, err := co.service.getUser(c, u)
if err != nil {
c.JSON(http.StatusInternalServerError, responses.InternalServerError{Error: err.Error()})
appLog.LogErr(pkgLogHeader, controllerLogHeader, err)
return
}
if response == nil {
c.Status(http.StatusNoContent)
return
}
c.JSON(http.StatusOK, response)
}
// getPersonalData godoc
//
// @Summary Получить персональные данные.
// @Description Получить персональные данные. Запрос данных по gRPC у сервиса авторизации.
// @Tags User
// @Produce json
// @Success 200 {object} common.PersonalDTO
// @Success 204 {object}
// @Failure 400 {object} responses.BadRequest
// @Failure 401 {object} responses.Unauthorized
// @Failure 500 {object} responses.InternalServerError
// @Router /merch/labels/{uuid} [get]
func (co *controller) getPersonalData(c *gin.Context) {
u, err := co.utils.GetUserUuidFromContext(c)
if err != nil {
c.JSON(http.StatusBadRequest, responses.BadRequest{Error: err.Error()})
appLog.LogErr(pkgLogHeader, controllerLogHeader, err)
return
}
response, err := co.service.getPersonalData(c, u)
if err != nil {
c.JSON(http.StatusInternalServerError, responses.InternalServerError{Error: err.Error()})
appLog.LogErr(pkgLogHeader, controllerLogHeader, err)
return
}
if response == nil {
c.Status(http.StatusNoContent)
return
}
c.JSON(http.StatusOK, response)
}