safesight/control/internal/service/template.go
tian 98e375dc36 chore: 合并 safesight-control 仓库为 control/ 子目录
项目合并为单仓库:设备端(根) + 管理端(control/)。
两端 git 历史完整保留(git subtree 合并)。

git-subtree-dir: control
git-subtree-mainline: 923ab10d5c
git-subtree-split: 70738edb31
2026-08-02 11:13:26 +08:00

62 lines
1.4 KiB
Go

package service
import (
"encoding/json"
"os"
"path/filepath"
"safesight-control/internal/config"
)
type Template struct {
Name string `json:"name"`
Schema interface{} `json:"schema"`
Body interface{} `json:"body"`
}
type TemplateService struct {
cfg *config.Config
}
func NewTemplateService(cfg *config.Config) *TemplateService {
return &TemplateService{cfg: cfg}
}
func (s *TemplateService) ListTemplates() ([]Template, error) {
files, err := os.ReadDir("templates")
if err != nil {
return nil, err
}
var list []Template
for _, f := range files {
if !f.IsDir() && filepath.Ext(f.Name()) == ".json" {
data, err := os.ReadFile(filepath.Join("templates", f.Name()))
if err != nil {
continue
}
var t Template
if err := json.Unmarshal(data, &t); err == nil {
if t.Name == "" {
t.Name = f.Name() // Fallback
}
list = append(list, t)
}
}
}
return list, nil
}
func (s *TemplateService) GetTemplate(name string) (*Template, error) {
path := filepath.Join("templates", name+".json")
data, err := os.ReadFile(path)
if err != nil {
return nil, err
}
var t Template
if err := json.Unmarshal(data, &t); err != nil {
return nil, err
}
return &t, nil
}