lockserver/db/helpers.go
Finn a26b9cc63e
All checks were successful
/ build-container (push) Successful in 8m14s
Show logs when editing a code
2024-11-24 16:08:06 -08:00

90 lines
2 KiB
Go

package db
import (
"context"
"database/sql"
"embed"
goose "github.com/pressly/goose/v3"
"github.com/sirupsen/logrus"
_ "modernc.org/sqlite"
"git.janky.solutions/finn/lockserver/config"
)
const sqliteParams = "?_pragma=foreign_keys(1)&_time_format=sqlite"
func Get() (*Queries, *sql.DB, error) {
db, err := sql.Open("sqlite", config.C.SqliteDatabase+sqliteParams)
if err != nil {
return nil, nil, err
}
return New(db), db, nil
}
//go:embed migrations
var migrations embed.FS
func Migrate() error {
logrus.WithField("dbfile", config.C.SqliteDatabase).Info("migrating database")
_, conn, err := Get()
if err != nil {
return err
}
defer conn.Close()
goose.SetBaseFS(migrations)
if err := goose.SetDialect("sqlite3"); err != nil {
return err
}
if err := goose.Up(conn, "migrations"); err != nil {
return err
}
return nil
}
func NullString(s string) sql.NullString {
return sql.NullString{Valid: s != "", String: s}
}
func NullInt64(i int64) sql.NullInt64 {
return sql.NullInt64{Valid: true, Int64: i}
}
type loggingDBTX struct {
Next DBTX
}
func (l loggingDBTX) ExecContext(ctx context.Context, query string, params ...interface{}) (sql.Result, error) {
logrus.WithFields(logrus.Fields{
"query": query,
"params": params,
}).Debug("ExecContext")
return l.Next.ExecContext(ctx, query, params...)
}
func (l loggingDBTX) PrepareContext(ctx context.Context, query string) (*sql.Stmt, error) {
logrus.WithFields(logrus.Fields{
"query": query,
}).Debug("PrepareContext")
return l.Next.PrepareContext(ctx, query)
}
func (l loggingDBTX) QueryContext(ctx context.Context, query string, params ...interface{}) (*sql.Rows, error) {
logrus.WithFields(logrus.Fields{
"query": query,
"params": params,
}).Debug("QueryContext")
return l.Next.QueryContext(ctx, query, params...)
}
func (l loggingDBTX) QueryRowContext(ctx context.Context, query string, params ...interface{}) *sql.Row {
logrus.WithFields(logrus.Fields{
"query": query,
"params": params,
}).Debug("QueryRowContext")
return l.Next.QueryRowContext(ctx, query, params...)
}