52 lines
1.4 KiB
Go
52 lines
1.4 KiB
Go
// Filename: internal/handlers/tokens_handler.go
|
||
|
||
package handlers
|
||
|
||
import (
|
||
"gemini-balancer/internal/errors"
|
||
"gemini-balancer/internal/models"
|
||
"gemini-balancer/internal/response"
|
||
"gemini-balancer/internal/service"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
"gorm.io/gorm"
|
||
)
|
||
|
||
type TokensHandler struct {
|
||
db *gorm.DB
|
||
tokenManager *service.TokenManager
|
||
}
|
||
|
||
func NewTokensHandler(db *gorm.DB, tm *service.TokenManager) *TokensHandler {
|
||
return &TokensHandler{
|
||
db: db,
|
||
tokenManager: tm,
|
||
}
|
||
}
|
||
|
||
func (h *TokensHandler) GetAllTokens(c *gin.Context) {
|
||
tokensFromCache := h.tokenManager.GetAllTokens()
|
||
//TODO 可以像KeyGroupResponse一样,创建一个TokenResponse DTO来整理数据
|
||
response.Success(c, tokensFromCache)
|
||
}
|
||
|
||
func (h *TokensHandler) UpdateTokens(c *gin.Context) {
|
||
var incomingTokens []*models.TokenUpdateRequest
|
||
if err := c.ShouldBindJSON(&incomingTokens); err != nil {
|
||
response.Error(c, errors.NewAPIError(errors.ErrInvalidJSON, err.Error()))
|
||
return
|
||
}
|
||
|
||
if err := h.tokenManager.BatchUpdateTokens(incomingTokens); err != nil {
|
||
response.Error(c, errors.NewAPIError(errors.ErrInternalServer, "Failed to update tokens: "+err.Error()))
|
||
return
|
||
}
|
||
response.Success(c, gin.H{"message": "Tokens updated successfully."})
|
||
}
|
||
|
||
// [TODO]
|
||
// func (h *TokensHandler) CreateToken(c *gin.Context) {
|
||
// ... 数据库写操作 ...
|
||
// h.tokenManager.Invalidate() // 写后,立即让缓存失效
|
||
// }
|