Files
lassistanoque/backend/internal/adapter/database/turso/db.go
T
2026-08-08 23:12:37 +02:00

70 lines
1.4 KiB
Go

package turso
import (
"database/sql"
"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/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 *sql.DB
}
func NewTursoDB(cfg *config.Config) (*TursoDB, error) {
db, err := sql.Open("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
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 NewTursoUserRepository(db.DB)
}
func (db *TursoDB) SettingsRepository() domain.SettingsRepository {
return NewTursoSettingsRepository(db.DB)
}
func (db *TursoDB) FileRepository() domain.FileRepository {
return NewTursoFileRepository(db.DB)
}