feat(template): add multiple page support to templates
build / Go-Build (push) Successful in 1m30s

This commit is contained in:
2026-05-27 22:02:11 +02:00
parent 2aab1bcdd2
commit ba2332ecb6
5 changed files with 76 additions and 36 deletions
+27 -20
View File
@@ -2,7 +2,6 @@ package actions
import (
"errors"
"io"
"log"
"maps"
"regexp"
@@ -18,29 +17,42 @@ type TemplateParameters struct {
Keys map[string]string
}
func Template(r *TemplateParameters) ([]byte, error) {
mapkeys := slices.Collect(maps.Keys(r.Keys))
ok, err := verifyTemplate(r.Id, mapkeys)
func Template(r *TemplateParameters) ([][]byte, error) {
data, err := database.GetSpecificSVG(r.Id)
if err != nil {
return nil, err
}
mapkeys := slices.Collect(maps.Keys(r.Keys))
ok, err := verifyTemplate(data, mapkeys)
if err != nil {
return nil, err
}
if !ok {
return nil, errors.New("Template does not exist.")
}
log.Printf("Replacing keys of %s template\n", r.Id)
reader, err := svg.Storage.Get(r.Id)
if err != nil {
return nil, err
pagesdata := make([][]byte, len(data.Pages))
for _, page := range data.Pages {
pagedata, err := GetPage(page.TemplateId, page.Page)
if err != nil {
return nil, err
}
replaceAll(&pagedata, r.Keys)
pagesdata[page.Page-1] = pagedata
log.Printf("Finished replacing keys of %s page %d\n", r.Id, page.Page)
}
defer reader.Close()
svgblob, err := io.ReadAll(reader)
if err != nil {
return nil, err
}
replaceAll(&svgblob, r.Keys)
log.Printf("Finished replacing keys of %s template\n", r.Id)
return svgblob, nil
return pagesdata, nil
}
func replaceAll(svgblob *[]byte, keys map[string]string) {
@@ -51,12 +63,7 @@ func replaceAll(svgblob *[]byte, keys map[string]string) {
}))
}
func verifyTemplate(id string, keys []string) (bool, error) {
data, err := database.GetSpecificSVG(id)
if err != nil {
return false, err
}
func verifyTemplate(data svg.TemplateData, keys []string) (bool, error) {
for _, key := range data.AllKeys() {
if !slices.Contains(keys, key) {
return false, nil