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