package graph import ( "github.com/neo4j/neo4j-go-driver/v5/neo4j" ) // NewCalculator creates a fully configured GraphCalculator with all dependencies func NewCalculator(driver neo4j.DriverWithContext, database string, config *Config) Calculator { if config == nil { config = DefaultConfig() } // Validate configuration if err := config.Validate(); err != nil { // Use defaults if validation fails config = DefaultConfig() } // Create session manager sessionManager := NewSessionManager(driver, database, config) // Create query templates queryTemplates := NewQueryTemplates() // Create node converter nodeConverter := NewNodeConverter() // Create traversal component traversal := NewTraversal(sessionManager, queryTemplates, nodeConverter, config) // Create path finder component pathFinder := NewPathFinder(sessionManager, queryTemplates, nodeConverter, config) // Create network analyzer component networkAnalyzer := NewNetworkAnalyzer(sessionManager, queryTemplates, config) // Create main calculator return NewGraphCalculator(config, traversal, pathFinder, networkAnalyzer) } // NewCalculatorWithDefaults creates a calculator with default configuration func NewCalculatorWithDefaults(driver neo4j.DriverWithContext, database string) Calculator { return NewCalculator(driver, database, DefaultConfig()) }