package brevo import ( "bytes" "context" "furtuna-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: "siregaraditya@gmail.com", }, To: []brevo.SendSmtpEmailTo{ { Email: "avranata01@gmail.com", }, }, 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} }