package merch import ( "github.com/gin-gonic/gin" "merch-api/pkg/responses" "merch-api/pkg/utils" "net/http" ) type controller struct { service *service utils utils.Utils } func newController(s *service, u utils.Utils) *controller { return &controller{ service: s, utils: u, } } func (h *Handler) RegisterRoutes(r *gin.RouterGroup) { merchGroup := r.Group("/merch") 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.DELETE("/delete", h.controller.delete) originsGroup := merchGroup.Group("/origins") originsGroup.POST("", h.controller.createOrigin) originsGroup.GET("", h.controller.getOrigins) originsGroup.DELETE("", h.controller.deleteOrigin) } // create godoc // // @Summary Create new merch // @Description Create new merch // @Tags Merch // @Accept json // @Param merch body newMerchDTO true "merch body" // @Success 201 // @Failure 400 {object} responses.BadRequest // @Failure 401 {object} responses.Unauthorized // @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 { c.JSON(http.StatusBadRequest, responses.BadRequest{Error: err.Error()}) logErrController(err) return } if err = co.service.createMerch(c, userUuid, &newMerch); err != nil { c.JSON(http.StatusInternalServerError, responses.InternalServerError{Error: err.Error()}) logErrController(err) return } c.Status(http.StatusCreated) } func (co *controller) getOne(c *gin.Context) {} func (co *controller) getMany(c *gin.Context) {} func (co *controller) update(c *gin.Context) {} func (co *controller) delete(c *gin.Context) {} // createOrigin godoc // // @Summary Create new origin // @Description Create new origin with name // @Tags Origins // @Accept json // @Param origin body newOriginDTO true "origin body" // @Success 201 // @Failure 400 {object} responses.BadRequest // @Failure 401 {object} responses.Unauthorized // @Failure 500 {object} responses.InternalServerError // @Router /merch/origins [POST] func (co *controller) createOrigin(c *gin.Context) { var origin *newOriginDTO if err := c.ShouldBindJSON(&origin); err != nil { c.JSON(http.StatusBadRequest, responses.BadRequest{Error: err.Error()}) logErrController(err) return } if err := co.service.createOrigin(c, origin); err != nil { c.JSON(http.StatusInternalServerError, responses.InternalServerError{Error: err.Error()}) logErrController(err) return } logDebugController("create origin success") c.Status(http.StatusCreated) } // getOrigins godoc // // @Summary Get all origins // @Description Get all origins // @Tags Origins // @Produce json // @Success 200 {object} originsDTO // @Success 204 // @Failure 400 {object} responses.BadRequest // @Failure 401 {object} responses.Unauthorized // @Failure 500 {object} responses.InternalServerError // @Router /merch/origins [GET] func (co *controller) getOrigins(c *gin.Context) { response, err := co.service.getOrigins(c) if err != nil { c.JSON(http.StatusInternalServerError, responses.InternalServerError{Error: err.Error()}) logErrController(err) return } logDebugController("get origins success") c.JSON(http.StatusOK, response) } // deleteOrigin godoc // // @Summary Delete origin // @Description Marks origin as deleted by name. // @Tags Origins // @Accept json // @Param origin body deleteOriginDTO true "origin body" // @Success 204 // @Failure 400 {object} responses.BadRequest // @Failure 401 {object} responses.Unauthorized // @Failure 500 {object} responses.InternalServerError // @Router /merch/origins [DELETE] func (co *controller) deleteOrigin(c *gin.Context) { var origin *deleteOriginDTO if err := c.ShouldBindJSON(&origin); err != nil { c.JSON(http.StatusBadRequest, responses.BadRequest{Error: err.Error()}) logErrController(err) return } if err := co.service.deleteOrigin(c, origin); err != nil { c.JSON(http.StatusInternalServerError, responses.InternalServerError{Error: err.Error()}) logErrController(err) return } logDebugController("delete origin success") c.Status(http.StatusNoContent) }