105 lines
2.9 KiB
Go
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)
|
|
} |