140 lines
4.5 KiB
Go
140 lines
4.5 KiB
Go
package service
|
||
|
||
import (
|
||
"sub2api/internal/config"
|
||
"sub2api/internal/repository"
|
||
|
||
"github.com/redis/go-redis/v9"
|
||
)
|
||
|
||
// Services 服务集合容器
|
||
type Services struct {
|
||
Auth *AuthService
|
||
User *UserService
|
||
ApiKey *ApiKeyService
|
||
Group *GroupService
|
||
Account *AccountService
|
||
Proxy *ProxyService
|
||
Redeem *RedeemService
|
||
Usage *UsageService
|
||
Pricing *PricingService
|
||
Billing *BillingService
|
||
BillingCache *BillingCacheService
|
||
Admin AdminService
|
||
Gateway *GatewayService
|
||
OAuth *OAuthService
|
||
RateLimit *RateLimitService
|
||
AccountUsage *AccountUsageService
|
||
AccountTest *AccountTestService
|
||
Setting *SettingService
|
||
Email *EmailService
|
||
EmailQueue *EmailQueueService
|
||
Turnstile *TurnstileService
|
||
Subscription *SubscriptionService
|
||
Concurrency *ConcurrencyService
|
||
Identity *IdentityService
|
||
}
|
||
|
||
// NewServices 创建所有服务实例
|
||
func NewServices(repos *repository.Repositories, rdb *redis.Client, cfg *config.Config) *Services {
|
||
// 初始化价格服务
|
||
pricingService := NewPricingService(cfg)
|
||
if err := pricingService.Initialize(); err != nil {
|
||
// 价格服务初始化失败不应阻止启动,使用回退价格
|
||
println("[Service] Warning: Pricing service initialization failed:", err.Error())
|
||
}
|
||
|
||
// 初始化计费服务(依赖价格服务)
|
||
billingService := NewBillingService(cfg, pricingService)
|
||
|
||
// 初始化其他服务
|
||
authService := NewAuthService(repos.User, cfg)
|
||
userService := NewUserService(repos.User, cfg)
|
||
apiKeyService := NewApiKeyService(repos.ApiKey, repos.User, repos.Group, repos.UserSubscription, rdb, cfg)
|
||
groupService := NewGroupService(repos.Group)
|
||
accountService := NewAccountService(repos.Account, repos.Group)
|
||
proxyService := NewProxyService(repos.Proxy)
|
||
usageService := NewUsageService(repos.UsageLog, repos.User)
|
||
|
||
// 初始化订阅服务 (RedeemService 依赖)
|
||
subscriptionService := NewSubscriptionService(repos)
|
||
|
||
// 初始化兑换服务 (依赖订阅服务)
|
||
redeemService := NewRedeemService(repos.RedeemCode, repos.User, subscriptionService, rdb)
|
||
|
||
// 初始化Admin服务
|
||
adminService := NewAdminService(repos)
|
||
|
||
// 初始化OAuth服务(GatewayService依赖)
|
||
oauthService := NewOAuthService(repos.Proxy)
|
||
|
||
// 初始化限流服务
|
||
rateLimitService := NewRateLimitService(repos, cfg)
|
||
|
||
// 初始化计费缓存服务
|
||
billingCacheService := NewBillingCacheService(rdb, repos.User, repos.UserSubscription)
|
||
|
||
// 初始化账号使用量服务
|
||
accountUsageService := NewAccountUsageService(repos, oauthService)
|
||
|
||
// 初始化账号测试服务
|
||
accountTestService := NewAccountTestService(repos, oauthService)
|
||
|
||
// 初始化身份指纹服务
|
||
identityService := NewIdentityService(rdb)
|
||
|
||
// 初始化Gateway服务
|
||
gatewayService := NewGatewayService(repos, rdb, cfg, oauthService, billingService, rateLimitService, billingCacheService, identityService)
|
||
|
||
// 初始化设置服务
|
||
settingService := NewSettingService(repos.Setting, cfg)
|
||
emailService := NewEmailService(repos.Setting, rdb)
|
||
|
||
// 初始化邮件队列服务
|
||
emailQueueService := NewEmailQueueService(emailService, 3)
|
||
|
||
// 初始化Turnstile服务
|
||
turnstileService := NewTurnstileService(settingService)
|
||
|
||
// 设置Auth服务的依赖(用于注册开关和邮件验证)
|
||
authService.SetSettingService(settingService)
|
||
authService.SetEmailService(emailService)
|
||
authService.SetTurnstileService(turnstileService)
|
||
authService.SetEmailQueueService(emailQueueService)
|
||
|
||
// 初始化并发控制服务
|
||
concurrencyService := NewConcurrencyService(rdb)
|
||
|
||
// 注入计费缓存服务到需要失效缓存的服务
|
||
redeemService.SetBillingCacheService(billingCacheService)
|
||
subscriptionService.SetBillingCacheService(billingCacheService)
|
||
SetAdminServiceBillingCache(adminService, billingCacheService)
|
||
|
||
return &Services{
|
||
Auth: authService,
|
||
User: userService,
|
||
ApiKey: apiKeyService,
|
||
Group: groupService,
|
||
Account: accountService,
|
||
Proxy: proxyService,
|
||
Redeem: redeemService,
|
||
Usage: usageService,
|
||
Pricing: pricingService,
|
||
Billing: billingService,
|
||
BillingCache: billingCacheService,
|
||
Admin: adminService,
|
||
Gateway: gatewayService,
|
||
OAuth: oauthService,
|
||
RateLimit: rateLimitService,
|
||
AccountUsage: accountUsageService,
|
||
AccountTest: accountTestService,
|
||
Setting: settingService,
|
||
Email: emailService,
|
||
EmailQueue: emailQueueService,
|
||
Turnstile: turnstileService,
|
||
Subscription: subscriptionService,
|
||
Concurrency: concurrencyService,
|
||
Identity: identityService,
|
||
}
|
||
}
|