task_tracker/storage/database.go
2019-03-10 09:47:11 -04:00

78 lines
1.2 KiB
Go

package storage
import (
"database/sql"
_ "github.com/lib/pq"
"github.com/simon987/task_tracker/config"
"github.com/sirupsen/logrus"
"io/ioutil"
"os"
"sync"
)
type Database struct {
db *sql.DB
saveTaskStmt *sql.Stmt
workerCache map[int64]*Worker
assignMutex *sync.Mutex
}
func New() *Database {
d := Database{}
d.workerCache = make(map[int64]*Worker)
d.assignMutex = &sync.Mutex{}
d.init()
return &d
}
func (database *Database) init() {
db := database.getDB()
_, err := db.Exec(`SELECT * FROM project`)
if err != nil {
logrus.Info("Database first time setup")
database.Reset()
}
}
func (database *Database) Reset() {
file, err := os.Open("./schema.sql")
handleErr(err)
buffer, err := ioutil.ReadAll(file)
handleErr(err)
db := database.getDB()
_, err = db.Exec(string(buffer))
handleErr(err)
file.Close()
logrus.Info("Database has been reset")
}
func (database *Database) getDB() *sql.DB {
if database.db == nil {
db, err := sql.Open("postgres", config.Cfg.DbConnStr)
if err != nil {
logrus.Fatal(err)
}
db.SetMaxOpenConns(50)
database.db = db
} else {
err := database.db.Ping()
handleErr(err)
}
return database.db
}