Files
worker/internal/sender/invite.go
Gleb Tv 2c884c5612
Некоторые проверки не удались
CI / test (push) Successful in 2m5s
Docker / Build and publish worker image (push) Failing after 31s
refactor: adopt worker module path
2026-07-13 17:56:12 +03:00

86 строки
2.4 KiB
Go

package sender
import (
"bytes"
"html/template"
"log"
"github.com/pkg/errors"
"gorm.io/gorm/clause"
"rocketgit.ru/rsmon/worker/app/models"
)
var (
inviteSubject *template.Template
inviteMessage *template.Template
inviteHTMLMessage *template.Template
)
func init() {
inviteSubject = template.Must(template.New("invite_subject").Parse(`Доступ к мониторингу rsmon.ru`))
inviteMessage = template.Must(template.New("invite_message").Parse(`
Пользователь {{.Inviter.Name}} {{.Inviter.Email}}
{{ if not .InviteeID }}пригласил вас получить{{else}}предоставил вам{{end}} доступ к аккаунту rsmon.ru {{.Account.Name}}
{{ if not .InviteeID }}
Чтобы зарегистрироваться, перейдите по ссылке: https://rsmon.ru/by-invite/{{.Token}}
{{end}}
https://rsmon.ru
`))
inviteHTMLMessage = template.Must(template.New("invite_message").Parse(`
<p>Пользователь {{.Inviter.Name}} {{.Inviter.Email}}
{{ if not .InviteeID }}пригласил вас получить{{else}}предоставил вам{{end}}
доступ к аккаунту rsmon.ru <strong>{{.Account.Name}}</strong></p>
{{ if not .InviteeID }}
<p>Чтобы зарегистрироваться, перейдите по ссылке:
<a href="https://rsmon.ru/by-invite/{{.Token}}">https://rsmon.ru/by-invite/{{.Token}}</a></p>
{{end}}
<p><a href="https://rsmon.ru">https://rsmon.ru</a></p>
`))
}
// Invite provides functionality.
func Invite(i *models.Invite) error {
// us := models.User{}
var err error
var subject, message, htmlMessage bytes.Buffer
err = inviteSubject.Execute(&subject, i)
if err != nil {
return err
}
err = inviteMessage.Execute(&message, i)
if err != nil {
return err
}
err = inviteHTMLMessage.Execute(&htmlMessage, i)
if err != nil {
return err
}
err = SendEmail(i.Email, subject.String(), message.String(), htmlMessage.String())
if err != nil {
log.Println("email send fail", err)
i.State = "FAIL"
serr := models.DB().Save(&i).Error
if serr != nil {
return errors.Wrap(err, "failed to save invite, and failed to save to DB")
}
return errors.Wrap(err, "failed to save invite")
}
if i.State != "OK" {
i.State = "SENT"
}
err = models.DB().Omit(clause.Associations).Save(&i).Error
if err != nil {
return errors.Wrap(err, "failed to add accesses to invited user")
}
return nil
}