Files
OpenFlare/backend/plugins/domain/admin/service/template.go
T

87 lines
2.4 KiB
Go

// Copyright 2026 Arctel.net
// SPDX-License-Identifier: Apache-2.0
package service
import (
"Wavelet/plugins/domain/admin/errs"
"Wavelet/plugins/domain/admin/model"
"Wavelet/plugins/domain/admin/repository"
"context"
)
// CreateTemplate persists a new notification template after key collision and field checks.
func CreateTemplate(ctx context.Context, req model.CreateTemplateRequest) (model.Template, error) {
exists, err := repository.TemplateExistsByKey(ctx, req.Key)
if err != nil {
return model.Template{}, err
}
if exists {
return model.Template{}, errs.ErrTemplateKeyExists
}
tmpl := model.Template{
Key: req.Key,
Name: req.Name,
Type: req.Type,
Subject: req.Subject,
Content: req.Content,
Description: req.Description,
IsSystem: false,
}
if err := tmpl.Validate(); err != nil {
return model.Template{}, err
}
if err := repository.CreateTemplateRecord(ctx, &tmpl); err != nil {
return model.Template{}, err
}
return tmpl, nil
}
// ListTemplates returns every notification template.
func ListTemplates(ctx context.Context) ([]model.Template, error) {
return repository.ListTemplatesRecord(ctx)
}
// GetTemplate loads a template by its identifier.
func GetTemplate(ctx context.Context, key string) (model.Template, error) {
tmpl, err := repository.GetTemplateByKey(ctx, key)
if err != nil {
return model.Template{}, translateNotFound(err, errs.ErrTemplateNotFound)
}
return tmpl, nil
}
// UpdateTemplate rewrites the mutable fields of an existing template.
func UpdateTemplate(ctx context.Context, key string, req model.UpdateTemplateRequest) (model.Template, error) {
tmpl, err := GetTemplate(ctx, key)
if err != nil {
return model.Template{}, err
}
tmpl.Name = req.Name
tmpl.Type = req.Type
tmpl.Subject = req.Subject
tmpl.Content = req.Content
tmpl.Description = req.Description
if err := tmpl.Validate(); err != nil {
return model.Template{}, err
}
if err := repository.SaveTemplateRecord(ctx, &tmpl); err != nil {
return model.Template{}, err
}
return tmpl, nil
}
// DeleteTemplate removes a custom template; system presets are protected.
func DeleteTemplate(ctx context.Context, key string) error {
tmpl, err := GetTemplate(ctx, key)
if err != nil {
return err
}
if tmpl.IsSystem {
return errs.ErrSystemTemplateCannotDelete
}
return repository.DeleteTemplateRecord(ctx, &tmpl)
}