cn_provider_handler.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package admin
  2. import (
  3. "strconv"
  4. "github.com/Wei-Shaw/sub2api/internal/pkg/response"
  5. "github.com/Wei-Shaw/sub2api/internal/service"
  6. "github.com/gin-gonic/gin"
  7. )
  8. // CNProviderHandler 暴露国产供应商(kimi/zhipu/deepseek)的额度与余额查询端点。
  9. //
  10. // - GET /admin/cn-providers/accounts/:id/quota Coding Plan 滚动窗口用量(kimi/zhipu)
  11. // - GET /admin/cn-providers/accounts/:id/balance payg 账号余额(kimi/deepseek)
  12. //
  13. // 智谱(zhipu)无余额端点,故同一账号仅 quota 或 balance 其一可用:服务端按账号
  14. // platform + account_mode 校验并返回明确错误(见 CNProvider*Service 的 load*Account)。
  15. type CNProviderHandler struct {
  16. quotaService *service.CNProviderQuotaService
  17. balanceService *service.CNProviderBalanceService
  18. }
  19. func NewCNProviderHandler(
  20. quotaService *service.CNProviderQuotaService,
  21. balanceService *service.CNProviderBalanceService,
  22. ) *CNProviderHandler {
  23. return &CNProviderHandler{
  24. quotaService: quotaService,
  25. balanceService: balanceService,
  26. }
  27. }
  28. // QueryQuota 查询 Coding Plan 滚动窗口用量(5h + weekly)。
  29. func (h *CNProviderHandler) QueryQuota(c *gin.Context) {
  30. accountID, err := strconv.ParseInt(c.Param("id"), 10, 64)
  31. if err != nil {
  32. response.BadRequest(c, "Invalid account ID")
  33. return
  34. }
  35. if h == nil || h.quotaService == nil {
  36. response.BadRequest(c, "cn provider quota service is not enabled")
  37. return
  38. }
  39. result, err := h.quotaService.QueryUsage(c.Request.Context(), accountID)
  40. if err != nil {
  41. response.ErrorFrom(c, err)
  42. return
  43. }
  44. response.Success(c, result)
  45. }
  46. // QueryBalance 查询 payg 账号余额。
  47. func (h *CNProviderHandler) QueryBalance(c *gin.Context) {
  48. accountID, err := strconv.ParseInt(c.Param("id"), 10, 64)
  49. if err != nil {
  50. response.BadRequest(c, "Invalid account ID")
  51. return
  52. }
  53. if h == nil || h.balanceService == nil {
  54. response.BadRequest(c, "cn provider balance service is not enabled")
  55. return
  56. }
  57. result, err := h.balanceService.QueryBalance(c.Request.Context(), accountID)
  58. if err != nil {
  59. response.ErrorFrom(c, err)
  60. return
  61. }
  62. response.Success(c, result)
  63. }