feat():learning后台管理项目初始化
This commit is contained in:
245
internal/api/handlers/goalfymax_user_handler.go
Normal file
245
internal/api/handlers/goalfymax_user_handler.go
Normal file
@@ -0,0 +1,245 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"goalfymax-admin/internal/models"
|
||||
"goalfymax-admin/internal/services"
|
||||
"goalfymax-admin/pkg/utils"
|
||||
"strconv"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type GoalfyMaxUserHandler struct {
|
||||
service services.GoalfyMaxUserService
|
||||
response *utils.Response
|
||||
}
|
||||
|
||||
func NewGoalfyMaxUserHandler(s services.GoalfyMaxUserService) *GoalfyMaxUserHandler {
|
||||
return &GoalfyMaxUserHandler{service: s, response: utils.NewResponse()}
|
||||
}
|
||||
|
||||
func (h *GoalfyMaxUserHandler) List(c *gin.Context) {
|
||||
var req models.GoalfyMaxUserListRequest
|
||||
if err := c.ShouldBindQuery(&req); err != nil {
|
||||
h.response.ValidateError(c, err)
|
||||
return
|
||||
}
|
||||
users, total, err := h.service.List(&req)
|
||||
if err != nil {
|
||||
h.response.InternalServerError(c, err.Error())
|
||||
return
|
||||
}
|
||||
h.response.Success(c, gin.H{"users": users, "total": total, "page": req.Page, "size": req.Size})
|
||||
}
|
||||
|
||||
func (h *GoalfyMaxUserHandler) GetByID(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id64, err := strconv.ParseUint(idStr, 10, 32)
|
||||
if err != nil {
|
||||
h.response.BadRequest(c, "无效的ID")
|
||||
return
|
||||
}
|
||||
user, err := h.service.GetByID(uint(id64))
|
||||
if err != nil {
|
||||
h.response.InternalServerError(c, err.Error())
|
||||
return
|
||||
}
|
||||
h.response.Success(c, user)
|
||||
}
|
||||
|
||||
func (h *GoalfyMaxUserHandler) Create(c *gin.Context) {
|
||||
var req models.GoalfyMaxUserCreateRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
h.response.ValidateError(c, err)
|
||||
return
|
||||
}
|
||||
user, err := h.service.Create(&req)
|
||||
if err != nil {
|
||||
h.response.InternalServerError(c, err.Error())
|
||||
return
|
||||
}
|
||||
h.response.Success(c, user)
|
||||
}
|
||||
|
||||
func (h *GoalfyMaxUserHandler) Update(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id64, err := strconv.ParseUint(idStr, 10, 32)
|
||||
if err != nil {
|
||||
h.response.BadRequest(c, "无效的ID")
|
||||
return
|
||||
}
|
||||
var req models.GoalfyMaxUserUpdateRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
h.response.ValidateError(c, err)
|
||||
return
|
||||
}
|
||||
user, err := h.service.Update(uint(id64), &req)
|
||||
if err != nil {
|
||||
h.response.InternalServerError(c, err.Error())
|
||||
return
|
||||
}
|
||||
h.response.Success(c, user)
|
||||
}
|
||||
|
||||
func (h *GoalfyMaxUserHandler) Delete(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id64, err := strconv.ParseUint(idStr, 10, 32)
|
||||
if err != nil {
|
||||
h.response.BadRequest(c, "无效的ID")
|
||||
return
|
||||
}
|
||||
if err := h.service.Delete(uint(id64)); err != nil {
|
||||
h.response.InternalServerError(c, err.Error())
|
||||
return
|
||||
}
|
||||
h.response.Success(c, gin.H{"message": "删除成功"})
|
||||
}
|
||||
|
||||
func (h *GoalfyMaxUserHandler) Ban(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id64, err := strconv.ParseUint(idStr, 10, 32)
|
||||
if err != nil {
|
||||
h.response.BadRequest(c, "无效的ID")
|
||||
return
|
||||
}
|
||||
var req models.GoalfyMaxUserBanRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
h.response.ValidateError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 从上下文获取当前管理员ID
|
||||
adminID := 0
|
||||
if userID, exists := c.Get("user_id"); exists {
|
||||
switch v := userID.(type) {
|
||||
case int:
|
||||
adminID = v
|
||||
case uint:
|
||||
adminID = int(v)
|
||||
case string:
|
||||
if parsedID, err := strconv.Atoi(v); err == nil {
|
||||
adminID = parsedID
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if err := h.service.Ban(uint(id64), &req, adminID); err != nil {
|
||||
h.response.InternalServerError(c, err.Error())
|
||||
return
|
||||
}
|
||||
h.response.Success(c, gin.H{"message": "封禁成功"})
|
||||
}
|
||||
|
||||
func (h *GoalfyMaxUserHandler) Unban(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id64, err := strconv.ParseUint(idStr, 10, 32)
|
||||
if err != nil {
|
||||
h.response.BadRequest(c, "无效的ID")
|
||||
return
|
||||
}
|
||||
if err := h.service.Unban(uint(id64)); err != nil {
|
||||
h.response.InternalServerError(c, err.Error())
|
||||
return
|
||||
}
|
||||
h.response.Success(c, gin.H{"message": "解封成功"})
|
||||
}
|
||||
|
||||
func (h *GoalfyMaxUserHandler) AddBalance(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id64, err := strconv.ParseUint(idStr, 10, 32)
|
||||
if err != nil {
|
||||
h.response.BadRequest(c, "无效的ID")
|
||||
return
|
||||
}
|
||||
var req models.GoalfyMaxUserAddBalanceRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
h.response.ValidateError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 从上下文获取当前管理员信息
|
||||
operatorID := 0
|
||||
operatorEmail := "system@goalfy.com"
|
||||
if userID, exists := c.Get("user_id"); exists {
|
||||
switch v := userID.(type) {
|
||||
case int:
|
||||
operatorID = v
|
||||
case uint:
|
||||
operatorID = int(v)
|
||||
case string:
|
||||
if parsedID, err := strconv.Atoi(v); err == nil {
|
||||
operatorID = parsedID
|
||||
}
|
||||
}
|
||||
}
|
||||
// 尝试获取用户邮箱(从userInfo中获取)
|
||||
if userInfo, exists := c.Get("user"); exists {
|
||||
if user, ok := userInfo.(*models.UserInfo); ok && user != nil {
|
||||
if user.Email != "" {
|
||||
operatorEmail = user.Email
|
||||
} else if user.PreferredUsername != "" {
|
||||
operatorEmail = user.PreferredUsername + "@goalfy.com"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取IP地址和UserAgent
|
||||
ipAddress := c.ClientIP()
|
||||
userAgent := c.Request.UserAgent()
|
||||
|
||||
if err := h.service.AddBalance(uint(id64), &req, operatorID, operatorEmail, ipAddress, userAgent); err != nil {
|
||||
h.response.InternalServerError(c, err.Error())
|
||||
return
|
||||
}
|
||||
h.response.Success(c, gin.H{"message": "增加余额成功"})
|
||||
}
|
||||
|
||||
func (h *GoalfyMaxUserHandler) DeductBalance(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id64, err := strconv.ParseUint(idStr, 10, 32)
|
||||
if err != nil {
|
||||
h.response.BadRequest(c, "无效的ID")
|
||||
return
|
||||
}
|
||||
var req models.GoalfyMaxUserAddBalanceRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
h.response.ValidateError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 从上下文获取当前管理员信息
|
||||
operatorID := 0
|
||||
operatorEmail := "system@goalfy.com"
|
||||
if userID, exists := c.Get("user_id"); exists {
|
||||
switch v := userID.(type) {
|
||||
case int:
|
||||
operatorID = v
|
||||
case uint:
|
||||
operatorID = int(v)
|
||||
case string:
|
||||
if parsedID, err := strconv.Atoi(v); err == nil {
|
||||
operatorID = parsedID
|
||||
}
|
||||
}
|
||||
}
|
||||
// 尝试获取用户邮箱(从userInfo中获取)
|
||||
if userInfo, exists := c.Get("user"); exists {
|
||||
if user, ok := userInfo.(*models.UserInfo); ok && user != nil {
|
||||
if user.Email != "" {
|
||||
operatorEmail = user.Email
|
||||
} else if user.PreferredUsername != "" {
|
||||
operatorEmail = user.PreferredUsername + "@goalfy.com"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取IP地址和UserAgent
|
||||
ipAddress := c.ClientIP()
|
||||
userAgent := c.Request.UserAgent()
|
||||
|
||||
if err := h.service.DeductBalance(uint(id64), &req, operatorID, operatorEmail, ipAddress, userAgent); err != nil {
|
||||
h.response.InternalServerError(c, err.Error())
|
||||
return
|
||||
}
|
||||
h.response.Success(c, gin.H{"message": "减少余额成功"})
|
||||
}
|
||||
Reference in New Issue
Block a user