197 lines
6.9 KiB
Go
197 lines
6.9 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
|
|
}
|
|
|
|
// CreatePermission godoc
|
|
// @Summary Create a new permission
|
|
// @Description Create a new permission with the provided information
|
|
// @Tags Permissions
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param request body dto.PermissionsCreateRequest true "Permission creation data"
|
|
// @Success 200 {object} utils.Response
|
|
// @Failure 400 {object} utils.Response
|
|
// @Router /permissions [post]
|
|
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)
|
|
}
|
|
|
|
// GetPermissionByID godoc
|
|
// @Summary Get permission by ID
|
|
// @Description Get detailed information of a specific permission by its ID
|
|
// @Tags Permissions
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param id path string true "Permission ID"
|
|
// @Success 200 {object} utils.Response
|
|
// @Failure 400 {object} utils.Response
|
|
// @Failure 404 {object} utils.Response
|
|
// @Router /permissions/{id} [get]
|
|
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)
|
|
}
|
|
|
|
// GetPermissionByName godoc
|
|
// @Summary Get permission by name
|
|
// @Description Get permission information by its name
|
|
// @Tags Permissions
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param name query string true "Permission name"
|
|
// @Success 200 {object} utils.Response
|
|
// @Failure 400 {object} utils.Response
|
|
// @Router /permissions/by-name [get]
|
|
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)
|
|
}
|
|
|
|
// GetAllPermissions godoc
|
|
// @Summary Get list of permissions
|
|
// @Description Get list of all permissions
|
|
// @Tags Permissions
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Success 200 {object} utils.Response
|
|
// @Failure 400 {object} utils.Response
|
|
// @Router /permissions [get]
|
|
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)
|
|
}
|
|
|
|
// UpdatePermission godoc
|
|
// @Summary Update permission
|
|
// @Description Update permission information by ID
|
|
// @Tags Permissions
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param id path string true "Permission ID"
|
|
// @Param request body dto.PermissionsUpdateRequest true "Permission update data"
|
|
// @Success 200 {object} utils.Response
|
|
// @Failure 400 {object} utils.Response
|
|
// @Router /permissions/{id} [put]
|
|
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)
|
|
}
|
|
|
|
// DeletePermission godoc
|
|
// @Summary Delete permission
|
|
// @Description Delete a permission by ID
|
|
// @Tags Permissions
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param id path string true "Permission ID"
|
|
// @Success 200 {object} utils.Response
|
|
// @Failure 400 {object} utils.Response
|
|
// @Failure 404 {object} utils.Response
|
|
// @Router /permissions/{id} [delete]
|
|
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)
|
|
}
|
|
|
|
// NewPermissionsController creates a new instance of PermissionsController with the provided service.
|
|
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,
|
|
// }
|
|
// }
|