Initial commit
This commit is contained in:
186
server/internal/handler/coupon.go
Normal file
186
server/internal/handler/coupon.go
Normal file
@@ -0,0 +1,186 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"dianshang/internal/service"
|
||||
"dianshang/pkg/response"
|
||||
"dianshang/pkg/utils"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// CouponHandler 优惠券处理器
|
||||
type CouponHandler struct {
|
||||
couponService *service.CouponService
|
||||
}
|
||||
|
||||
// NewCouponHandler 创建优惠券处理器
|
||||
func NewCouponHandler(couponService *service.CouponService) *CouponHandler {
|
||||
return &CouponHandler{
|
||||
couponService: couponService,
|
||||
}
|
||||
}
|
||||
|
||||
// GetAvailableCoupons 获取可用优惠券列表
|
||||
func (h *CouponHandler) GetAvailableCoupons(c *gin.Context) {
|
||||
// 尝试获取用户ID,如果有用户登录则返回包含已领取状态的数据
|
||||
userIDValue, exists := c.Get("user_id")
|
||||
var userID uint = 0
|
||||
if exists {
|
||||
userID = userIDValue.(uint)
|
||||
}
|
||||
|
||||
coupons, err := h.couponService.GetAvailableCouponsWithUserStatus(userID)
|
||||
if err != nil {
|
||||
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, coupons)
|
||||
}
|
||||
|
||||
// GetUserCoupons 获取用户优惠券
|
||||
func (h *CouponHandler) GetUserCoupons(c *gin.Context) {
|
||||
userIDValue, exists := c.Get("user_id")
|
||||
if !exists {
|
||||
response.Unauthorized(c)
|
||||
return
|
||||
}
|
||||
userID := userIDValue.(uint)
|
||||
|
||||
status := utils.StringToInt(c.DefaultQuery("status", "1")) // 1未使用,2已使用,3已过期
|
||||
coupons, err := h.couponService.GetUserCoupons(userID, status)
|
||||
if err != nil {
|
||||
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, coupons)
|
||||
}
|
||||
|
||||
// ReceiveCoupon 领取优惠券
|
||||
func (h *CouponHandler) ReceiveCoupon(c *gin.Context) {
|
||||
userIDValue, exists := c.Get("user_id")
|
||||
if !exists {
|
||||
response.Unauthorized(c)
|
||||
return
|
||||
}
|
||||
userID := userIDValue.(uint)
|
||||
|
||||
couponID := utils.StringToUint(c.Param("id"))
|
||||
if couponID == 0 {
|
||||
response.BadRequest(c, "无效的优惠券ID")
|
||||
return
|
||||
}
|
||||
|
||||
err := h.couponService.ReceiveCoupon(userID, couponID)
|
||||
if err != nil {
|
||||
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, nil)
|
||||
}
|
||||
|
||||
// UseCoupon 使用优惠券
|
||||
func (h *CouponHandler) UseCoupon(c *gin.Context) {
|
||||
userIDValue, exists := c.Get("user_id")
|
||||
if !exists {
|
||||
response.Unauthorized(c)
|
||||
return
|
||||
}
|
||||
userID := userIDValue.(uint)
|
||||
|
||||
userCouponID := utils.StringToUint(c.Param("id"))
|
||||
if userCouponID == 0 {
|
||||
response.BadRequest(c, "无效的优惠券ID")
|
||||
return
|
||||
}
|
||||
|
||||
var req struct {
|
||||
OrderID uint `json:"order_id" binding:"required"`
|
||||
}
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
response.BadRequest(c, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
err := h.couponService.UseCoupon(userID, userCouponID, req.OrderID)
|
||||
if err != nil {
|
||||
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, nil)
|
||||
}
|
||||
|
||||
// GetAvailableCouponsForOrder 获取订单可用优惠券
|
||||
func (h *CouponHandler) GetAvailableCouponsForOrder(c *gin.Context) {
|
||||
userIDValue, exists := c.Get("user_id")
|
||||
if !exists {
|
||||
response.Unauthorized(c)
|
||||
return
|
||||
}
|
||||
userID := userIDValue.(uint)
|
||||
|
||||
orderAmountStr := c.Query("order_amount")
|
||||
if orderAmountStr == "" {
|
||||
response.BadRequest(c, "订单金额不能为空")
|
||||
return
|
||||
}
|
||||
|
||||
orderAmount := utils.StringToFloat64(orderAmountStr)
|
||||
if orderAmount <= 0 {
|
||||
response.BadRequest(c, "订单金额必须大于0")
|
||||
return
|
||||
}
|
||||
|
||||
coupons, err := h.couponService.GetAvailableCouponsForOrder(userID, orderAmount)
|
||||
if err != nil {
|
||||
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, coupons)
|
||||
}
|
||||
|
||||
// ValidateCoupon 验证优惠券
|
||||
func (h *CouponHandler) ValidateCoupon(c *gin.Context) {
|
||||
userIDValue, exists := c.Get("user_id")
|
||||
if !exists {
|
||||
response.Unauthorized(c)
|
||||
return
|
||||
}
|
||||
userID := userIDValue.(uint)
|
||||
|
||||
userCouponID := utils.StringToUint(c.Param("id"))
|
||||
if userCouponID == 0 {
|
||||
response.BadRequest(c, "无效的优惠券ID")
|
||||
return
|
||||
}
|
||||
|
||||
orderAmountStr := c.Query("order_amount")
|
||||
if orderAmountStr == "" {
|
||||
response.BadRequest(c, "订单金额不能为空")
|
||||
return
|
||||
}
|
||||
|
||||
orderAmount := utils.StringToFloat64(orderAmountStr)
|
||||
if orderAmount <= 0 {
|
||||
response.BadRequest(c, "订单金额必须大于0")
|
||||
return
|
||||
}
|
||||
|
||||
userCoupon, discountAmount, err := h.couponService.ValidateCoupon(userID, userCouponID, orderAmount)
|
||||
if err != nil {
|
||||
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
result := map[string]interface{}{
|
||||
"user_coupon": userCoupon,
|
||||
"discount_amount": discountAmount,
|
||||
"can_use": true,
|
||||
}
|
||||
|
||||
response.Success(c, result)
|
||||
}
|
||||
Reference in New Issue
Block a user