| package controller |
|
|
| import ( |
| "errors" |
| "net/http" |
| "strconv" |
| "unicode/utf8" |
|
|
| "github.com/QuantumNous/new-api/common" |
| "github.com/QuantumNous/new-api/model" |
|
|
| "github.com/gin-gonic/gin" |
| ) |
|
|
| func GetAllRedemptions(c *gin.Context) { |
| pageInfo := common.GetPageQuery(c) |
| redemptions, total, err := model.GetAllRedemptions(pageInfo.GetStartIdx(), pageInfo.GetPageSize()) |
| if err != nil { |
| common.ApiError(c, err) |
| return |
| } |
| pageInfo.SetTotal(int(total)) |
| pageInfo.SetItems(redemptions) |
| common.ApiSuccess(c, pageInfo) |
| return |
| } |
|
|
| func SearchRedemptions(c *gin.Context) { |
| keyword := c.Query("keyword") |
| pageInfo := common.GetPageQuery(c) |
| redemptions, total, err := model.SearchRedemptions(keyword, pageInfo.GetStartIdx(), pageInfo.GetPageSize()) |
| if err != nil { |
| common.ApiError(c, err) |
| return |
| } |
| pageInfo.SetTotal(int(total)) |
| pageInfo.SetItems(redemptions) |
| common.ApiSuccess(c, pageInfo) |
| return |
| } |
|
|
| func GetRedemption(c *gin.Context) { |
| id, err := strconv.Atoi(c.Param("id")) |
| if err != nil { |
| common.ApiError(c, err) |
| return |
| } |
| redemption, err := model.GetRedemptionById(id) |
| if err != nil { |
| common.ApiError(c, err) |
| return |
| } |
| c.JSON(http.StatusOK, gin.H{ |
| "success": true, |
| "message": "", |
| "data": redemption, |
| }) |
| return |
| } |
|
|
| func AddRedemption(c *gin.Context) { |
| redemption := model.Redemption{} |
| err := c.ShouldBindJSON(&redemption) |
| if err != nil { |
| common.ApiError(c, err) |
| return |
| } |
| if utf8.RuneCountInString(redemption.Name) == 0 || utf8.RuneCountInString(redemption.Name) > 20 { |
| c.JSON(http.StatusOK, gin.H{ |
| "success": false, |
| "message": "兑换码名称长度必须在1-20之间", |
| }) |
| return |
| } |
| if redemption.Count <= 0 { |
| c.JSON(http.StatusOK, gin.H{ |
| "success": false, |
| "message": "兑换码个数必须大于0", |
| }) |
| return |
| } |
| if redemption.Count > 100 { |
| c.JSON(http.StatusOK, gin.H{ |
| "success": false, |
| "message": "一次兑换码批量生成的个数不能大于 100", |
| }) |
| return |
| } |
| if err := validateExpiredTime(redemption.ExpiredTime); err != nil { |
| c.JSON(http.StatusOK, gin.H{"success": false, "message": err.Error()}) |
| return |
| } |
| var keys []string |
| for i := 0; i < redemption.Count; i++ { |
| key := common.GetUUID() |
| cleanRedemption := model.Redemption{ |
| UserId: c.GetInt("id"), |
| Name: redemption.Name, |
| Key: key, |
| CreatedTime: common.GetTimestamp(), |
| Quota: redemption.Quota, |
| ExpiredTime: redemption.ExpiredTime, |
| } |
| err = cleanRedemption.Insert() |
| if err != nil { |
| c.JSON(http.StatusOK, gin.H{ |
| "success": false, |
| "message": err.Error(), |
| "data": keys, |
| }) |
| return |
| } |
| keys = append(keys, key) |
| } |
| c.JSON(http.StatusOK, gin.H{ |
| "success": true, |
| "message": "", |
| "data": keys, |
| }) |
| return |
| } |
|
|
| func DeleteRedemption(c *gin.Context) { |
| id, _ := strconv.Atoi(c.Param("id")) |
| err := model.DeleteRedemptionById(id) |
| if err != nil { |
| common.ApiError(c, err) |
| return |
| } |
| c.JSON(http.StatusOK, gin.H{ |
| "success": true, |
| "message": "", |
| }) |
| return |
| } |
|
|
| func UpdateRedemption(c *gin.Context) { |
| statusOnly := c.Query("status_only") |
| redemption := model.Redemption{} |
| err := c.ShouldBindJSON(&redemption) |
| if err != nil { |
| common.ApiError(c, err) |
| return |
| } |
| cleanRedemption, err := model.GetRedemptionById(redemption.Id) |
| if err != nil { |
| common.ApiError(c, err) |
| return |
| } |
| if statusOnly == "" { |
| if err := validateExpiredTime(redemption.ExpiredTime); err != nil { |
| c.JSON(http.StatusOK, gin.H{"success": false, "message": err.Error()}) |
| return |
| } |
| |
| cleanRedemption.Name = redemption.Name |
| cleanRedemption.Quota = redemption.Quota |
| cleanRedemption.ExpiredTime = redemption.ExpiredTime |
| } |
| if statusOnly != "" { |
| cleanRedemption.Status = redemption.Status |
| } |
| err = cleanRedemption.Update() |
| if err != nil { |
| common.ApiError(c, err) |
| return |
| } |
| c.JSON(http.StatusOK, gin.H{ |
| "success": true, |
| "message": "", |
| "data": cleanRedemption, |
| }) |
| return |
| } |
|
|
| func DeleteInvalidRedemption(c *gin.Context) { |
| rows, err := model.DeleteInvalidRedemptions() |
| if err != nil { |
| common.ApiError(c, err) |
| return |
| } |
| c.JSON(http.StatusOK, gin.H{ |
| "success": true, |
| "message": "", |
| "data": rows, |
| }) |
| return |
| } |
|
|
| func validateExpiredTime(expired int64) error { |
| if expired != 0 && expired < common.GetTimestamp() { |
| return errors.New("过期时间不能早于当前时间") |
| } |
| return nil |
| } |
|
|