Files
libredesk/internal/template/template.go
2024-07-25 02:03:56 +05:30

65 lines
1.6 KiB
Go

// Package template manages email templates including insertion and retrieval.
package template
import (
"embed"
"github.com/abhinavxd/artemis/internal/dbutil"
"github.com/abhinavxd/artemis/internal/template/models"
"github.com/jmoiron/sqlx"
)
var (
//go:embed queries.sql
efs embed.FS
)
// Manager handles template-related operations.
type Manager struct {
q queries
}
// queries contains prepared SQL queries.
type queries struct {
InsertTemplate *sqlx.Stmt `query:"insert-template"`
GetTemplate *sqlx.Stmt `query:"get-template"`
GetDefaultTemplate *sqlx.Stmt `query:"get-default-template"`
}
// New creates and returns a new instance of the Manager.
func New(db *sqlx.DB) (*Manager, error) {
var q queries
if err := dbutil.ScanSQLFile("queries.sql", &q, db, efs); err != nil {
return nil, err
}
return &Manager{q}, nil
}
// InsertTemplate inserts a new template with the given name, subject, and body.
func (m *Manager) InsertTemplate(name, subject, body string) error {
if _, err := m.q.InsertTemplate.Exec(name, subject, body); err != nil {
return err
}
return nil
}
// GetTemplate retrieves a template by its name.
func (m *Manager) GetTemplate(name string) (models.Template, error) {
var template models.Template
if err := m.q.GetTemplate.Get(&template, name); err != nil {
return template, err
}
return template, nil
}
// GetDefaultTemplate retrieves the default template.
func (m *Manager) GetDefaultTemplate() (models.Template, error) {
var template models.Template
if err := m.q.GetDefaultTemplate.Get(&template); err != nil {
return template, err
}
return template, nil
}