39 lines
897 B
Go
39 lines
897 B
Go
package svgtemplate
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"printer.backend/internal/model"
|
|
)
|
|
|
|
// WriteMeta writes item metadata next to the SVG in OutputDir.
|
|
func WriteMeta(svgBasename string, spec model.ItemSpec, name string) (model.Item, error) {
|
|
if err := os.MkdirAll(OutputDir, 0o755); err != nil {
|
|
return model.Item{}, err
|
|
}
|
|
|
|
base := filepath.Base(filepath.Clean(svgBasename))
|
|
item := model.Item{
|
|
ID: uuid.NewString(),
|
|
Name: name,
|
|
Spec: spec,
|
|
SVGTemplate: base,
|
|
CreatedAt: time.Now().UTC(),
|
|
}
|
|
|
|
metaPath := filepath.Join(OutputDir, model.MetaFilename(base))
|
|
data, err := json.MarshalIndent(item, "", " ")
|
|
if err != nil {
|
|
return model.Item{}, err
|
|
}
|
|
if err := os.WriteFile(metaPath, data, 0o644); err != nil {
|
|
return model.Item{}, fmt.Errorf("write meta: %w", err)
|
|
}
|
|
return item, nil
|
|
}
|