81 lines
1.6 KiB
Go
81 lines
1.6 KiB
Go
package brevo
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"enaklo-pos-be/internal/entity"
|
|
"html/template"
|
|
"io/ioutil"
|
|
"log"
|
|
|
|
brevo "github.com/getbrevo/brevo-go/lib"
|
|
)
|
|
|
|
type Config interface {
|
|
GetApiKey() string
|
|
}
|
|
|
|
type ServiceImpl struct {
|
|
brevoConn *brevo.APIClient
|
|
}
|
|
|
|
func (s ServiceImpl) SendEmailTransactional(ctx context.Context, param entity.SendEmailNotificationParam) error {
|
|
templateFile, err := ioutil.ReadFile(param.TemplatePath)
|
|
if err != nil {
|
|
log.Println(err)
|
|
return err
|
|
}
|
|
|
|
renderedTemplate, err := template.New(param.TemplateName).Parse(string(templateFile))
|
|
if err != nil {
|
|
log.Println(err)
|
|
return err
|
|
}
|
|
|
|
return s.sendEmail(ctx, renderedTemplate, param)
|
|
}
|
|
|
|
func (s ServiceImpl) sendEmail(ctx context.Context, tmpl *template.Template, param entity.SendEmailNotificationParam) error {
|
|
var body bytes.Buffer
|
|
err := tmpl.Execute(&body, param.Data)
|
|
if err != nil {
|
|
log.Println(err)
|
|
return err
|
|
}
|
|
|
|
payload := brevo.SendSmtpEmail{
|
|
Sender: &brevo.SendSmtpEmailSender{
|
|
Email: param.Sender,
|
|
},
|
|
To: []brevo.SendSmtpEmailTo{
|
|
{
|
|
Email: param.Recipient,
|
|
},
|
|
},
|
|
Subject: param.Subject,
|
|
HtmlContent: body.String(),
|
|
}
|
|
|
|
if len(param.CcEmails) != 0 {
|
|
for _, email := range param.CcEmails {
|
|
payload.Cc = append(payload.Cc, brevo.SendSmtpEmailCc{
|
|
Email: email,
|
|
})
|
|
}
|
|
}
|
|
|
|
_, _, err = s.brevoConn.TransactionalEmailsApi.SendTransacEmail(ctx, payload)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func New(conf Config) *ServiceImpl {
|
|
cfg := brevo.NewConfiguration()
|
|
cfg.AddDefaultHeader("api-key", conf.GetApiKey())
|
|
client := brevo.NewAPIClient(cfg)
|
|
return &ServiceImpl{brevoConn: client}
|
|
}
|