notifier/internal/workers/welcomer.go

63 lines
1.4 KiB
Go

package workers
import (
"context"
"go.uber.org/zap"
"mailnotifier/internal/clients"
"mailnotifier/internal/models"
"mailnotifier/internal/repository"
)
//todo тут будут заембенжены шаблоны
type Welcomer struct {
repo *repository.Repository
mailClient *clients.MailClient
logger *zap.Logger
welcomeChan <-chan models.Message
}
type WelcomerDeps struct {
Repo *repository.Repository
MailClient *clients.MailClient
Logger *zap.Logger
WelcomeChan chan models.Message
}
func NewWelcomer(deps WelcomerDeps) *Welcomer {
return &Welcomer{
repo: deps.Repo,
mailClient: deps.MailClient,
logger: deps.Logger,
welcomeChan: deps.WelcomeChan,
}
}
func (w *Welcomer) Start(ctx context.Context) {
for {
select {
case msg := <-w.welcomeChan:
w.welcome(ctx, msg)
case <-ctx.Done():
return
}
}
}
func (w *Welcomer) welcome(ctx context.Context, msg models.Message) {
err := w.mailClient.MailSender(clients.SenderDeps{
Subject: "registration",
Email: msg.Email,
TmplPath: "registration", // todo заменить на шаблон
})
if err != nil {
w.logger.Error("error sending message to mailbox registration:", zap.Error(err))
}
msg.SendRegistration = true
err = w.repo.Update(ctx, msg)
if err != nil {
w.logger.Error("error updating record for registration:", zap.Error(err))
}
}