Add init ddl

This commit is contained in:
2024-08-24 16:20:01 +02:00
parent 92dbe446e8
commit b799e1bbf7
4 changed files with 71 additions and 2 deletions

4
.gitignore vendored
View File

@@ -1,3 +1,5 @@
.env .env
main.log main.log
jysk.db *.db
*.db-shm
*.db-wal

4
db.ddl Normal file
View File

@@ -0,0 +1,4 @@
CREATE TABLE price (
price int NOT NULL,
date date default current_timestamp
)

54
db.go
View File

@@ -62,6 +62,60 @@ func (db *DB) Open() error {
return nil return nil
} }
func (db *DB) Init(ddl string) error {
if !db.Ready {
return fmt.Errorf("database not ready")
}
var rows map[string]struct{} = make(map[string]struct{})
var expected = map[string]struct{}{
"price": {},
}
res, err := db.readConn.Query("SELECT name FROM sqlite_master WHERE type='table';")
if err != nil {
Error.Printf("%++v", err)
return err
}
defer res.Close()
for res.Next() {
var name string
err := res.Scan(&name)
if err != nil {
Error.Printf("%++v", err)
return err
}
rows[name] = struct{}{}
}
var needsInit bool
for table := range expected {
if _, ok := rows[table]; !ok {
log.Printf("Table %s not found, initializing", table)
needsInit = true
break
}
}
if !needsInit {
log.Printf("Database already initialized")
return nil
}
_, err = db.writeConn.Exec(ddl)
if err != nil {
Error.Printf("%++v", err)
log.Printf("%#v", "Rolling back")
_, err2 := db.writeConn.Exec("ROLLBACK;")
if err2 != nil {
Error.Printf("Error rollingback! %++v", err)
}
return err
}
return nil
}
func (db *DB) Close() error { func (db *DB) Close() error {
err := db.writeConn.Close() err := db.writeConn.Close()
if err != nil { if err != nil {

View File

@@ -9,6 +9,7 @@ import (
"regexp" "regexp"
"strconv" "strconv"
"time" "time"
_ "embed"
"github.com/PuerkitoBio/goquery" "github.com/PuerkitoBio/goquery"
) )
@@ -38,6 +39,9 @@ var priceRegex = regexp.MustCompile(`\d+`)
const url = "https://jysk.hr/spavaca-soba/madraci/madraci-s-oprugama/madrac-s-oprugama-140x200-gold-s110-dreamzone" const url = "https://jysk.hr/spavaca-soba/madraci/madraci-s-oprugama/madrac-s-oprugama-140x200-gold-s110-dreamzone"
//go:embed db.ddl
var ddl string
func main() { func main() {
db := DB{path: "jysk.db"} db := DB{path: "jysk.db"}
err := db.Open() err := db.Open()
@@ -46,6 +50,11 @@ func main() {
return return
} }
defer db.Close() defer db.Close()
err = db.Init(ddl)
if err != nil {
Error.Fatalf("Error initializing database: %v", err)
return
}
price := Price{ price := Price{
Price: 100, Price: 100,