mirror of
https://github.com/abhinavxd/libredesk.git
synced 2025-11-03 05:23:48 +00:00
65 lines
1.6 KiB
Go
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
|
|
}
|