| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- package controller
- import (
- "errors"
- "net/http"
- "one-api/common"
- "one-api/model"
- "strconv"
- "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 len(redemption.Name) == 0 || len(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
- }
- // If you add more fields, please also update redemption.Update()
- 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
- }
|