package db import ( "context" "database/sql" "fmt" "log/slog" "time" _ "modernc.org/sqlite" ) type Adapter struct { db *sql.DB log *slog.Logger } func NewAdapter(dataSourceURL string) (*Adapter, error) { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() log := slog.Default().With("adapter", "db") pragmas := "cache=shared&mode=ro&_busy_timeout=3000&_journal_mode=WAL" db, err := sql.Open("sqlite", fmt.Sprintf("file:%s?%s", dataSourceURL, pragmas)) if err != nil { return nil, fmt.Errorf("connecion error: %w", err) } err = db.PingContext(ctx) if err != nil { return nil, fmt.Errorf("ping error: %w", err) } db.SetConnMaxIdleTime(10 * time.Second) return &Adapter{db: db, log: log}, nil }