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) UserReporitory() domain.UserRepository { return &TursoUserRepository{ DB: db.DB, } } func (db *TursoDB) SettingsReporitory() domain.SettingsRepository { return &TursoSettingsRepository{ DB: db.DB, } } 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 }