Basdat/internal/controllers/role_controller.go
2025-12-20 00:01:08 +07:00

105 lines
2.9 KiB
Go

package controllers
import (
"lost-and-found/internal/services"
"lost-and-found/internal/utils"
"net/http"
"strconv"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
type RoleController struct {
roleService *services.RoleService
}
// NewRoleController initializes the role controller
func NewRoleController(db *gorm.DB) *RoleController {
return &RoleController{
roleService: services.NewRoleService(db),
}
}
// GetRoles gets all roles
// GET /api/admin/roles
func (c *RoleController) GetRoles(ctx *gin.Context) {
roles, err := c.roleService.GetAllRoles()
if err != nil {
utils.ErrorResponse(ctx, http.StatusInternalServerError, "Failed to get roles", err.Error())
return
}
utils.SuccessResponse(ctx, http.StatusOK, "Roles retrieved", roles)
}
// GetPermissions gets all permissions
// GET /api/admin/permissions
func (c *RoleController) GetPermissions(ctx *gin.Context) {
permissions, err := c.roleService.GetAllPermissions()
if err != nil {
utils.ErrorResponse(ctx, http.StatusInternalServerError, "Failed to get permissions", err.Error())
return
}
utils.SuccessResponse(ctx, http.StatusOK, "Permissions retrieved", permissions)
}
// CreateRole creates a new role
// POST /api/admin/roles
func (c *RoleController) CreateRole(ctx *gin.Context) {
var req services.CreateRoleRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
utils.ErrorResponse(ctx, http.StatusBadRequest, "Invalid request data", err.Error())
return
}
role, err := c.roleService.CreateRole(req)
if err != nil {
utils.ErrorResponse(ctx, http.StatusBadRequest, "Failed to create role", err.Error())
return
}
utils.SuccessResponse(ctx, http.StatusCreated, "Role created", role)
}
// UpdateRole updates a role
// PUT /api/admin/roles/:id
func (c *RoleController) UpdateRole(ctx *gin.Context) {
id, err := strconv.ParseUint(ctx.Param("id"), 10, 32)
if err != nil {
utils.ErrorResponse(ctx, http.StatusBadRequest, "Invalid role ID", err.Error())
return
}
var req services.UpdateRoleRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
utils.ErrorResponse(ctx, http.StatusBadRequest, "Invalid request data", err.Error())
return
}
role, err := c.roleService.UpdateRole(uint(id), req)
if err != nil {
utils.ErrorResponse(ctx, http.StatusBadRequest, "Failed to update role", err.Error())
return
}
utils.SuccessResponse(ctx, http.StatusOK, "Role updated", role)
}
// DeleteRole deletes a role
// DELETE /api/admin/roles/:id
func (c *RoleController) DeleteRole(ctx *gin.Context) {
id, err := strconv.ParseUint(ctx.Param("id"), 10, 32)
if err != nil {
utils.ErrorResponse(ctx, http.StatusBadRequest, "Invalid role ID", err.Error())
return
}
if err := c.roleService.DeleteRole(uint(id)); err != nil {
utils.ErrorResponse(ctx, http.StatusBadRequest, "Failed to delete role", err.Error())
return
}
utils.SuccessResponse(ctx, http.StatusOK, "Role deleted", nil)
}