94 lines
3.2 KiB
Go
94 lines
3.2 KiB
Go
package email
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/Gleipnir-Technology/nidus-sync/comms/email"
|
|
"github.com/Gleipnir-Technology/nidus-sync/config"
|
|
"github.com/Gleipnir-Technology/nidus-sync/db/enums"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
type contentEmailReportConfirmation struct {
|
|
Base contentEmailBase
|
|
URLReportStatus string
|
|
}
|
|
|
|
func NewJobReportNotificationConfirmation(destination, report_id string) Job {
|
|
return jobEmailReportNotificationConfirmation{
|
|
dest: destination,
|
|
reportID: report_id,
|
|
}
|
|
}
|
|
|
|
type jobEmailReportNotificationConfirmation struct {
|
|
dest string
|
|
reportID string
|
|
}
|
|
|
|
func (job jobEmailReportNotificationConfirmation) destination() string {
|
|
return job.dest
|
|
}
|
|
func (job jobEmailReportNotificationConfirmation) messageType() enums.CommsMessagetypeemail {
|
|
return enums.CommsMessagetypeemailReportNotificationConfirmation
|
|
}
|
|
func (job jobEmailReportNotificationConfirmation) renderHTML() (string, error) {
|
|
_ = newContentEmailNotificationConfirmation(job)
|
|
return "", nil
|
|
}
|
|
func (job jobEmailReportNotificationConfirmation) renderTXT() (string, error) {
|
|
return "fake txt", nil
|
|
}
|
|
func (job jobEmailReportNotificationConfirmation) subject() string {
|
|
return ""
|
|
}
|
|
|
|
func sendEmailReportConfirmation(ctx context.Context, job Job) error {
|
|
j, ok := job.(jobEmailReportNotificationConfirmation)
|
|
if !ok {
|
|
return fmt.Errorf("job is not for report subscription confirmation")
|
|
}
|
|
err := maybeSendInitialEmail(ctx, j.destination())
|
|
if err != nil {
|
|
return fmt.Errorf("Failed to handle initial email: %w", err)
|
|
}
|
|
data := make(map[string]string, 0)
|
|
data["report_id"] = j.reportID
|
|
report_id_str := publicReportID(j.reportID)
|
|
data["ReportIDStr"] = report_id_str
|
|
data["URLLogo"] = config.MakeURLReport("/static/img/nidus-logo-no-lettering-64.png")
|
|
data["URLReportStatus"] = config.MakeURLReport("/status/%s", j.reportID)
|
|
data["URLReportUnsubscribe"] = config.MakeURLReport("/email/unsubscribe/report/%s", j.reportID)
|
|
data["URLUnsubscribe"] = urlUnsubscribe(j.destination())
|
|
|
|
public_id := generatePublicId(enums.CommsMessagetypeemailReportNotificationConfirmation, data)
|
|
data["URLViewInBrowser"] = urlEmailInBrowser(public_id)
|
|
|
|
text, html, err := renderEmailTemplates(templateReportNotificationConfirmationID, data)
|
|
if err != nil {
|
|
return fmt.Errorf("Failed to render email report notification template: %w", err)
|
|
}
|
|
subject := fmt.Sprintf("Mosquito Report Submission - %s", report_id_str)
|
|
err = insertEmailLog(ctx, data, j.destination(), public_id, config.ForwardEmailRMOAddress, subject, templateReportNotificationConfirmationID)
|
|
if err != nil {
|
|
return fmt.Errorf("Failed to store email log: %w", err)
|
|
}
|
|
resp, err := email.Send(ctx, email.Request{
|
|
From: config.ForwardEmailRMOAddress,
|
|
HTML: html,
|
|
Subject: subject,
|
|
Text: text,
|
|
To: j.destination(),
|
|
})
|
|
if err != nil {
|
|
return fmt.Errorf("Failed to send email report confirmation to %s for report %s: %w", j.dest, j.reportID, err)
|
|
}
|
|
log.Info().Str("id", resp.ID).Str("dest", j.dest).Str("report_id", j.reportID).Msg("Sent report confirmation email")
|
|
return nil
|
|
}
|
|
|
|
func newContentEmailNotificationConfirmation(job jobEmailReportNotificationConfirmation) (result contentEmailReportConfirmation) {
|
|
result.URLReportStatus = config.MakeURLReport("/status/%s", job.reportID)
|
|
return result
|
|
}
|