2026-09-25 06:02:27 +08:00
|
|
|
package admin
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"github.com/Wei-Shaw/sub2api/internal/pkg/response"
|
|
|
|
|
"github.com/Wei-Shaw/sub2api/internal/service"
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
"strconv"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type claudeResetReader interface {
|
|
|
|
|
Query(context.Context, int64) (*service.ClaudeResetCredits, error)
|
2026-09-29 11:41:33 -04:00
|
|
|
Redeem(context.Context, int64, string) (*service.ClaudeResetOutcome, error)
|
2026-09-25 06:02:27 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (h *AccountHandler) SetClaudeResetCreditService(s *service.ClaudeResetCreditService) {
|
|
|
|
|
h.claudeResetCredits = s
|
|
|
|
|
}
|
|
|
|
|
func (h *AccountHandler) ClaudeResetCredits(c *gin.Context) {
|
|
|
|
|
id, err := strconv.ParseInt(c.Param("id"), 10, 64)
|
|
|
|
|
if err != nil || id <= 0 {
|
|
|
|
|
response.BadRequest(c, "Invalid account ID")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if h.claudeResetCredits == nil {
|
|
|
|
|
response.Error(c, 503, "Claude reset service unavailable")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
status, err := h.claudeResetCredits.Query(c.Request.Context(), id)
|
|
|
|
|
if err != nil {
|
|
|
|
|
response.ErrorFrom(c, err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
response.Success(c, status)
|
|
|
|
|
}
|
2026-09-29 11:41:33 -04:00
|
|
|
|
|
|
|
|
// RedeemClaudeResetCredit consumes the upstream next reset credit. The request has
|
|
|
|
|
// no body: the server picks the grant; the Idempotency-Key header identifies one
|
|
|
|
|
// operator confirmation and replays its outcome.
|
|
|
|
|
func (h *AccountHandler) RedeemClaudeResetCredit(c *gin.Context) {
|
|
|
|
|
id, err := strconv.ParseInt(c.Param("id"), 10, 64)
|
|
|
|
|
if err != nil || id <= 0 {
|
|
|
|
|
response.BadRequest(c, "Invalid account ID")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if h.claudeResetCredits == nil {
|
|
|
|
|
response.Error(c, 503, "Claude reset service unavailable")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
result, err := h.claudeResetCredits.Redeem(c.Request.Context(), id, c.GetHeader("Idempotency-Key"))
|
|
|
|
|
if err != nil {
|
|
|
|
|
response.ErrorFrom(c, err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
response.Success(c, result)
|
|
|
|
|
}
|