package main import ( "database/sql" "fmt" "log/slog" _ "github.com/mattn/go-sqlite3" ) func initDB(config *Config) (*sql.DB, error) { db, err := sql.Open("sqlite3", config.Database.Path) if err != nil { return nil, fmt.Errorf("opening database: %w", err) } if err = db.Ping(); err != nil { return nil, fmt.Errorf("pinging database: %w", err) } // Enable WAL mode and foreign keys for SQLite. _, err = db.Exec("PRAGMA journal_mode=WAL") if err != nil { return nil, fmt.Errorf("setting journal mode: %w", err) } _, err = db.Exec("PRAGMA foreign_keys=ON") if err != nil { return nil, fmt.Errorf("enabling foreign keys: %w", err) } slog.Info("Database connected", "path", config.Database.Path) err = runMigrations(db) if err != nil { return nil, err } return db, nil }