Spaces:
Running
Running
File size: 4,157 Bytes
2a792a5 f7fe55b 2a792a5 f7fe55b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
package controllers
import (
"whatsapp-backend/models/dto"
http_error "whatsapp-backend/models/error"
"whatsapp-backend/services"
"whatsapp-backend/utils"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
)
type AdminController interface {
CreateUser(ctx *gin.Context)
UpdateUser(ctx *gin.Context)
DeleteUser(ctx *gin.Context)
SetRegistrationEnabled(ctx *gin.Context)
}
type adminController struct {
adminService services.AdminService
}
func NewAdminController(adminService services.AdminService) AdminController {
return &adminController{adminService: adminService}
}
// CreateUser godoc
// @Summary Create a new user (Admin)
// @Description Create a new user with specific role
// @Tags admin
// @Security BearerAuth
// @Accept json
// @Produce json
// @Param request body dto.CreateUserRequest true "Create User Request"
// @Success 200 {object} dto.UserResponse
// @Failure 400 {object} dto.ErrorResponse
// @Router /admin/create [post]
func (c *adminController) CreateUser(ctx *gin.Context) {
var req dto.CreateUserRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
utils.SendResponse[any, any](ctx, nil, nil, err)
return
}
resp, err := c.adminService.CreateUser(req)
if err != nil {
utils.SendResponse[any, any](ctx, nil, nil, err)
return
}
utils.SendResponse[dto.UserResponse, any](ctx, nil, *resp, nil)
}
// UpdateUser godoc
// @Summary Update a user (Admin)
// @Description Update user details
// @Tags admin
// @Security BearerAuth
// @Accept json
// @Produce json
// @Param request body dto.UpdateUserRequest true "Update User Request"
// @Success 200 {object} dto.UserResponse
// @Failure 400 {object} dto.ErrorResponse
// @Router /admin/update [post]
func (c *adminController) UpdateUser(ctx *gin.Context) {
var req dto.UpdateUserRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
utils.SendResponse[any, any](ctx, nil, nil, err)
return
}
resp, err := c.adminService.UpdateUser(req)
if err != nil {
utils.SendResponse[any, any](ctx, nil, nil, err)
return
}
utils.SendResponse[dto.UserResponse, any](ctx, nil, *resp, nil)
}
// DeleteUser godoc
// @Summary Delete a user (Admin)
// @Description Delete a user by ID
// @Tags admin
// @Security BearerAuth
// @Accept json
// @Produce json
// @Param id query string true "User ID"
// @Success 200
// @Router /admin/delete [post]
func (c *adminController) DeleteUser(ctx *gin.Context) {
idStr := ctx.Query("id")
if idStr == "" {
// Fallback to body? or just error. Query is compliant with "passing api/auth/assign with JSON" instruction?
// But for DELETE, usually it is id.
// User instruction said: "/api/admin/create, /api/admin/update, /api/admin/delete".
// I'll stick to Query param for ID for delete.
utils.SendResponse[any, any](ctx, nil, nil, http_error.ERR_BAD_REQUEST)
return
}
id, err := uuid.Parse(idStr)
if err != nil {
utils.SendResponse[any, any](ctx, nil, nil, err)
return
}
if err := c.adminService.DeleteUser(id); err != nil {
utils.SendResponse[any, any](ctx, nil, nil, err)
return
}
utils.SendResponse[any, any](ctx, nil, nil, nil)
}
// SetRegistrationEnabled godoc
// @Summary Toggle registration enabled
// @Description Enable or disable user registration
// @Tags admin
// @Security BearerAuth
// @Accept json
// @Param request body dto.SetRegistrationRequest true "Set Registration Request"
// @Success 200 {object} dto.RegisterEnabledResponse
// @Router /admin/set_registration [post]
func (c *adminController) SetRegistrationEnabled(ctx *gin.Context) {
var req dto.SetRegistrationRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
utils.SendResponse[any, any](ctx, nil, nil, err)
return
}
if err := c.adminService.SetRegistrationEnabled(req.Enabled); err != nil {
utils.SendResponse[any, any](ctx, nil, nil, err)
return
}
utils.SendResponse[dto.RegisterEnabledResponse, any](ctx, nil, dto.RegisterEnabledResponse{
Register: req.Enabled,
}, nil)
}
|