Procházet zdrojové kódy

feat: support API `/dashboard/billing/credit_grants` now (#45)

JustSong před 2 roky
rodič
revize
3071300c0c
4 změnil soubory, kde provedl 43 přidání a 5 odebrání
  1. 24 0
      controller/token.go
  2. 18 0
      router/dashboard.go
  3. 1 0
      router/main.go
  4. 0 5
      router/relay-router.go

+ 24 - 0
controller/token.go

@@ -75,6 +75,30 @@ func GetToken(c *gin.Context) {
 	return
 }
 
+func GetTokenStatus(c *gin.Context) {
+	tokenId := c.GetInt("token_id")
+	userId := c.GetInt("id")
+	token, err := model.GetTokenByIds(tokenId, userId)
+	if err != nil {
+		c.JSON(http.StatusOK, gin.H{
+			"success": false,
+			"message": err.Error(),
+		})
+		return
+	}
+	expiredAt := token.ExpiredTime
+	if expiredAt == -1 {
+		expiredAt = 0
+	}
+	c.JSON(http.StatusOK, gin.H{
+		"object":          "credit_summary",
+		"total_granted":   token.RemainQuota,
+		"total_used":      0, // not supported currently
+		"total_available": token.RemainQuota,
+		"expires_at":      expiredAt * 1000,
+	})
+}
+
 func AddToken(c *gin.Context) {
 	isAdmin := c.GetInt("role") >= common.RoleAdminUser
 	token := model.Token{}

+ 18 - 0
router/dashboard.go

@@ -0,0 +1,18 @@
+package router
+
+import (
+	"github.com/gin-contrib/gzip"
+	"github.com/gin-gonic/gin"
+	"one-api/controller"
+	"one-api/middleware"
+)
+
+func SetDashboardRouter(router *gin.Engine) {
+	apiRouter := router.Group("/dashboard")
+	apiRouter.Use(gzip.Gzip(gzip.DefaultCompression))
+	apiRouter.Use(middleware.GlobalAPIRateLimit())
+	apiRouter.Use(middleware.TokenAuth())
+	{
+		apiRouter.GET("/billing/credit_grants", controller.GetTokenStatus)
+	}
+}

+ 1 - 0
router/main.go

@@ -7,6 +7,7 @@ import (
 
 func SetRouter(router *gin.Engine, buildFS embed.FS, indexPage []byte) {
 	SetApiRouter(router)
+	SetDashboardRouter(router)
 	SetRelayRouter(router)
 	setWebRouter(router, buildFS, indexPage)
 }

+ 0 - 5
router/relay-router.go

@@ -35,9 +35,4 @@ func SetRelayRouter(router *gin.Engine) {
 		relayV1Router.DELETE("/models/:model", controller.RelayNotImplemented)
 		relayV1Router.POST("/moderations", controller.RelayNotImplemented)
 	}
-	relayDashboardRouter := router.Group("/dashboard") // TODO: return system's own token info
-	relayDashboardRouter.Use(middleware.TokenAuth(), middleware.Distribute())
-	{
-		relayDashboardRouter.Any("/*path", controller.Relay)
-	}
 }