Files
qitongxue-api/api/admin/v1/coupon.go
2026-09-29 10:57:01 +08:00

129 lines
5.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package v1
import "github.com/gogf/gf/v2/frame/g"
// ============================================================================
// 管理端优惠券契约:券模板(A6–A8)+ 发放/记录/核销(A9–A11)
// ============================================================================
// CouponTemplateItem 券模板列表项
type CouponTemplateItem struct {
Id int64 `json:"id"`
Title string `json:"title"`
SubTitle string `json:"sub_title"`
CouponType int `json:"coupon_type"`
Kind int `json:"kind"`
Value int `json:"value"`
ThresholdCents int `json:"threshold_cents"`
Scope int `json:"scope"`
ScopeKeys []string `json:"scope_keys"`
TotalLimit int `json:"total_limit"`
PerUserLimit int `json:"per_user_limit"`
ValidFrom string `json:"valid_from"`
ValidTo string `json:"valid_to"`
Status int `json:"status"`
GrantedCount int64 `json:"granted_count"` // 已发
UsedCount int64 `json:"used_count"` // 已用
}
// CouponTemplateListReq 券模板列表(A6)
type CouponTemplateListReq struct {
g.Meta `path:"/coupon/template/list" method:"get" tags:"coupon" summary:"券模板列表"`
Keyword string `json:"keyword"`
Status *int `json:"status"`
CouponType *int `json:"couponType"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
}
type CouponTemplateListRes struct {
List []CouponTemplateItem `json:"list"`
Total int `json:"total"`
}
// CouponTemplateSaveReq 新增/编辑券模板(A7)。
//
// CouponType 1 免单券 / 2 展示券;**前端未显式传时后端按 2 兜底(fail-closed)**。
type CouponTemplateSaveReq struct {
g.Meta `path:"/coupon/template/save" method:"post" tags:"coupon" summary:"保存券模板"`
Id int64 `json:"id"`
Title string `v:"required#券名不能为空" json:"title"`
SubTitle string `json:"subTitle"`
CouponType int `json:"couponType"`
Kind int `json:"kind"`
Value int `v:"min:0#面额不能为负" json:"value"`
ThresholdCents int `v:"min:0#门槛不能为负" json:"thresholdCents"`
Scope int `json:"scope"`
ScopeKeys []string `json:"scopeKeys"`
TotalLimit int `v:"min:0#总发行上限不能为负" json:"totalLimit"`
PerUserLimit int `v:"min:0#单人限领不能为负" json:"perUserLimit"`
ValidFrom string `json:"validFrom"`
ValidTo string `json:"validTo"`
Status int `json:"status"`
Remark string `json:"remark"`
}
type CouponTemplateSaveRes struct {
Id int64 `json:"id"`
}
// CouponTemplateToggleReq 启停券模板(A8)
type CouponTemplateToggleReq struct {
g.Meta `path:"/coupon/template/toggle" method:"post" tags:"coupon" summary:"启停券模板"`
Id int64 `v:"required" json:"id"`
Status int `json:"status"`
}
type CouponTemplateToggleRes struct{}
// CouponGrantReq 发放优惠券(A9):单用户 / 批量共用,靠 userIds 数量区分。
type CouponGrantReq struct {
g.Meta `path:"/coupon/grant" method:"post" tags:"coupon" summary:"发放优惠券"`
CouponId int64 `v:"required#请选择券模板" json:"couponId"`
UserIds []int64 `v:"required|min-length:1#请选择要发放的用户" json:"userIds"`
Remark string `json:"remark"`
}
type CouponGrantRes struct {
Success int `json:"success"`
Failed int `json:"failed"`
Failures []BatchFailure `json:"failures"`
}
// CouponRecordItem 发放记录项(券面快照 + 占用/核销轨迹)
type CouponRecordItem struct {
Id int64 `json:"id"`
UserId int64 `json:"user_id"`
CouponId int64 `json:"coupon_id"`
Title string `json:"title"`
CouponType int `json:"coupon_type"`
Kind int `json:"kind"`
Value int `json:"value"`
Status int `json:"status"`
Source int `json:"source"`
GrantedAt string `json:"granted_at"`
UsedAt string `json:"used_at"`
ExpireAt string `json:"expire_at"`
UsedBy string `json:"used_by"`
UsedOrderNo string `json:"used_order_no"`
}
// CouponRecordListReq 发放记录列表(A10)
type CouponRecordListReq struct {
g.Meta `path:"/coupon/record/list" method:"get" tags:"coupon" summary:"优惠券发放记录"`
UserId *int64 `json:"userId"`
CouponId *int64 `json:"couponId"`
CouponType *int `json:"couponType"`
Status *int `json:"status"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
}
type CouponRecordListRes struct {
List []CouponRecordItem `json:"list"`
Total int `json:"total"`
}
// CouponRedeemReq 人工核销(A11):**仅展示券**;对免单券且 status != 0 返回 4011。
type CouponRedeemReq struct {
g.Meta `path:"/coupon/redeem" method:"post" tags:"coupon" summary:"人工核销优惠券"`
UserCouponId int64 `v:"required" json:"userCouponId"`
Remark string `json:"remark"`
}
type CouponRedeemRes struct{}