app-cloudep-notification-se.../internal/svc/service_context.go

87 lines
2.5 KiB
Go

package svc
import (
"app-cloudep-notification-service/internal/config"
cfg "app-cloudep-notification-service/pkg/config"
useD "app-cloudep-notification-service/pkg/domain/usecase"
"app-cloudep-notification-service/pkg/repository"
"app-cloudep-notification-service/pkg/usecase"
"code.30cm.net/digimon/library-go/errs"
"code.30cm.net/digimon/library-go/errs/code"
)
type ServiceContext struct {
Config config.Config
DeliveryUseCase useD.DeliveryUseCase
TemplateUseCase useD.TemplateUseCase
}
func NewServiceContext(c config.Config) *ServiceContext {
errs.Scope = code.CloudEPNotification
param := usecase.DeliveryUseCaseParam{}
if c.AmazonSesSettings.Enable {
sesRepo := repository.MustAwsSesMailRepository(repository.AwsEmailDeliveryParam{
Conf: &cfg.AmazonSesSettings{
Enable: c.AmazonSesSettings.Enable,
Sort: c.AmazonSesSettings.Sort,
PoolSize: c.AmazonSesSettings.PoolSize,
Region: c.AmazonSesSettings.Region,
Sender: c.AmazonSesSettings.Sender,
Charset: c.AmazonSesSettings.Charset,
AccessKey: c.AmazonSesSettings.AccessKey,
SecretKey: c.AmazonSesSettings.SecretKey,
Token: c.AmazonSesSettings.Token,
},
})
param.EmailProviders = append(param.EmailProviders, useD.EmailProvider{
Sort: int64(c.AmazonSesSettings.Sort),
Repo: sesRepo,
})
}
if c.SMTPConfig.Enable {
smtpRepo := repository.MustSMTPUseCase(repository.SMTPMailUseCaseParam{
Conf: cfg.SMTPConfig{
Enable: c.SMTPConfig.Enable,
Sort: c.SMTPConfig.Sort,
GoroutinePoolNum: c.SMTPConfig.GoroutinePoolNum,
Host: c.SMTPConfig.Host,
Port: c.SMTPConfig.Port,
Username: c.SMTPConfig.Username,
Password: c.SMTPConfig.Password,
},
})
param.EmailProviders = append(param.EmailProviders, useD.EmailProvider{
Sort: int64(c.SMTPConfig.Sort),
Repo: smtpRepo,
})
}
if c.MitakeSMSSender.Enable {
param.SMSProviders = append(param.SMSProviders, useD.SMSProvider{
Sort: int64(c.MitakeSMSSender.Sort),
Repo: repository.MustMitakeRepository(repository.MitakeSMSDeliveryParam{
Conf: &cfg.MitakeSMSSender{
Enable: c.MitakeSMSSender.Enable,
Sort: c.MitakeSMSSender.Sort,
User: c.MitakeSMSSender.User,
Password: c.MitakeSMSSender.Password,
PoolSize: c.MitakeSMSSender.PoolSize,
},
}),
})
}
uc := usecase.MustDeliveryUseCase(param)
return &ServiceContext{
Config: c,
DeliveryUseCase: uc,
TemplateUseCase: usecase.MustTemplateUseCase(usecase.TemplateUseCaseParam{}),
}
}