将 Antigravity 的额度刷新从后台定时刷新改为按需获取模式,与 Claude 统一: - 删除 AntigravityQuotaRefresher 后台服务 - 新增 QuotaFetcher 接口和 AntigravityQuotaFetcher 实现 - 前端改为调用 usage API 获取额度,支持 loading/error 状态 - 统一使用内存缓存(10 分钟 TTL)
118 lines
3.4 KiB
Go
118 lines
3.4 KiB
Go
package service
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/Wei-Shaw/sub2api/internal/config"
|
|
"github.com/google/wire"
|
|
)
|
|
|
|
// BuildInfo contains build information
|
|
type BuildInfo struct {
|
|
Version string
|
|
BuildType string
|
|
}
|
|
|
|
// ProvidePricingService creates and initializes PricingService
|
|
func ProvidePricingService(cfg *config.Config, remoteClient PricingRemoteClient) (*PricingService, error) {
|
|
svc := NewPricingService(cfg, remoteClient)
|
|
if err := svc.Initialize(); err != nil {
|
|
// Pricing service initialization failure should not block startup, use fallback prices
|
|
println("[Service] Warning: Pricing service initialization failed:", err.Error())
|
|
}
|
|
return svc, nil
|
|
}
|
|
|
|
// ProvideUpdateService creates UpdateService with BuildInfo
|
|
func ProvideUpdateService(cache UpdateCache, githubClient GitHubReleaseClient, buildInfo BuildInfo) *UpdateService {
|
|
return NewUpdateService(cache, githubClient, buildInfo.Version, buildInfo.BuildType)
|
|
}
|
|
|
|
// ProvideEmailQueueService creates EmailQueueService with default worker count
|
|
func ProvideEmailQueueService(emailService *EmailService) *EmailQueueService {
|
|
return NewEmailQueueService(emailService, 3)
|
|
}
|
|
|
|
// ProvideTokenRefreshService creates and starts TokenRefreshService
|
|
func ProvideTokenRefreshService(
|
|
accountRepo AccountRepository,
|
|
oauthService *OAuthService,
|
|
openaiOAuthService *OpenAIOAuthService,
|
|
geminiOAuthService *GeminiOAuthService,
|
|
antigravityOAuthService *AntigravityOAuthService,
|
|
cfg *config.Config,
|
|
) *TokenRefreshService {
|
|
svc := NewTokenRefreshService(accountRepo, oauthService, openaiOAuthService, geminiOAuthService, antigravityOAuthService, cfg)
|
|
svc.Start()
|
|
return svc
|
|
}
|
|
|
|
// ProvideTimingWheelService creates and starts TimingWheelService
|
|
func ProvideTimingWheelService() *TimingWheelService {
|
|
svc := NewTimingWheelService()
|
|
svc.Start()
|
|
return svc
|
|
}
|
|
|
|
// ProvideDeferredService creates and starts DeferredService
|
|
func ProvideDeferredService(accountRepo AccountRepository, timingWheel *TimingWheelService) *DeferredService {
|
|
svc := NewDeferredService(accountRepo, timingWheel, 10*time.Second)
|
|
svc.Start()
|
|
return svc
|
|
}
|
|
|
|
// ProvideConcurrencyService creates ConcurrencyService and starts slot cleanup worker.
|
|
func ProvideConcurrencyService(cache ConcurrencyCache, accountRepo AccountRepository, cfg *config.Config) *ConcurrencyService {
|
|
svc := NewConcurrencyService(cache)
|
|
if cfg != nil {
|
|
svc.StartSlotCleanupWorker(accountRepo, cfg.Gateway.Scheduling.SlotCleanupInterval)
|
|
}
|
|
return svc
|
|
}
|
|
|
|
// ProviderSet is the Wire provider set for all services
|
|
var ProviderSet = wire.NewSet(
|
|
// Core services
|
|
NewAuthService,
|
|
NewUserService,
|
|
NewApiKeyService,
|
|
NewGroupService,
|
|
NewAccountService,
|
|
NewProxyService,
|
|
NewRedeemService,
|
|
NewUsageService,
|
|
NewDashboardService,
|
|
ProvidePricingService,
|
|
NewBillingService,
|
|
NewBillingCacheService,
|
|
NewAdminService,
|
|
NewGatewayService,
|
|
NewOpenAIGatewayService,
|
|
NewOAuthService,
|
|
NewOpenAIOAuthService,
|
|
NewGeminiOAuthService,
|
|
NewGeminiQuotaService,
|
|
NewAntigravityOAuthService,
|
|
NewGeminiTokenProvider,
|
|
NewGeminiMessagesCompatService,
|
|
NewAntigravityTokenProvider,
|
|
NewAntigravityGatewayService,
|
|
NewRateLimitService,
|
|
NewAccountUsageService,
|
|
NewAccountTestService,
|
|
NewSettingService,
|
|
NewEmailService,
|
|
ProvideEmailQueueService,
|
|
NewTurnstileService,
|
|
NewSubscriptionService,
|
|
ProvideConcurrencyService,
|
|
NewIdentityService,
|
|
NewCRSSyncService,
|
|
ProvideUpdateService,
|
|
ProvideTokenRefreshService,
|
|
ProvideTimingWheelService,
|
|
ProvideDeferredService,
|
|
NewAntigravityQuotaFetcher,
|
|
NewUserAttributeService,
|
|
)
|