// Package infra gère l'infrastructure (serveurs, containers, nginx). package infra import ( "database/sql" "fmt" "os" "path/filepath" _ "github.com/mattn/go-sqlite3" ) // DB représente la connexion à la base SQLite. type DB struct { *sql.DB } // Open ouvre ou crée la base de données SQLite. func Open(dbPath string) (*DB, error) { // Créer le répertoire si nécessaire dir := filepath.Dir(dbPath) if err := os.MkdirAll(dir, 0755); err != nil { return nil, fmt.Errorf("create db directory: %w", err) } // Ouvrir la connexion sqlDB, err := sql.Open("sqlite3", dbPath+"?_foreign_keys=on") if err != nil { return nil, fmt.Errorf("open database: %w", err) } // Tester la connexion if err := sqlDB.Ping(); err != nil { sqlDB.Close() return nil, fmt.Errorf("ping database: %w", err) } db := &DB{sqlDB} // Exécuter les migrations if err := db.Migrate(); err != nil { sqlDB.Close() return nil, fmt.Errorf("migrate database: %w", err) } return db, nil } // Close ferme la connexion. func (db *DB) Close() error { return db.DB.Close() }