Files
gun-manager-backend/sql/client.go
2025-07-29 12:14:57 -04:00

67 lines
1.1 KiB
Go

package sql
import (
"context"
"database/sql"
"errors"
sqlc "git.siteworxpro.com/gun-manager/sql/db"
"github.com/golang-migrate/migrate/v4"
"github.com/golang-migrate/migrate/v4/database/sqlite3"
_ "modernc.org/sqlite"
)
type Db struct {
db *sql.DB
created bool
Queries *sqlc.Queries
}
var dbConnection Db
func NewDb(file string) (*Db, error) {
if dbConnection.created {
return &dbConnection, nil
}
db, err := sql.Open("sqlite", file)
if err != nil {
return nil, err
}
dbConnection.db = db
dbConnection.created = true
_, err = dbConnection.db.Conn(context.Background())
if err != nil {
return nil, err
}
dbConnection.Queries = sqlc.New(db)
return &dbConnection, nil
}
func GetDb() *Db {
return &dbConnection
}
func (d *Db) Migrate() error {
i, err := sqlite3.WithInstance(dbConnection.db, &sqlite3.Config{})
if err != nil {
return err
}
m, err := migrate.NewWithDatabaseInstance("file://migrations", "sqlite3", i)
if err != nil {
return err
}
err = m.Up()
if err != nil && !errors.Is(err, migrate.ErrNoChange) {
return err
}
return nil
}