update methods

This commit is contained in:
nquidox 2026-03-07 15:49:54 +03:00
parent 6d12c55785
commit 71d13bb217
5 changed files with 277 additions and 59 deletions

View file

@ -1,6 +1,7 @@
package merch
import (
"errors"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
"merch-api/pkg/responses"
@ -26,7 +27,8 @@ func (h *Handler) RegisterRoutes(r *gin.RouterGroup) {
merchGroup.POST("/create", h.controller.create)
merchGroup.GET("/:id", h.controller.getOne)
merchGroup.GET("/list", h.controller.getMany)
merchGroup.PUT("/update", h.controller.update)
merchGroup.PUT("/:id", h.controller.updateMerch)
merchGroup.PUT("/extra/:id", h.controller.updateExtraData)
merchGroup.DELETE("/:id", h.controller.deleteMerch)
originsGroup := merchGroup.Group("/origins")
@ -49,21 +51,14 @@ func (h *Handler) RegisterRoutes(r *gin.RouterGroup) {
// @Failure 500 {object} responses.InternalServerError
// @Router /merch/create [POST]
func (co *controller) create(c *gin.Context) {
userUuid, err := co.utils.GetUserUuidFromContext(c)
if err != nil {
c.JSON(http.StatusUnauthorized, responses.Unauthorized{Error: err.Error()})
logErrController(err)
return
}
var newMerch newMerchDTO
if err = c.ShouldBindJSON(&newMerch); err != nil {
if err := c.ShouldBindJSON(&newMerch); err != nil {
c.JSON(http.StatusBadRequest, responses.BadRequest{Error: err.Error()})
logErrController(err)
return
}
if err = co.service.createMerch(c, userUuid, &newMerch); err != nil {
if err := co.service.createMerch(c, getUserId(c), &newMerch); err != nil {
c.JSON(http.StatusInternalServerError, responses.InternalServerError{Error: err.Error()})
logErrController(err)
return
@ -87,14 +82,7 @@ func (co *controller) getOne(c *gin.Context) {}
// @Failure 500 {object} responses.InternalServerError
// @Router /merch/list [GET]
func (co *controller) getMany(c *gin.Context) {
userUuid, err := co.utils.GetUserUuidFromContext(c)
if err != nil {
c.JSON(http.StatusUnauthorized, responses.Unauthorized{Error: err.Error()})
logErrController(err)
return
}
response, err := co.service.getMany(c, userUuid)
response, err := co.service.getMany(c, getUserId(c))
if err != nil {
c.JSON(http.StatusInternalServerError, responses.InternalServerError{Error: err.Error()})
logErrController(err)
@ -109,7 +97,95 @@ func (co *controller) getMany(c *gin.Context) {
c.JSON(http.StatusOK, response)
}
func (co *controller) update(c *gin.Context) {}
// updateMerch godoc
//
// @Summary Update merch
// @Description Update merch general info (except extra data)
// @Tags Merch
// @Accept json
// @Param uuid path string true "merch uuid"
// @Param payload body updateMerchDTO true "payload"
// @Produce json
// @Success 200 {object} merchDTO
// @Failure 400 {object} responses.BadRequest
// @Failure 401 {object} responses.Unauthorized
// @Failure 500 {object} responses.InternalServerError
// @Router /merch/{uuid} [PUT]
func (co *controller) updateMerch(c *gin.Context) {
merchUuid := c.Param("id")
if err := uuid.Validate(merchUuid); err != nil {
c.JSON(http.StatusBadRequest, responses.BadRequest{Error: err.Error()})
logErrController(err)
return
}
var payload updateMerchDTO
if err := c.ShouldBindJSON(&payload); err != nil {
c.JSON(http.StatusBadRequest, responses.BadRequest{Error: err.Error()})
logErrController(err)
return
}
if merchUuid != payload.MerchUuid {
c.JSON(http.StatusBadRequest, responses.BadRequest{Error: "MerchUuid does not match"})
logErrController(errors.New("MerchUuid does not match"))
return
}
response, err := co.service.updateMerch(c, getUserId(c), &payload)
if err != nil {
c.JSON(http.StatusInternalServerError, responses.InternalServerError{Error: err.Error()})
logErrController(err)
return
}
c.JSON(http.StatusOK, response)
}
// updateMerch godoc
//
// @Summary Update merch extra data
// @Description Update ONLY merch extra data
// @Tags Merch
// @Accept json
// @Param uuid path string true "merch uuid"
// @Param payload body extraDataDTO true "payload"
// @Produce json
// @Success 200 {object} extraDataDTO
// @Failure 400 {object} responses.BadRequest
// @Failure 401 {object} responses.Unauthorized
// @Failure 500 {object} responses.InternalServerError
// @Router /merch/extra/{uuid} [PUT]
func (co *controller) updateExtraData(c *gin.Context) {
merchUuid := c.Param("id")
if err := uuid.Validate(merchUuid); err != nil {
c.JSON(http.StatusBadRequest, responses.BadRequest{Error: err.Error()})
logErrController(err)
return
}
var payload extraDataDTO
if err := c.ShouldBindJSON(&payload); err != nil {
c.JSON(http.StatusBadRequest, responses.BadRequest{Error: err.Error()})
logErrController(err)
return
}
if merchUuid != payload.MerchUuid {
c.JSON(http.StatusBadRequest, responses.BadRequest{Error: "MerchUuid does not match"})
logErrController(errors.New("MerchUuid does not match"))
return
}
response, err := co.service.updateExtraData(c, getUserId(c), &payload)
if err != nil {
c.JSON(http.StatusInternalServerError, responses.InternalServerError{Error: err.Error()})
logErrController(err)
return
}
c.JSON(http.StatusOK, response)
}
// deleteMerch godoc
//
@ -124,21 +200,14 @@ func (co *controller) update(c *gin.Context) {}
// @Failure 500 {object} responses.InternalServerError
// @Router /merch/{uuid} [DELETE]
func (co *controller) deleteMerch(c *gin.Context) {
userUuid, err := co.utils.GetUserUuidFromContext(c)
if err != nil {
c.JSON(http.StatusUnauthorized, responses.Unauthorized{Error: err.Error()})
logErrController(err)
return
}
merchUuid := c.Param("id")
if err = uuid.Validate(merchUuid); err != nil {
if err := uuid.Validate(merchUuid); err != nil {
c.JSON(http.StatusBadRequest, responses.BadRequest{Error: err.Error()})
logErrController(err)
return
}
if err = co.service.deleteOneMerchRecord(c, userUuid, merchUuid); err != nil {
if err := co.service.deleteOneMerchRecord(c, getUserId(c), merchUuid); err != nil {
c.JSON(http.StatusInternalServerError, responses.InternalServerError{Error: err.Error()})
logErrController(err)
return