| package controller
|
|
|
| import (
|
| "github.com/QuantumNous/new-api/common"
|
| "github.com/QuantumNous/new-api/model"
|
| "github.com/QuantumNous/new-api/setting/operation_setting"
|
| "github.com/QuantumNous/new-api/types"
|
| "github.com/gin-gonic/gin"
|
| )
|
|
|
| func GetSubscription(c *gin.Context) {
|
| var remainQuota int
|
| var usedQuota int
|
| var err error
|
| var token *model.Token
|
| var expiredTime int64
|
| if common.DisplayTokenStatEnabled {
|
| tokenId := c.GetInt("token_id")
|
| token, err = model.GetTokenById(tokenId)
|
| expiredTime = token.ExpiredTime
|
| remainQuota = token.RemainQuota
|
| usedQuota = token.UsedQuota
|
| } else {
|
| userId := c.GetInt("id")
|
| remainQuota, err = model.GetUserQuota(userId, false)
|
| usedQuota, err = model.GetUserUsedQuota(userId)
|
| }
|
| if expiredTime <= 0 {
|
| expiredTime = 0
|
| }
|
| if err != nil {
|
| openAIError := types.OpenAIError{
|
| Message: err.Error(),
|
| Type: "upstream_error",
|
| }
|
| c.JSON(200, gin.H{
|
| "error": openAIError,
|
| })
|
| return
|
| }
|
| quota := remainQuota + usedQuota
|
| amount := float64(quota)
|
|
|
|
|
|
|
|
|
|
|
| switch operation_setting.GetQuotaDisplayType() {
|
| case operation_setting.QuotaDisplayTypeCNY:
|
| amount = amount / common.QuotaPerUnit * operation_setting.USDExchangeRate
|
| case operation_setting.QuotaDisplayTypeTokens:
|
|
|
| default:
|
| amount = amount / common.QuotaPerUnit
|
| }
|
| if token != nil && token.UnlimitedQuota {
|
| amount = 100000000
|
| }
|
| subscription := OpenAISubscriptionResponse{
|
| Object: "billing_subscription",
|
| HasPaymentMethod: true,
|
| SoftLimitUSD: amount,
|
| HardLimitUSD: amount,
|
| SystemHardLimitUSD: amount,
|
| AccessUntil: expiredTime,
|
| }
|
| c.JSON(200, subscription)
|
| return
|
| }
|
|
|
| func GetUsage(c *gin.Context) {
|
| var quota int
|
| var err error
|
| var token *model.Token
|
| if common.DisplayTokenStatEnabled {
|
| tokenId := c.GetInt("token_id")
|
| token, err = model.GetTokenById(tokenId)
|
| quota = token.UsedQuota
|
| } else {
|
| userId := c.GetInt("id")
|
| quota, err = model.GetUserUsedQuota(userId)
|
| }
|
| if err != nil {
|
| openAIError := types.OpenAIError{
|
| Message: err.Error(),
|
| Type: "new_api_error",
|
| }
|
| c.JSON(200, gin.H{
|
| "error": openAIError,
|
| })
|
| return
|
| }
|
| amount := float64(quota)
|
| switch operation_setting.GetQuotaDisplayType() {
|
| case operation_setting.QuotaDisplayTypeCNY:
|
| amount = amount / common.QuotaPerUnit * operation_setting.USDExchangeRate
|
| case operation_setting.QuotaDisplayTypeTokens:
|
|
|
| default:
|
| amount = amount / common.QuotaPerUnit
|
| }
|
| usage := OpenAIUsageResponse{
|
| Object: "list",
|
| TotalUsage: amount * 100,
|
| }
|
| c.JSON(200, usage)
|
| return
|
| }
|
|
|