Files
lassistanoque/backend/internal/adapter/database/turso/db.go
T
2026-08-07 19:20:16 +02:00

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}
}