You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

127 lines
3.3 KiB
Go

package user
import (
coupon2 "cls-server/internal/application/coupon"
gift_log2 "cls-server/internal/application/gift_log"
"cls-server/internal/application/user"
middleware "cls-server/internal/infrastructure/middleware/auth"
"cls-server/internal/interfaces"
"cls-server/pkg/logger"
"cls-server/pkg/util/page"
"fmt"
"github.com/gin-gonic/gin"
"net/http"
"strconv"
)
// UserHandler 处理请求阶段的逻辑
type UserHandler struct {
service *user.UserService
authMiddleware *middleware.AuthMiddleware
log logger.Logger
}
var _ interfaces.Handler = (*UserHandler)(nil)
func NewUserHandler(userService *user.UserService, authMiddleware *middleware.AuthMiddleware, logger logger.New) *UserHandler {
return &UserHandler{
service: userService,
authMiddleware: authMiddleware,
log: logger("cls:interfaces:user"),
}
}
func (u *UserHandler) RegisterRouters(router gin.IRouter) {
userGroup := router.Group("/user")
{
userGroup.GET("/page", u.listUsers) // 获取用户列表
userGroup.POST("/give-gift", u.gift)
userGroup.POST("/give-coupon", u.coupon)
userGroup.POST("/disable/:uid", u.disable) // 禁用用户
userGroup.POST("/enable/:uid", u.enable) // 启用用户
}
}
func (u *UserHandler) gift(c *gin.Context) {
giftLog := &gift_log2.GiftLogDto{}
err := c.ShouldBindJSON(giftLog)
if err != nil {
u.log.Error(err)
return
}
err = u.service.GiveGift(giftLog)
if err != nil {
c.AbortWithStatus(http.StatusInternalServerError)
} else {
c.AbortWithStatus(http.StatusOK)
}
}
func (u *UserHandler) coupon(c *gin.Context) {
uc := &coupon2.CouponDto{}
err := c.ShouldBindJSON(uc)
if err != nil {
u.log.Error(err)
c.AbortWithStatus(http.StatusBadRequest)
return
}
fmt.Println("发放优惠券", uc)
err = u.service.GiveCoupon(uc)
if err != nil {
c.AbortWithStatus(http.StatusInternalServerError)
} else {
c.AbortWithStatus(http.StatusOK)
}
}
// listUsers 获取用户列表
func (u *UserHandler) listUsers(c *gin.Context) {
p := &page.Page{}
if err := c.ShouldBindQuery(p); err != nil {
u.log.Errorf("解析用户列表分页参数失败: %v", err)
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
if err := u.service.ListUsers(p, map[string]string{
"search_like_username": c.Query("search_like_name")}); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, p)
}
// disable 禁用用户
func (u *UserHandler) disable(c *gin.Context) {
uid, err := strconv.ParseInt(c.Param("uid"), 10, 64)
if err != nil {
u.log.Error(err.Error())
c.AbortWithStatus(http.StatusInternalServerError)
return
}
if err := u.service.DisableUser(uint64(uid)); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"message": "用户已禁用"})
}
// enable 启用用户
func (u *UserHandler) enable(c *gin.Context) {
uid, err := strconv.ParseInt(c.Param("uid"), 10, 64)
if err != nil {
u.log.Error(err.Error())
c.AbortWithStatus(http.StatusInternalServerError)
return
}
if err := u.service.EnableUser(uint64(uid)); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"message": "用户已启用"})
}