This commit is contained in:
2025-08-02 02:54:21 +08:00
parent 934dce2776
commit 66845d3fe0
74 changed files with 8686 additions and 212 deletions

View File

@@ -26,6 +26,8 @@ import (
certification_repo "tyapi-server/internal/infrastructure/database/repositories/certification"
finance_repo "tyapi-server/internal/infrastructure/database/repositories/finance"
product_repo "tyapi-server/internal/infrastructure/database/repositories/product"
infra_events "tyapi-server/internal/infrastructure/events"
"tyapi-server/internal/infrastructure/external/email"
"tyapi-server/internal/infrastructure/external/ocr"
"tyapi-server/internal/infrastructure/external/sms"
"tyapi-server/internal/infrastructure/external/storage"
@@ -114,22 +116,24 @@ func NewContainer() *Container {
}
},
// 提供普通的*zap.Logger用于大多数场景
func(log logger.Logger) *zap.Logger {
// 尝试转换为ZapLogger
if zapLogger, ok := log.(*logger.ZapLogger); ok {
return zapLogger.GetZapLogger()
}
// 尝试转换为LevelLogger
if levelLogger, ok := log.(*logger.LevelLogger); ok {
// 获取Info级别的日志器作为默认
if infoLogger := levelLogger.GetLevelLogger(zapcore.InfoLevel); infoLogger != nil {
return infoLogger
fx.Annotate(
func(log logger.Logger) *zap.Logger {
// 尝试转换为ZapLogger
if zapLogger, ok := log.(*logger.ZapLogger); ok {
return zapLogger.GetZapLogger()
}
}
// 如果类型转换失败创建一个默认的zap logger
defaultLogger, _ := zap.NewProduction()
return defaultLogger
},
// 尝试转换为LevelLogger
if levelLogger, ok := log.(*logger.LevelLogger); ok {
// 获取Info级别的日志器作为默认
if infoLogger := levelLogger.GetLevelLogger(zapcore.InfoLevel); infoLogger != nil {
return infoLogger
}
}
// 如果类型转换失败创建一个默认的zap logger
defaultLogger, _ := zap.NewProduction()
return defaultLogger
},
),
// 数据库连接
func(cfg *config.Config, cacheService interfaces.CacheService, logger *zap.Logger) (*gorm.DB, error) {
@@ -178,8 +182,10 @@ func NewContainer() *Container {
func() int {
return 5 // 默认5个工作协程
},
events.NewMemoryEventBus,
fx.Annotate(events.NewMemoryEventBus, fx.As(new(interfaces.EventBus))),
fx.Annotate(
events.NewMemoryEventBus,
fx.As(new(interfaces.EventBus)),
),
// 健康检查
health.NewHealthChecker,
// 提供 config.SMSConfig
@@ -196,6 +202,12 @@ func NewContainer() *Container {
},
// 短信服务
sms.NewAliSMSService,
// 邮件服务
fx.Annotate(
func(cfg *config.Config, logger *zap.Logger) *email.QQEmailService {
return email.NewQQEmailService(cfg.Email, logger)
},
),
// 存储服务
fx.Annotate(
func(cfg *config.Config, logger *zap.Logger) *storage.QiNiuStorageService {
@@ -421,6 +433,16 @@ func NewContainer() *Container {
finance_repo.NewGormAlipayOrderRepository,
fx.As(new(domain_finance_repo.AlipayOrderRepository)),
),
// 发票申请仓储
fx.Annotate(
finance_repo.NewGormInvoiceApplicationRepository,
fx.As(new(domain_finance_repo.InvoiceApplicationRepository)),
),
// 用户开票信息仓储
fx.Annotate(
finance_repo.NewGormUserInvoiceInfoRepository,
fx.As(new(domain_finance_repo.UserInvoiceInfoRepository)),
),
),
// 仓储层 - 产品域
@@ -465,7 +487,9 @@ func NewContainer() *Container {
// 领域服务
fx.Provide(
user_service.NewUserAggregateService,
fx.Annotate(
user_service.NewUserAggregateService,
),
user_service.NewUserAuthService,
user_service.NewSMSCodeService,
user_service.NewContractAggregateService,
@@ -475,6 +499,43 @@ func NewContainer() *Container {
product_service.NewProductDocumentationService,
finance_service.NewWalletAggregateService,
finance_service.NewRechargeRecordService,
// 发票领域服务
fx.Annotate(
finance_service.NewInvoiceDomainService,
),
// 用户开票信息服务
fx.Annotate(
finance_service.NewUserInvoiceInfoService,
),
// 发票事件发布器 - 绑定到接口
fx.Annotate(
func(logger *zap.Logger, eventBus interfaces.EventBus) finance_service.EventPublisher {
return infra_events.NewInvoiceEventPublisher(logger, eventBus)
},
fx.As(new(finance_service.EventPublisher)),
),
// 发票聚合服务 - 需要用户开票信息仓储
fx.Annotate(
func(
applicationRepo domain_finance_repo.InvoiceApplicationRepository,
userInvoiceInfoRepo domain_finance_repo.UserInvoiceInfoRepository,
domainService finance_service.InvoiceDomainService,
qiniuStorageService *storage.QiNiuStorageService,
logger *zap.Logger,
eventPublisher finance_service.EventPublisher,
) finance_service.InvoiceAggregateService {
return finance_service.NewInvoiceAggregateService(
applicationRepo,
userInvoiceInfoRepo,
domainService,
qiniuStorageService,
logger,
eventPublisher,
)
},
),
// 发票事件处理器
infra_events.NewInvoiceEventHandler,
certification_service.NewCertificationAggregateService,
certification_service.NewEnterpriseInfoSubmitRecordService,
),
@@ -508,6 +569,16 @@ func NewContainer() *Container {
finance.NewFinanceApplicationService,
fx.As(new(finance.FinanceApplicationService)),
),
// 发票应用服务 - 绑定到接口
fx.Annotate(
finance.NewInvoiceApplicationService,
fx.As(new(finance.InvoiceApplicationService)),
),
// 管理员发票应用服务 - 绑定到接口
fx.Annotate(
finance.NewAdminInvoiceApplicationService,
fx.As(new(finance.AdminInvoiceApplicationService)),
),
// 产品应用服务 - 绑定到接口
fx.Annotate(
product.NewProductApplicationService,
@@ -571,6 +642,7 @@ func NewContainer() *Container {
RegisterLifecycleHooks,
RegisterMiddlewares,
RegisterRoutes,
RegisterEventHandlers,
),
)
@@ -761,3 +833,34 @@ func NewRedisCache(client *redis.Client, logger *zap.Logger, cfg *config.Config)
func NewTracedRedisCache(client *redis.Client, tracer *tracing.Tracer, logger *zap.Logger, cfg *config.Config) interfaces.CacheService {
return tracing.NewTracedRedisCache(client, tracer, logger, "app")
}
// RegisterEventHandlers 注册事件处理器
func RegisterEventHandlers(
eventBus interfaces.EventBus,
invoiceEventHandler *infra_events.InvoiceEventHandler,
logger *zap.Logger,
) {
// 启动事件总线
if err := eventBus.Start(context.Background()); err != nil {
logger.Error("启动事件总线失败", zap.Error(err))
return
}
// 注册发票事件处理器
for _, eventType := range invoiceEventHandler.GetEventTypes() {
if err := eventBus.Subscribe(eventType, invoiceEventHandler); err != nil {
logger.Error("注册发票事件处理器失败",
zap.String("event_type", eventType),
zap.String("handler", invoiceEventHandler.GetName()),
zap.Error(err),
)
} else {
logger.Info("发票事件处理器注册成功",
zap.String("event_type", eventType),
zap.String("handler", invoiceEventHandler.GetName()),
)
}
}
logger.Info("所有事件处理器已注册")
}