wms-be/modules/permissions/controller/permissions_controller.go

134 lines
4.4 KiB
Go

package controller
import (
"net/http"
"github.com/Caknoooo/go-gin-clean-starter/modules/permissions/dto"
"github.com/Caknoooo/go-gin-clean-starter/modules/permissions/service"
"github.com/Caknoooo/go-gin-clean-starter/pkg/utils"
"github.com/gin-gonic/gin"
)
type PermissionsController interface {
CreatePermission(ctx *gin.Context)
GetPermissionByID(ctx *gin.Context)
GetPermissionByName(ctx *gin.Context)
GetAllPermissions(ctx *gin.Context)
UpdatePermission(ctx *gin.Context)
DeletePermission(ctx *gin.Context)
}
type permissionsController struct {
service service.PermissionsService
}
func (c *permissionsController) CreatePermission(ctx *gin.Context) {
var req dto.PermissionsCreateRequest
if err := ctx.ShouldBind(&req); err != nil {
res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_DATA_FROM_BODY, err.Error(), nil)
ctx.AbortWithStatusJSON(http.StatusBadRequest, res)
return
}
res, err := c.service.Create(ctx.Request.Context(), req)
if err != nil {
resp := utils.BuildResponseFailed(dto.MESSAGE_FAILED_CREATE_PERMISSIONS, err.Error(), nil)
ctx.JSON(http.StatusBadRequest, resp)
return
}
resp := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_CREATE_PERMISSIONS, res)
ctx.JSON(http.StatusOK, resp)
}
func (c *permissionsController) GetPermissionByID(ctx *gin.Context) {
id := ctx.Param("id")
if id == "" {
res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_PERMISSIONS, "id is required", nil)
ctx.JSON(http.StatusBadRequest, res)
return
}
res, err := c.service.GetById(ctx.Request.Context(), id)
if err != nil {
resErr := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_PERMISSIONS, err.Error(), nil)
ctx.JSON(http.StatusBadRequest, resErr)
return
}
resp := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_GET_PERMISSIONS, res)
ctx.JSON(http.StatusOK, resp)
}
func (c *permissionsController) GetPermissionByName(ctx *gin.Context) {
name := ctx.Query("name")
if name == "" {
res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_PERMISSIONS, "name query is required", nil)
ctx.JSON(http.StatusBadRequest, res)
return
}
res, err := c.service.GetByName(ctx.Request.Context(), name)
if err != nil {
resErr := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_PERMISSIONS, err.Error(), nil)
ctx.JSON(http.StatusBadRequest, resErr)
return
}
resp := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_GET_PERMISSIONS, res)
ctx.JSON(http.StatusOK, resp)
}
func (c *permissionsController) GetAllPermissions(ctx *gin.Context) {
res, err := c.service.GetAll(ctx.Request.Context())
if err != nil {
resp := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_PERMISSIONS, err.Error(), nil)
ctx.JSON(http.StatusBadRequest, resp)
return
}
resp := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_GET_PERMISSIONS, res)
ctx.JSON(http.StatusOK, resp)
}
func (c *permissionsController) UpdatePermission(ctx *gin.Context) {
var req dto.PermissionsUpdateRequest
if err := ctx.ShouldBind(&req); err != nil {
res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_DATA_FROM_BODY, err.Error(), nil)
ctx.AbortWithStatusJSON(http.StatusBadRequest, res)
return
}
id := ctx.Param("id")
result, err := c.service.Update(ctx.Request.Context(), id, req)
if err != nil {
res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_UPDATE_PERMISSIONS, err.Error(), nil)
ctx.JSON(http.StatusBadRequest, res)
return
}
resp := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_UPDATE_PERMISSIONS, result)
ctx.JSON(http.StatusOK, resp)
}
func (c *permissionsController) DeletePermission(ctx *gin.Context) {
id := ctx.Param("id")
if id == "" {
res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_DELETE_PERMISSIONS, "id is required", nil)
ctx.JSON(http.StatusBadRequest, res)
return
}
if err := c.service.Delete(ctx.Request.Context(), id); err != nil {
resp := utils.BuildResponseFailed(dto.MESSAGE_FAILED_DELETE_PERMISSIONS, err.Error(), nil)
ctx.JSON(http.StatusBadRequest, resp)
return
}
resp := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_DELETE_PERMISSIONS, nil)
ctx.JSON(http.StatusOK, resp)
}
func NewPermissionsController(s service.PermissionsService) PermissionsController {
return &permissionsController{
service: s,
}
}
// func NewPermissionsController(i *do.Injector, s service.PermissionsService) PermissionsController {
// db := do.MustInvokeNamed[*gorm.DB](i, constants.DB)
// return &permissionsController{
// service: s,
// db: db,
// }
// }