onasty/internal/events/mailermq/mailermq.go(view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
package mailermq
import (
"context"
"encoding/json"
"github.com/nats-io/nats.go"
"github.com/olexsmir/onasty/internal/events"
"github.com/olexsmir/onasty/internal/transport/http/reqid"
)
type Mailer interface {
SendVerificationEmail(ctx context.Context, input SendVerificationEmailRequest) error
}
type MailerMQ struct {
nc *nats.Conn
}
const sendMailSubject = "mailer.send"
func New(nc *nats.Conn) *MailerMQ {
return &MailerMQ{
nc: nc,
}
}
type sendRequest struct {
RequestID string `json:"request_id"`
Receiver string `json:"receiver"`
TemplateName string `json:"template_name"`
Options map[string]string `json:"options"`
}
type SendVerificationEmailRequest struct {
Receiver string
Token string
}
func (m MailerMQ) SendVerificationEmail(
ctx context.Context,
inp SendVerificationEmailRequest,
) error {
req, err := json.Marshal(sendRequest{
RequestID: reqid.GetContext(ctx),
Receiver: inp.Receiver,
TemplateName: "email_verification",
Options: map[string]string{
"token": inp.Token,
},
})
if err != nil {
return err
}
resp, err := m.nc.RequestWithContext(ctx, sendMailSubject, req)
if err != nil {
return err
}
return events.CheckRespForError(resp)
}
|