| | """Neo4j client for graph database operations.""" |
| |
|
| | from neo4j import AsyncGraphDatabase |
| |
|
| | from app.core.config import settings |
| |
|
| |
|
| | class Neo4jClient: |
| | """Async Neo4j client for spatial and graph queries.""" |
| |
|
| | def __init__(self, uri: str, user: str, password: str): |
| | """Initialize Neo4j driver.""" |
| | self._driver = AsyncGraphDatabase.driver(uri, auth=(user, password)) |
| |
|
| | async def close(self) -> None: |
| | """Close the driver connection.""" |
| | await self._driver.close() |
| |
|
| | async def run_cypher( |
| | self, |
| | query: str, |
| | params: dict | None = None, |
| | ) -> list[dict]: |
| | """ |
| | Execute a Cypher query and return results. |
| | |
| | Args: |
| | query: Cypher query string |
| | params: Optional query parameters |
| | |
| | Returns: |
| | List of result records as dictionaries |
| | """ |
| | async with self._driver.session() as session: |
| | result = await session.run(query, params or {}) |
| | return await result.data() |
| |
|
| | async def verify_connectivity(self) -> bool: |
| | """Verify connection to Neo4j.""" |
| | try: |
| | await self._driver.verify_connectivity() |
| | return True |
| | except Exception: |
| | return False |
| |
|
| |
|
| | |
| | neo4j_client = Neo4jClient( |
| | settings.neo4j_uri, |
| | settings.neo4j_username, |
| | settings.neo4j_password, |
| | ) |
| |
|