package handler import ( "github.com/Wei-Shaw/sub2api/internal/handler/admin" "github.com/Wei-Shaw/sub2api/internal/service" "github.com/google/wire" ) // ProvideAdminHandlers creates the AdminHandlers struct func ProvideAdminHandlers( dashboardHandler *admin.DashboardHandler, userHandler *admin.UserHandler, groupHandler *admin.GroupHandler, accountHandler *admin.AccountHandler, announcementHandler *admin.AnnouncementHandler, dataManagementHandler *admin.DataManagementHandler, backupHandler *admin.BackupHandler, oauthHandler *admin.OAuthHandler, openaiOAuthHandler *admin.OpenAIOAuthHandler, geminiOAuthHandler *admin.GeminiOAuthHandler, antigravityOAuthHandler *admin.AntigravityOAuthHandler, proxyHandler *admin.ProxyHandler, redeemHandler *admin.RedeemHandler, promoHandler *admin.PromoHandler, settingHandler *admin.SettingHandler, opsHandler *admin.OpsHandler, systemHandler *admin.SystemHandler, subscriptionHandler *admin.SubscriptionHandler, usageHandler *admin.UsageHandler, userAttributeHandler *admin.UserAttributeHandler, errorPassthroughHandler *admin.ErrorPassthroughHandler, tlsFingerprintProfileHandler *admin.TLSFingerprintProfileHandler, apiKeyHandler *admin.AdminAPIKeyHandler, scheduledTestHandler *admin.ScheduledTestHandler, channelHandler *admin.ChannelHandler, channelMonitorHandler *admin.ChannelMonitorHandler, channelMonitorTemplateHandler *admin.ChannelMonitorRequestTemplateHandler, paymentHandler *admin.PaymentHandler, windsurfHandler *admin.WindsurfHandler, affiliateHandler *admin.AffiliateHandler, ) *AdminHandlers { return &AdminHandlers{ Dashboard: dashboardHandler, User: userHandler, Group: groupHandler, Account: accountHandler, Announcement: announcementHandler, DataManagement: dataManagementHandler, Backup: backupHandler, OAuth: oauthHandler, OpenAIOAuth: openaiOAuthHandler, GeminiOAuth: geminiOAuthHandler, AntigravityOAuth: antigravityOAuthHandler, Proxy: proxyHandler, Redeem: redeemHandler, Promo: promoHandler, Setting: settingHandler, Ops: opsHandler, System: systemHandler, Subscription: subscriptionHandler, Usage: usageHandler, UserAttribute: userAttributeHandler, ErrorPassthrough: errorPassthroughHandler, TLSFingerprintProfile: tlsFingerprintProfileHandler, APIKey: apiKeyHandler, ScheduledTest: scheduledTestHandler, Channel: channelHandler, ChannelMonitor: channelMonitorHandler, ChannelMonitorTemplate: channelMonitorTemplateHandler, Payment: paymentHandler, Windsurf: windsurfHandler, Affiliate: affiliateHandler, } } // ProvideSystemHandler creates admin.SystemHandler with UpdateService func ProvideSystemHandler(updateService *service.UpdateService, lockService *service.SystemOperationLockService) *admin.SystemHandler { return admin.NewSystemHandler(updateService, lockService) } // ProvideWindsurfHandler returns nil when windsurf auth service is disabled. func ProvideWindsurfHandler(authService *service.WindsurfAuthService, lsService *service.WindsurfLSService, probeService *service.WindsurfProbeService) *admin.WindsurfHandler { if authService == nil { return nil } return admin.NewWindsurfHandler(authService, lsService, probeService) } // ProvideSettingHandler creates SettingHandler with version from BuildInfo func ProvideSettingHandler(settingService *service.SettingService, buildInfo BuildInfo) *SettingHandler { return NewSettingHandler(settingService, buildInfo.Version) } // ProvideHandlers creates the Handlers struct func ProvideHandlers( authHandler *AuthHandler, userHandler *UserHandler, apiKeyHandler *APIKeyHandler, usageHandler *UsageHandler, redeemHandler *RedeemHandler, subscriptionHandler *SubscriptionHandler, announcementHandler *AnnouncementHandler, channelMonitorUserHandler *ChannelMonitorUserHandler, adminHandlers *AdminHandlers, gatewayHandler *GatewayHandler, openaiGatewayHandler *OpenAIGatewayHandler, settingHandler *SettingHandler, totpHandler *TotpHandler, paymentHandler *PaymentHandler, paymentWebhookHandler *PaymentWebhookHandler, availableChannelHandler *AvailableChannelHandler, _ *service.IdempotencyCoordinator, _ *service.IdempotencyCleanupService, ) *Handlers { return &Handlers{ Auth: authHandler, User: userHandler, APIKey: apiKeyHandler, Usage: usageHandler, Redeem: redeemHandler, Subscription: subscriptionHandler, Announcement: announcementHandler, ChannelMonitor: channelMonitorUserHandler, Admin: adminHandlers, Gateway: gatewayHandler, OpenAIGateway: openaiGatewayHandler, Setting: settingHandler, Totp: totpHandler, Payment: paymentHandler, PaymentWebhook: paymentWebhookHandler, AvailableChannel: availableChannelHandler, } } // ProviderSet is the Wire provider set for all handlers var ProviderSet = wire.NewSet( // Top-level handlers NewAuthHandler, NewUserHandler, NewAPIKeyHandler, NewUsageHandler, NewRedeemHandler, NewSubscriptionHandler, NewAnnouncementHandler, NewChannelMonitorUserHandler, NewGatewayHandler, NewOpenAIGatewayHandler, NewTotpHandler, ProvideSettingHandler, NewPaymentHandler, NewPaymentWebhookHandler, NewAvailableChannelHandler, // Admin handlers admin.NewDashboardHandler, admin.NewUserHandler, admin.NewGroupHandler, admin.NewAccountHandler, admin.NewAnnouncementHandler, admin.NewDataManagementHandler, admin.NewBackupHandler, admin.NewOAuthHandler, admin.NewOpenAIOAuthHandler, admin.NewGeminiOAuthHandler, admin.NewAntigravityOAuthHandler, admin.NewProxyHandler, admin.NewRedeemHandler, admin.NewPromoHandler, admin.NewSettingHandler, admin.NewOpsHandler, ProvideSystemHandler, admin.NewSubscriptionHandler, admin.NewUsageHandler, admin.NewUserAttributeHandler, admin.NewErrorPassthroughHandler, admin.NewTLSFingerprintProfileHandler, admin.NewAdminAPIKeyHandler, admin.NewScheduledTestHandler, admin.NewChannelHandler, admin.NewChannelMonitorHandler, admin.NewChannelMonitorRequestTemplateHandler, admin.NewPaymentHandler, admin.NewAffiliateHandler, // Windsurf handler ProvideWindsurfHandler, // AdminHandlers and Handlers constructors ProvideAdminHandlers, ProvideHandlers, )