// Copyright (c) 2025 Tethys Plex // // This file is part of Veloera. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . package controller import ( "github.com/gin-gonic/gin" "veloera/common" "veloera/dto" "veloera/model" ) 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 := dto.OpenAIError{ Message: err.Error(), Type: "upstream_error", } c.JSON(200, gin.H{ "error": openAIError, }) return } quota := remainQuota + usedQuota amount := float64(quota) if common.DisplayInCurrencyEnabled { 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 := dto.OpenAIError{ Message: err.Error(), Type: "veloera_error", } c.JSON(200, gin.H{ "error": openAIError, }) return } amount := float64(quota) if common.DisplayInCurrencyEnabled { amount /= common.QuotaPerUnit } usage := OpenAIUsageResponse{ Object: "list", TotalUsage: amount * 100, } c.JSON(200, usage) return }