cargo-platform/internal/handlers/router/province/province.go
teguh nugroho 622045f3fc
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
province list
2026-08-17 12:58:23 +07:00

170 lines
4.0 KiB
Go

package province
import (
"cargo-erp-backend/internal/handlers/dto"
"cargo-erp-backend/internal/usecases"
"cargo-erp-backend/pkg/helpers"
"cargo-erp-backend/pkg/response"
"net/http"
"strconv"
"github.com/gin-gonic/gin"
)
type ProvinceHandlerInterface interface {
Router()
}
type ProvinceHandler struct {
Helper helpers.HelperInterface
Group *gin.RouterGroup
}
func NewProvinceHandler(helper helpers.HelperInterface, g *gin.RouterGroup) ProvinceHandlerInterface {
return &ProvinceHandler{Helper: helper, Group: g}
}
func (h *ProvinceHandler) Router() {
r := h.Group.Group("provinces")
{
r.GET("/", h.GetAll)
r.POST("/list", h.GetList)
r.GET("/:id", h.GetByID)
r.POST("/", h.Create)
r.PUT("/:id", h.Update)
r.DELETE("/:id", h.Delete)
}
}
func (h *ProvinceHandler) GetAll(c *gin.Context) {
userid, err := h.Helper.GetAuthInfo(c.GetString("auth"))
if err != nil {
response.Error(c, http.StatusUnauthorized, err.Error())
return
}
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
limit, _ := strconv.Atoi(c.DefaultQuery("limit", "10"))
if page < 1 {
page = 1
}
if limit < 1 {
limit = 10
}
u := usecases.NewProvinceUsecase(h.Helper, *userid)
provinces, total, err := u.GetAll(page, limit)
if err != nil {
response.Error(c, http.StatusInternalServerError, err.Error())
return
}
response.PaginatedResponse(c, provinces, int(total), page, limit)
}
func (h *ProvinceHandler) GetList(c *gin.Context) {
userid, err := h.Helper.GetAuthInfo(c.GetString("auth"))
if err != nil {
response.Error(c, http.StatusUnauthorized, err.Error())
return
}
var req dto.DataTableRequest
// 1. Bind JSON request otomatis ke struct
if err := c.ShouldBindJSON(&req); err != nil {
response.Error(c, http.StatusBadRequest, "Request Format request invalid")
return
}
u := usecases.NewProvinceUsecase(h.Helper, *userid)
res, err := u.GetList(req)
if err != nil {
response.Error(c, http.StatusInternalServerError, err.Error())
return
}
response.Success(c, res)
return
}
func (h *ProvinceHandler) GetByID(c *gin.Context) {
userid, err := h.Helper.GetAuthInfo(c.GetString("auth"))
if err != nil {
response.Error(c, http.StatusUnauthorized, err.Error())
return
}
id := c.Param("id")
u := usecases.NewProvinceUsecase(h.Helper, *userid)
province, err := u.GetByID(id)
if err != nil {
response.Error(c, http.StatusNotFound, "province not found")
return
}
response.Success(c, province)
}
func (h *ProvinceHandler) Create(c *gin.Context) {
var req dto.CreateProvinceRequest
if err := c.BindJSON(&req); err != nil {
response.Error(c, http.StatusBadRequest, err.Error())
return
}
userid, err := h.Helper.GetAuthInfo(c.GetString("auth"))
if err != nil {
response.Error(c, http.StatusUnauthorized, err.Error())
return
}
createdBy := userid.ID
u := usecases.NewProvinceUsecase(h.Helper, *userid)
province, err := u.Create(req.Name, createdBy)
if err != nil {
response.Error(c, http.StatusInternalServerError, err.Error())
return
}
response.Created(c, province)
}
func (h *ProvinceHandler) Update(c *gin.Context) {
id := c.Param("id")
var req dto.UpdateProvinceRequest
if err := c.BindJSON(&req); err != nil {
response.Error(c, http.StatusBadRequest, err.Error())
return
}
userid, err := h.Helper.GetAuthInfo(c.GetString("auth"))
if err != nil {
response.Error(c, http.StatusUnauthorized, err.Error())
return
}
updatedBy := userid.ID
u := usecases.NewProvinceUsecase(h.Helper, *userid)
province, err := u.Update(id, req.Name, updatedBy)
if err != nil {
response.Error(c, http.StatusInternalServerError, err.Error())
return
}
response.Success(c, province)
}
func (h *ProvinceHandler) Delete(c *gin.Context) {
userid, err := h.Helper.GetAuthInfo(c.GetString("auth"))
if err != nil {
response.Error(c, http.StatusUnauthorized, err.Error())
return
}
id := c.Param("id")
u := usecases.NewProvinceUsecase(h.Helper, *userid)
if err := u.Delete(id); err != nil {
response.Error(c, http.StatusInternalServerError, err.Error())
return
}
response.Success(c, map[string]interface{}{"message": "province deleted"})
}