59 lines
997 B
Go
59 lines
997 B
Go
package data
|
|
|
|
import (
|
|
"database/sql"
|
|
"errors"
|
|
"log"
|
|
"path/filepath"
|
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
)
|
|
|
|
type (
|
|
Repository struct {
|
|
path string
|
|
conn *sql.DB
|
|
}
|
|
)
|
|
|
|
func New(path string) *Repository {
|
|
dbPath := filepath.Join(path, "system.db")
|
|
conn, err := sql.Open("sqlite3", dbPath)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
r := &Repository{
|
|
path: path,
|
|
conn: conn,
|
|
}
|
|
|
|
if err := r.check(); err != nil {
|
|
log.Fatalf("[PANIC] %s", err)
|
|
}
|
|
return r
|
|
}
|
|
|
|
func (r *Repository) Close() error {
|
|
return r.conn.Close()
|
|
}
|
|
|
|
func (r *Repository) check() error {
|
|
rows, err := r.conn.Query("SELECT value FROM system WHERE key = 'db.version'")
|
|
if err != nil {
|
|
m := new(migratorVersion1)
|
|
m.conn = r.conn
|
|
return m.create()
|
|
}
|
|
defer rows.Close()
|
|
var version string
|
|
if !rows.Next() {
|
|
return errors.New("no version found in the system database")
|
|
}
|
|
if err := rows.Scan(&version); err != nil {
|
|
return err
|
|
}
|
|
log.Printf("[INFO] database loaded with version %s", version)
|
|
return nil
|
|
}
|