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, NewDashboardService, 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), "*"), )