add LeadSender interface
This commit is contained in:
parent
8e6e09daa0
commit
d09b7b0823
@ -10,6 +10,7 @@ import (
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/worker.git/clients/customer"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/worker.git/clients/mailclient"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/worker.git/initialize"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/worker.git/wctools"
|
||||
|
||||
"time"
|
||||
@ -20,7 +21,7 @@ import (
|
||||
type DepsSendToClient struct {
|
||||
Redis *redis.Client
|
||||
Dal *dal.DAL
|
||||
MailClient *mailclient.Client
|
||||
LeadsSenders []initialize.LeadSender
|
||||
CustomerService customer.CustomerServiceClient
|
||||
}
|
||||
|
||||
@ -334,9 +335,18 @@ func (w *SendToClient) ProcessMessageToClient(quizConfig model.QuizConfig, quest
|
||||
|
||||
fmt.Println("SUBJECT", theme, account.Email)
|
||||
|
||||
err := w.deps.MailClient.SendMailWithAttachment(account.Email, theme, toClientTemplate, data, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
leadData := initialize.LeadData{
|
||||
To: account.Email,
|
||||
Subject: theme,
|
||||
Template: toClientTemplate,
|
||||
TemplateData: data,
|
||||
}
|
||||
|
||||
for _, sender := range w.deps.LeadsSenders {
|
||||
err := sender.SendLead(leadData)
|
||||
if err != nil {
|
||||
w.reportError(err, fmt.Sprintf("Error sending lead through %s", sender.Name()))
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
@ -358,9 +368,18 @@ func (w *SendToClient) processReminderToClient(email string, quizConfig model.Qu
|
||||
|
||||
fmt.Println("PRTC", data, email, quizConfig)
|
||||
|
||||
err := w.deps.MailClient.SendMailWithAttachment(email, quizConfig.Mailing.Theme, reminderTemplate, data, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
leadData := initialize.LeadData{
|
||||
To: email,
|
||||
Subject: quizConfig.Mailing.Theme,
|
||||
Template: reminderTemplate,
|
||||
TemplateData: data,
|
||||
}
|
||||
|
||||
for _, sender := range w.deps.LeadsSenders {
|
||||
err := sender.SendLead(leadData)
|
||||
if err != nil {
|
||||
w.reportError(err, fmt.Sprintf("Error sending lead through %s", sender.Name()))
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
@ -15,6 +15,7 @@ import (
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/worker.git/answerwc"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/worker.git/clients/customer"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/worker.git/clients/mailclient"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/worker.git/initialize"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/worker.git/privilegewc"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/worker.git/workers/shortstat"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/worker.git/workers/timeout"
|
||||
@ -137,6 +138,10 @@ func New(ctx context.Context, opts interface{}, ver appInit.Version) (appInit.Co
|
||||
|
||||
mailClient := mailclient.NewClient(smtpData)
|
||||
|
||||
mailSender := initialize.NewMailLeadSender(mailClient)
|
||||
|
||||
leadsSenders := []initialize.LeadSender{mailSender}
|
||||
|
||||
customerServiceConn, err := grpc.Dial(options.CustomerServiceAddress, grpc.WithInsecure())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -186,7 +191,7 @@ func New(ctx context.Context, opts interface{}, ver appInit.Version) (appInit.Co
|
||||
toClientWorker := answerwc.NewSendToClient(answerwc.DepsSendToClient{
|
||||
Redis: redisClient,
|
||||
Dal: pgdal,
|
||||
MailClient: mailClient,
|
||||
LeadsSenders: leadsSenders,
|
||||
CustomerService: customerServiceClient,
|
||||
}, logger, errChan)
|
||||
|
||||
|
39
initialize/senders.go
Normal file
39
initialize/senders.go
Normal file
@ -0,0 +1,39 @@
|
||||
package initialize
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/worker.git/clients/mailclient"
|
||||
)
|
||||
|
||||
type LeadSender interface {
|
||||
SendLead(leadData LeadData) error
|
||||
Name() string
|
||||
}
|
||||
|
||||
type LeadData struct {
|
||||
To interface{}
|
||||
Subject string
|
||||
Template string
|
||||
TemplateData mailclient.EmailTemplateData
|
||||
}
|
||||
|
||||
type MailLeadSender struct {
|
||||
client *mailclient.Client
|
||||
}
|
||||
|
||||
func NewMailLeadSender(client *mailclient.Client) *MailLeadSender {
|
||||
return &MailLeadSender{client: client}
|
||||
}
|
||||
|
||||
func (m *MailLeadSender) SendLead(data LeadData) error {
|
||||
err := m.client.SendMailWithAttachment(data.To.(string), data.Subject, data.Template, data.TemplateData, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *MailLeadSender) Name() string {
|
||||
return "MailLeadSender"
|
||||
}
|
Loading…
Reference in New Issue
Block a user