feat():learning后台管理项目初始化

This commit is contained in:
yuj
2025-12-04 16:23:46 +08:00
parent 39886d50d2
commit 88e048f4d1
154 changed files with 28966 additions and 6 deletions

View 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": "减少余额成功"})
}