package http import ( "enaklo-pos-be/internal/common/errors" "enaklo-pos-be/internal/handlers/request" "enaklo-pos-be/internal/handlers/response" category "enaklo-pos-be/internal/services/v2/categories" "github.com/gin-gonic/gin" "net/http" "strconv" ) type CategoryHandler struct { service category.Service } func NewCategoryHandler(service category.Service) *CategoryHandler { return &CategoryHandler{service: service} } func (h *CategoryHandler) Route(group *gin.RouterGroup, jwt gin.HandlerFunc) { route := group.Group("/categories") route.Use(jwt) route.POST("/create", h.Create) route.GET("/list", h.GetByPartner) route.GET("/:id", h.GetByID) route.PUT("/:id", h.Update) route.DELETE("/:id", h.Delete) } func (h *CategoryHandler) Create(c *gin.Context) { ctx := request.GetMyContext(c) var req request.CategoryRequest if err := c.ShouldBindJSON(&req); err != nil { response.ErrorWrapper(c, errors.ErrorBadRequest) return } category, err := h.service.Create(ctx, req.ToEntity(ctx.RequestedBy())) if err != nil { response.ErrorWrapper(c, err) return } c.JSON(http.StatusOK, response.BaseResponse{ Success: true, Status: http.StatusOK, Data: response.MapToCategoryResponse(category), }) } func (h *CategoryHandler) GetByPartner(c *gin.Context) { ctx := request.GetMyContext(c) categories, err := h.service.GetByPartnerID(ctx, ctx.RequestedBy()) if err != nil { response.ErrorWrapper(c, err) return } c.JSON(http.StatusOK, response.BaseResponse{ Success: true, Status: http.StatusOK, Data: response.MapToCategoryListResponse(categories), }) } func (h *CategoryHandler) GetByID(c *gin.Context) { ctx := request.GetMyContext(c) id, err := strconv.ParseInt(c.Param("id"), 10, 64) if err != nil { response.ErrorWrapper(c, errors.ErrorBadRequest) return } category, err := h.service.GetByID(ctx, id) if err != nil { response.ErrorWrapper(c, err) return } c.JSON(http.StatusOK, response.BaseResponse{ Success: true, Status: http.StatusOK, Data: response.MapToCategoryResponse(category), }) } func (h *CategoryHandler) Update(c *gin.Context) { ctx := request.GetMyContext(c) id, err := strconv.ParseInt(c.Param("id"), 10, 64) if err != nil { response.ErrorWrapper(c, errors.ErrorBadRequest) return } var req request.CategoryRequest if err := c.ShouldBindJSON(&req); err != nil { response.ErrorWrapper(c, errors.ErrorBadRequest) return } category := req.ToEntity(ctx.RequestedBy()) category.ID = id if err := h.service.Update(ctx, category); err != nil { response.ErrorWrapper(c, err) return } c.JSON(http.StatusOK, response.BaseResponse{ Success: true, Status: http.StatusOK, }) } func (h *CategoryHandler) Delete(c *gin.Context) { ctx := request.GetMyContext(c) id, err := strconv.ParseInt(c.Param("id"), 10, 64) if err != nil { response.ErrorWrapper(c, errors.ErrorBadRequest) return } if err := h.service.Delete(ctx, id); err != nil { response.ErrorWrapper(c, err) return } c.JSON(http.StatusOK, response.BaseResponse{ Success: true, Status: http.StatusOK, }) }