billing.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. if token != nil && token.UnlimitedQuota {
  34. amount = 100000000
  35. }
  36. subscription := OpenAISubscriptionResponse{
  37. Object: "billing_subscription",
  38. HasPaymentMethod: true,
  39. SoftLimitUSD: amount,
  40. HardLimitUSD: amount,
  41. SystemHardLimitUSD: amount,
  42. }
  43. c.JSON(200, subscription)
  44. return
  45. }
  46. func GetUsage(c *gin.Context) {
  47. var quota int
  48. var err error
  49. var token *model.Token
  50. if common.DisplayTokenStatEnabled {
  51. tokenId := c.GetInt("token_id")
  52. token, err = model.GetTokenById(tokenId)
  53. quota = token.UsedQuota
  54. } else {
  55. userId := c.GetInt("id")
  56. quota, err = model.GetUserUsedQuota(userId)
  57. }
  58. if err != nil {
  59. openAIError := OpenAIError{
  60. Message: err.Error(),
  61. Type: "one_api_error",
  62. }
  63. c.JSON(200, gin.H{
  64. "error": openAIError,
  65. })
  66. return
  67. }
  68. amount := float64(quota)
  69. if common.DisplayInCurrencyEnabled {
  70. amount /= common.QuotaPerUnit
  71. }
  72. usage := OpenAIUsageResponse{
  73. Object: "list",
  74. TotalUsage: amount * 100,
  75. }
  76. c.JSON(200, usage)
  77. return
  78. }