2026-02-19 10:21:27 +00:00
|
|
|
package db
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"database/sql"
|
|
|
|
|
|
|
|
|
|
"github.com/Southclaws/fault"
|
2026-02-19 11:29:44 +00:00
|
|
|
"lmika.dev/lmika/weiro/providers/db/gen/sqlgen"
|
|
|
|
|
"lmika.dev/lmika/weiro/sql/schema"
|
2026-02-19 10:21:27 +00:00
|
|
|
migration "lmika.dev/pkg/litemigrate"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Provider struct {
|
|
|
|
|
drvr *sql.DB
|
2026-02-19 11:29:44 +00:00
|
|
|
queries *sqlgen.Queries
|
2026-02-19 10:21:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func New(dbFile string) (*Provider, error) {
|
|
|
|
|
drvr, err := sql.Open("sqlite", dbFile)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, fault.Wrap(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := migration.New(schema.FS, drvr).MigrateUp(context.Background()); err != nil {
|
|
|
|
|
return nil, fault.Wrap(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if _, err := drvr.Exec(`PRAGMA foreign_keys = 1;`); err != nil {
|
|
|
|
|
return nil, fault.Wrap(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return &Provider{
|
|
|
|
|
drvr: drvr,
|
2026-02-19 11:29:44 +00:00
|
|
|
queries: sqlgen.New(drvr),
|
2026-02-19 10:21:27 +00:00
|
|
|
}, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (db *Provider) Close() error {
|
|
|
|
|
return db.drvr.Close()
|
|
|
|
|
}
|