add LeadSender interface

This commit is contained in:
Pavel 2024-06-10 17:01:40 +03:00
parent 8e6e09daa0
commit d09b7b0823
3 changed files with 71 additions and 8 deletions

@ -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

@ -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"
}