Move emails to platform, make sure to create phone and email in DB
This commit is contained in:
parent
dd33c6ab5e
commit
648e0ee567
17 changed files with 203 additions and 281 deletions
88
platform/email/initial.go
Normal file
88
platform/email/initial.go
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
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"
|
||||
"github.com/Gleipnir-Technology/nidus-sync/db/enums"
|
||||
"github.com/Gleipnir-Technology/nidus-sync/db/models"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
type contentEmailInitial struct {
|
||||
Base contentEmailBase
|
||||
Destination string
|
||||
URLSubscribe string
|
||||
}
|
||||
|
||||
type jobInitial struct {
|
||||
base jobEmailBase
|
||||
}
|
||||
|
||||
func (job jobInitial) Destination() string {
|
||||
return job.base.destination
|
||||
}
|
||||
|
||||
func maybeSendInitialEmail(ctx context.Context, destination string) error {
|
||||
err := EnsureInDB(ctx, destination)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to add email recipient to database: %w", err)
|
||||
}
|
||||
rows, err := models.CommsEmailLogs.Query(
|
||||
models.SelectWhere.CommsEmailLogs.Destination.EQ(destination),
|
||||
models.SelectWhere.CommsEmailLogs.TemplateID.EQ(templateInitialID),
|
||||
).All(ctx, db.PGInstance.BobDB)
|
||||
|
||||
// We already sent an initial email
|
||||
if len(rows) > 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
return sendEmailInitialContact(ctx, destination)
|
||||
}
|
||||
func urlEmailInBrowser(public_id string) string {
|
||||
return config.MakeURLReport("/email/render/%s", public_id)
|
||||
}
|
||||
func urlUnsubscribe(email string) string {
|
||||
return config.MakeURLReport("/email/unsubscribe?email=%s", email)
|
||||
}
|
||||
func sendEmailInitialContact(ctx context.Context, destination string) error {
|
||||
//data := pgtypes.HStore{}
|
||||
data := make(map[string]string, 0)
|
||||
source := config.ForwardEmailReportAddress
|
||||
data["Destination"] = destination
|
||||
data["Source"] = source
|
||||
data["URLLogo"] = config.MakeURLReport("/static/img/nidus-logo-no-lettering-64.png")
|
||||
data["URLSubscribe"] = config.MakeURLReport("/email/confirm?email=%s", destination)
|
||||
data["URLUnsubscribe"] = urlUnsubscribe(destination)
|
||||
|
||||
public_id := generatePublicId(enums.CommsMessagetypeemailInitialContact, data)
|
||||
data["URLBrowser"] = urlEmailInBrowser(public_id)
|
||||
|
||||
text, html, err := renderEmailTemplates(templateInitialID, data)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to render email temlates: %w", err)
|
||||
}
|
||||
|
||||
subject := "Welcome"
|
||||
err = insertEmailLog(ctx, data, destination, public_id, source, subject, templateInitialID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to store email log: %w", err)
|
||||
}
|
||||
resp, err := email.Send(ctx, email.Request{
|
||||
From: source,
|
||||
HTML: html,
|
||||
Subject: subject,
|
||||
Text: text,
|
||||
To: destination,
|
||||
}, enums.CommsMessagetypeemailInitialContact)
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to send email to %s: %w", err)
|
||||
}
|
||||
log.Info().Str("id", resp.ID).Str("to", destination).Msg("Sent initial contact email")
|
||||
return nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue