Files
svg-templater/internal/database/svgpagedb.go
T

130 lines
2.7 KiB
Go

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 = ?;"
const UPDATEPAGESQL string = "UPDATE svgpage SET page = page - 1 WHERE page > ?;"
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
}
if err := movePages(id, page); err != nil {
return false, err
}
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
}
func movePages(id string, deletedPage int) error {
_, err := database.Exec(UPDATEPAGESQL, deletedPage)
return err
}