package db import ( "context" "errors" "github.com/golang-migrate/migrate/v4" _ "github.com/golang-migrate/migrate/v4/database/pgx/v5" "github.com/golang-migrate/migrate/v4/source/iofs" "github.com/jackc/pgx/v5/pgxpool" "lmika.dev/lmika/hugo-cms/gen/sqlc/dbq" "lmika.dev/lmika/hugo-cms/sql" "strings" ) type DB struct { url string pool *pgxpool.Pool q *dbq.Queries } func New(url string) (*DB, error) { pool, err := pgxpool.New(context.Background(), url) if err != nil { return nil, err } return &DB{ url: url, pool: pool, q: dbq.New(pool), }, nil } func (db *DB) Close() { db.pool.Close() } func (db *DB) Ping(ctx context.Context) error { return db.pool.Ping(ctx) } func (db *DB) Migrate(ctx context.Context) error { ms, err := iofs.New(sql.FS, "schema") if err != nil { return err } dbURL := "pgx5://" + strings.TrimPrefix(db.url, "postgres://") m, err := migrate.NewWithSourceInstance("iofs", ms, dbURL) if err != nil { return err } err = m.Up() if err != nil && !errors.Is(err, migrate.ErrNoChange) { return err } return nil }