70 lines
1.4 KiB
Go
70 lines
1.4 KiB
Go
package turso
|
|
|
|
import (
|
|
"embed"
|
|
"fmt"
|
|
|
|
"github.com/golang-migrate/migrate/v4"
|
|
"github.com/golang-migrate/migrate/v4/database/sqlite3"
|
|
"github.com/golang-migrate/migrate/v4/source/iofs"
|
|
"github.com/jmoiron/sqlx"
|
|
_ "github.com/mattn/go-sqlite3"
|
|
"trankilou.fr/lassistanoque/backend/internal/config"
|
|
"trankilou.fr/lassistanoque/backend/internal/domain"
|
|
_ "turso.tech/database/tursogo"
|
|
)
|
|
|
|
//go:embed migrations/*
|
|
var FS embed.FS
|
|
|
|
type TursoDB struct {
|
|
DB *sqlx.DB
|
|
}
|
|
|
|
func NewTursoDB(cfg *config.Config) (*TursoDB, error) {
|
|
db, err := sqlx.Connect("turso", cfg.DatabaseURL)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error connecting to db %: %s", cfg.DatabaseURL, err)
|
|
}
|
|
return &TursoDB{
|
|
DB: db,
|
|
}, nil
|
|
}
|
|
|
|
func (db *TursoDB) Close() {
|
|
db.DB.Close()
|
|
}
|
|
|
|
func (db *TursoDB) Migrate() error {
|
|
sqldb := db.DB.DB
|
|
dbDriver, err := sqlite3.WithInstance(sqldb, &sqlite3.Config{})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
sourceInstance, err := iofs.New(FS, "migrations")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
m, err := migrate.NewWithInstance("iofs", sourceInstance, "sqlite3", dbDriver)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
m.Up()
|
|
return nil
|
|
}
|
|
|
|
func (db *TursoDB) UserRepository() domain.UserRepository {
|
|
return &TursoUserRepository{DB: db.DB}
|
|
}
|
|
|
|
func (db *TursoDB) SettingsRepository() domain.SettingsRepository {
|
|
return &TursoSettingsRepository{DB: db.DB}
|
|
}
|
|
|
|
func (db *TursoDB) FileRepository() domain.FileRepository {
|
|
return &TursoFileRepository{DB: db.DB}
|
|
}
|