package database import ( "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) );` 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 = ?;" const EXISTSSVGSQL string = "SELECT COUNT(*) FROM svg WHERE id = ?;" func InsertSVG(data *svg.TemplateData) error { if _, err := database.Exec(INSERTSVGSQL, data.Id, data.Name); 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 ) if err := result.Scan(&id, &name); err != nil { return nil, err } pages, err := GetSVGPages(id) if err != nil { return nil, err } templates = append(templates, svg.TemplateData{Id: id, Name: name, Pages: pages}) } 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 if err := result.Scan(&id, &name); err != nil { return svg.TemplateData{}, err } pages, err := GetSVGPages(id) if err != nil { return svg.TemplateData{}, err } return svg.TemplateData{Id: id, Name: name, Pages: pages}, 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 DeleteAllSVGPages(id) } func RenameSvg(id string, name string) error { _, err := database.Exec(RENAMESVGSQL, name, id) if err != nil { return err } return nil } func Exists(id string) (bool, error) { res := database.QueryRow(EXISTSSVGSQL, id) var count int if err := res.Scan(&count); err != nil { return false, err } return count > 0, nil }