Initial commot
Have got DB creation and migration working
This commit is contained in:
commit
4ecc12f035
14 changed files with 315 additions and 0 deletions
59
providers/db/provider.go
Normal file
59
providers/db/provider.go
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
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-crm/gen/sqlc/dbq"
|
||||
"lmika.dev/lmika/hugo-crm/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
|
||||
}
|
||||
21
providers/db/sites.go
Normal file
21
providers/db/sites.go
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"lmika.dev/lmika/hugo-crm/gen/sqlc/dbq"
|
||||
"lmika.dev/lmika/hugo-crm/models"
|
||||
)
|
||||
|
||||
func (db *DB) InsertSite(ctx context.Context, site *models.Site) error {
|
||||
id, err := db.q.NewSite(ctx, dbq.NewSiteParams{
|
||||
Name: site.Name,
|
||||
Url: site.URL,
|
||||
Theme: "default",
|
||||
Props: []byte("{}"),
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
site.ID = id
|
||||
return nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue