package database import ( "encoding/json" "tomatentum.net/svg-templater/pkg/svg" ) func AddPage(page svg.TemplatePage) { } func DeletePage(templateID string, page int) { } const SVGPAGETABLECREATE string = ` CREATE TABLE IF NOT EXISTS svgpage ( id varchar(16) NOT NULL, page int NOT NULL, templatekeys longtext NOT NULL, PRIMARY KEY (id, page) );` const INSERTSVGPAGESQL string = "INSERT INTO svgpage VALUES (?, ?, ?);" const GETSPECIFICSVGPAGESSQL string = "SELECT * FROM svgpage WHERE id = ?;" const DELETESVGPAGESQL string = "DELETE FROM svgpage WHERE id = ? AND page = ?;" const DELETEALLSVGPAGESQL string = "DELETE FROM svgpage WHERE id = ?;" const COUNTSVGPAGESQL string = "SELECT COUNT(*) FROM svgpage WHERE id = ?;" func InsertSVGPage(data *svg.TemplatePage) (int, error) { json, err := json.Marshal(data.TemplateKeys) if err != nil { return 0, err } count, err := GetPageCount(data.TemplateId) if err != nil { return 0, err } if _, err := database.Exec(INSERTSVGPAGESQL, data.TemplateId, count+1, string(json)); err != nil { return 0, err } return count + 1, nil } func GetSVGPages(id string) ([]svg.TemplatePage, error) { res, err := database.Query(GETSPECIFICSVGPAGESSQL, id) if err != nil { return nil, err } defer res.Close() pages := make([]svg.TemplatePage, 0) for res.Next() { var ( id string page int keysjson []byte keys []string ) if err := res.Scan(&id, &page, &keysjson); err != nil { return nil, err } if err := json.Unmarshal(keysjson, &keys); err != nil { return nil, err } pages = append(pages, svg.TemplatePage{TemplateId: id, Page: page, TemplateKeys: keys}) } return pages, nil } func DeleteSVGPage(id string, page int) (bool, error) { res, err := database.Exec(DELETESVGPAGESQL, id, page) 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 DeleteAllSVGPages(id string) (bool, error) { res, err := database.Exec(DELETEALLSVGPAGESQL, 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 GetPageCount(id string) (int, error) { res := database.QueryRow(COUNTSVGPAGESQL, id) var count int if err := res.Scan(&count); err != nil { return 0, err } return count, nil }