package database import ( "database/sql" "fmt" "net/url" "strings" _ "modernc.org/sqlite" ) type Engine struct { db *sql.DB } func connect(dbURL string) (*sql.DB, error) { dbU, err := url.Parse(dbURL) if err != nil { return nil, fmt.Errorf("failed to parse database URL: %w", err) } return sql.Open(dbU.Scheme, strings.TrimPrefix(dbURL, dbU.Scheme+":")) } func New(databaseURI string) (*Engine, error) { db, err := connect(databaseURI) if err != nil { return nil, fmt.Errorf("failed to connect to database: %w", err) } // TODO: try for several seconds before giving up if err := db.Ping(); err != nil { return nil, fmt.Errorf("failed to ping database: %w", err) } return &Engine{ db: db, }, nil }