package service import ( "sub2api/internal/config" "sub2api/internal/service/ports" "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 { // 价格服务初始化失败不应阻止启动,使用回退价格 println("[Service] Warning: Pricing service initialization failed:", err.Error()) } return svc, nil } // ProvideUpdateService creates UpdateService with BuildInfo func ProvideUpdateService(cache ports.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 ports.AccountRepository, oauthService *OAuthService, openaiOAuthService *OpenAIOAuthService, cfg *config.Config, ) *TokenRefreshService { svc := NewTokenRefreshService(accountRepo, oauthService, openaiOAuthService, cfg) svc.Start() 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, ProvidePricingService, NewBillingService, NewBillingCacheService, NewAdminService, NewGatewayService, NewOpenAIGatewayService, NewOAuthService, NewOpenAIOAuthService, NewRateLimitService, NewAccountUsageService, NewAccountTestService, NewSettingService, NewEmailService, ProvideEmailQueueService, NewTurnstileService, NewSubscriptionService, NewConcurrencyService, NewIdentityService, ProvideUpdateService, ProvideTokenRefreshService, // Provide the Services container struct wire.Struct(new(Services), "*"), )