billing.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package controller
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "one-api/common"
  5. "one-api/model"
  6. )
  7. func GetSubscription(c *gin.Context) {
  8. var quota int
  9. var err error
  10. var token *model.Token
  11. if common.DisplayTokenStatEnabled {
  12. tokenId := c.GetInt("token_id")
  13. token, err = model.GetTokenById(tokenId)
  14. quota = token.RemainQuota
  15. } else {
  16. userId := c.GetInt("id")
  17. quota, err = model.GetUserQuota(userId)
  18. }
  19. if err != nil {
  20. openAIError := OpenAIError{
  21. Message: err.Error(),
  22. Type: "one_api_error",
  23. }
  24. c.JSON(200, gin.H{
  25. "error": openAIError,
  26. })
  27. return
  28. }
  29. amount := float64(quota)
  30. if common.DisplayInCurrencyEnabled {
  31. amount /= common.QuotaPerUnit
  32. }
  33. subscription := OpenAISubscriptionResponse{
  34. Object: "billing_subscription",
  35. HasPaymentMethod: true,
  36. SoftLimitUSD: amount,
  37. HardLimitUSD: amount,
  38. SystemHardLimitUSD: amount,
  39. }
  40. c.JSON(200, subscription)
  41. return
  42. }
  43. func GetUsage(c *gin.Context) {
  44. var quota int
  45. var err error
  46. var token *model.Token
  47. if common.DisplayTokenStatEnabled {
  48. tokenId := c.GetInt("token_id")
  49. token, err = model.GetTokenById(tokenId)
  50. quota = token.UsedQuota
  51. } else {
  52. userId := c.GetInt("id")
  53. quota, err = model.GetUserUsedQuota(userId)
  54. }
  55. if err != nil {
  56. openAIError := OpenAIError{
  57. Message: err.Error(),
  58. Type: "one_api_error",
  59. }
  60. c.JSON(200, gin.H{
  61. "error": openAIError,
  62. })
  63. return
  64. }
  65. amount := float64(quota)
  66. if common.DisplayInCurrencyEnabled {
  67. amount /= common.QuotaPerUnit
  68. }
  69. usage := OpenAIUsageResponse{
  70. Object: "list",
  71. TotalUsage: amount * 100,
  72. }
  73. c.JSON(200, usage)
  74. return
  75. }