Files
sendico/api/notification/internal/server/notificationimp/mail/ampli.go
Stephan D d367dddbbd
Some checks failed
ci/woodpecker/push/db Pipeline was successful
ci/woodpecker/push/fx/1 Pipeline failed
ci/woodpecker/push/nats Pipeline was successful
ci/woodpecker/push/fx/2 Pipeline failed
fx build fix
2025-11-08 00:40:01 +01:00

71 lines
1.9 KiB
Go

package mail
import (
"github.com/tech/sendico/notification/interface/api/localizer"
mmail "github.com/tech/sendico/notification/internal/server/notificationimp/mail/messagebuilder"
"github.com/tech/sendico/pkg/domainprovider"
"github.com/tech/sendico/pkg/messaging"
nn "github.com/tech/sendico/pkg/messaging/notifications/notification"
"github.com/tech/sendico/pkg/mlogger"
"github.com/tech/sendico/pkg/model"
"go.uber.org/zap"
)
type AmpliMailer struct {
logger mlogger.Logger
producer messaging.Producer
client Client
source string
}
func (am *AmpliMailer) Send(m mmail.MailBuilder) error {
err := am.client.Send(m)
if err != nil {
am.logger.Warn("Failed to send email", zap.Error(err))
}
opResult := model.OperationResult{
IsSuccessful: err == nil,
}
if !opResult.IsSuccessful {
opResult.Error = err.Error()
}
msg, e := m.Build()
if e != nil {
am.logger.Warn("Failed to build message content", zap.Error(e))
return e
}
if er := am.producer.SendMessage(nn.NotificationSent(am.source, &model.NotificationResult{
Channel: "email",
TemplateID: msg.TemplateID(),
Locale: msg.Locale(),
AmpliEvent: model.AmpliEvent{
UserID: "",
},
Result: opResult,
})); er != nil {
am.logger.Warn("Failed to send mailing result", zap.Error(er))
}
return err
}
func (am *AmpliMailer) MailBuilder() mmail.MailBuilder {
return am.client.MailBuilder()
}
func NewAmpliMailer(log mlogger.Logger, sender string, producer messaging.Producer, l localizer.Localizer, dp domainprovider.DomainProvider, config *Config) (*AmpliMailer, error) {
logger := log.Named("ampli")
c, err := createMailClient(logger, producer, l, dp, config)
if err != nil {
logger.Warn("Failed to create mailng driver", zap.Error(err), zap.String("driver", config.Driver))
return nil, err
}
am := &AmpliMailer{
logger: logger,
client: c,
producer: producer,
source: sender,
}
am.logger.Info("Amplitude wrapper installed")
return am, nil
}