graph-adapter.go raw
1 //go:build !(js && wasm)
2
3 package database
4
5 import (
6 "next.orly.dev/pkg/protocol/graph"
7 )
8
9 // GraphAdapter wraps a database instance and implements graph.GraphDatabase interface.
10 type GraphAdapter struct {
11 db *D
12 }
13
14 // NewGraphAdapter creates a new GraphAdapter wrapping the given database.
15 func NewGraphAdapter(db *D) *GraphAdapter {
16 return &GraphAdapter{db: db}
17 }
18
19 // TraversePubkeyPubkey implements graph.GraphDatabase.
20 // Uses the ppg/gpp materialized index for single-hop prefix scans.
21 func (a *GraphAdapter) TraversePubkeyPubkey(seedPubkey []byte, maxDepth int, direction string) (graph.GraphResultI, error) {
22 return a.db.TraversePubkeyPubkey(seedPubkey, maxDepth, direction)
23 }
24
25 // TraversePubkeyEvent implements graph.GraphDatabase.
26 func (a *GraphAdapter) TraversePubkeyEvent(seedPubkey []byte, maxDepth int, direction string) (graph.GraphResultI, error) {
27 return a.db.TraversePubkeyEvent(seedPubkey, maxDepth, direction)
28 }
29
30 // TraverseEventEvent implements graph.GraphDatabase.
31 func (a *GraphAdapter) TraverseEventEvent(seedEventID []byte, maxDepth int, direction string) (graph.GraphResultI, error) {
32 return a.db.TraverseEventEventFromPubkey(seedEventID, maxDepth, direction)
33 }
34
35 // TraversePubkeyPubkeyBaseline implements graph.GraphDatabase.
36 // Uses multi-hop NIP-01 queries (no ppg/gpp index) for benchmark comparison.
37 func (a *GraphAdapter) TraversePubkeyPubkeyBaseline(seedPubkey []byte, maxDepth int, direction string) (graph.GraphResultI, error) {
38 return a.db.TraversePubkeyPubkeyBaseline(seedPubkey, maxDepth, direction)
39 }
40
41 // Verify GraphAdapter implements graph.GraphDatabase
42 var _ graph.GraphDatabase = (*GraphAdapter)(nil)
43