logger.go

39 lines
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
package emailers

import (
	"embed"
	"html/template"
	"log"

	"congo.gg/pkg/application"
)

// Logger is a development emailer that logs emails instead of sending them
type Logger struct {
	application.BaseEmailer
}

// NewLogger creates a new Logger emailer for development
//
// Example:
//
//	//go:embed all:emails
//	var emails embed.FS
//
//	emailer := emailers.NewLogger(emails, nil)
func NewLogger(emails embed.FS, funcs template.FuncMap) *Logger {
	l := &Logger{}
	l.Init(emails, funcs)
	return l
}

// Send renders a template and logs it
func (l *Logger) Send(to, subject, templateName string, data map[string]any) error {
	body, err := l.Render(templateName, data)
	if err != nil {
		return err
	}

	log.Printf("EMAIL TO: %s\nSUBJECT: %s\nTEMPLATE: %s\nBODY:\n%s\n", to, subject, templateName, body)
	return nil
}