74 lines
2.4 KiB
Go
74 lines
2.4 KiB
Go
package controller
|
||
|
||
import (
|
||
"net/http"
|
||
"strings"
|
||
|
||
"github.com/QuantumNous/new-api/common"
|
||
"github.com/QuantumNous/new-api/model"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
)
|
||
|
||
// GetAffInvitees 分页返回当前登录用户邀请注册的用户列表及各自分销比例(万分比)。
|
||
func GetAffInvitees(c *gin.Context) {
|
||
inviterId := c.GetInt("id")
|
||
u, err := model.GetUserById(inviterId, false)
|
||
if err != nil || !model.UserIsDistributor(u) {
|
||
c.JSON(http.StatusOK, gin.H{"success": false, "message": "仅分销商可查看邀请列表"})
|
||
return
|
||
}
|
||
pageInfo := common.GetPageQuery(c)
|
||
keyword := strings.TrimSpace(c.Query("keyword"))
|
||
if len(keyword) > 120 {
|
||
keyword = keyword[:120]
|
||
}
|
||
items, total, err := model.ListAffInvitees(inviterId, keyword, pageInfo)
|
||
if err != nil {
|
||
c.JSON(http.StatusOK, gin.H{
|
||
"success": false,
|
||
"message": err.Error(),
|
||
})
|
||
return
|
||
}
|
||
c.JSON(http.StatusOK, gin.H{
|
||
"success": true,
|
||
"message": "",
|
||
"data": gin.H{
|
||
"items": items,
|
||
"total": total,
|
||
"default_commission_ratio_bps": common.AffiliateDefaultCommissionBps,
|
||
},
|
||
})
|
||
}
|
||
|
||
type updateAffInviteeCommissionRequest struct {
|
||
InviterId int `json:"inviter_id"`
|
||
InviteeId int `json:"invitee_id"`
|
||
CommissionRatioBps int `json:"commission_ratio_bps"`
|
||
}
|
||
|
||
// PutAffInviteeCommission 管理员修改指定邀请人与其被邀请人之间的分销比例(0–10000 万分比)。
|
||
// 路由挂载在 AdminAuth 下,仅管理员/超级管理员可调用;需显式传 inviter_id,防止冒充邀请人越权改比例。
|
||
func PutAffInviteeCommission(c *gin.Context) {
|
||
myRole := c.GetInt("role")
|
||
if myRole != common.RoleAdminUser && myRole != common.RoleRootUser {
|
||
c.JSON(http.StatusOK, gin.H{"success": false, "message": "permission denied"})
|
||
return
|
||
}
|
||
var req updateAffInviteeCommissionRequest
|
||
if err := common.DecodeJson(c.Request.Body, &req); err != nil {
|
||
c.JSON(http.StatusOK, gin.H{"success": false, "message": "invalid request body"})
|
||
return
|
||
}
|
||
if req.InviterId <= 0 || req.InviteeId <= 0 {
|
||
c.JSON(http.StatusOK, gin.H{"success": false, "message": "invalid inviter_id or invitee_id"})
|
||
return
|
||
}
|
||
if err := model.UpdateAffInviteeCommission(req.InviterId, req.InviteeId, req.CommissionRatioBps); err != nil {
|
||
c.JSON(http.StatusOK, gin.H{"success": false, "message": err.Error()})
|
||
return
|
||
}
|
||
c.JSON(http.StatusOK, gin.H{"success": true, "message": ""})
|
||
}
|