package database import ( "encoding/json" "log" "tomatentum.net/svg-templater/pkg/svg" ) const SVGTABLECREATE string = ` CREATE TABLE IF NOT EXISTS svg ( id varchar(16) PRIMARY KEY NOT NULL, name varchar(32), templatekeys longtext NOT NULL );` const INSERTSVGSQL string = "INSERT INTO svg VALUES (?, ?, ?);" const GETSPECIFICSVGSQL string = "SELECT * FROM svg WHERE id = ?;" const GETSVGSQL string = "SELECT * FROM svg;" const DELETESVGSQL string = "DELETE FROM svg WHERE id = ?;" const RENAMESVGSQL string = "UPDATE svg SET name = ? WHERE id = ?;" func InsertSVG(data *svg.TemplateData) error { json, err := json.Marshal(data.TemplateKeys) if err != nil { return err } if _, err := database.Exec(INSERTSVGSQL, data.Id, data.Name, string(json)); err != nil { return err } return nil } func GetSVG() ([]svg.TemplateData, error) { result, err := database.Query(GETSVGSQL) if err != nil { return nil, err } defer result.Close() templates := make([]svg.TemplateData, 0) for result.Next() { var ( id string name string keysjson []byte keys []string ) if err := result.Scan(&id, &name, &keysjson); err != nil { return nil, err } if err := json.Unmarshal(keysjson, &keys); err != nil { return nil, err } templates = append(templates, svg.TemplateData{Id: id, Name: name, TemplateKeys: keys}) } if err := result.Err(); err != nil { return nil, err } return templates, nil } func GetSpecificSVG(id string) (svg.TemplateData, error) { result := database.QueryRow(GETSPECIFICSVGSQL, id) var ( name string keysjson []byte keys []string ) if err := result.Scan(&id, &name, &keysjson); err != nil { return svg.TemplateData{}, err } if err := json.Unmarshal(keysjson, &keys); err != nil { return svg.TemplateData{}, err } return svg.TemplateData{Id: id, Name: name, TemplateKeys: keys}, nil } func DeleteSvg(id string) (bool, error) { res, err := database.Exec(DELETESVGSQL, id) if err != nil { return false, err } num, err := res.RowsAffected() if err != nil { return false, err } if num == 0 { return false, nil } return true, nil } func RenameSvg(id string, name string) error { res, err := database.Exec(RENAMESVGSQL, name, id) log.Println(id, name, res) if err != nil { return err } return nil }