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 }