feat: 增加对neo4j的增改查
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
|
||||
This is a knowledge graph visualization system with a Go backend providing REST APIs and a React frontend using AntV G6 for interactive graph rendering. The system stores graph data in Neo4j and provides nodes, edges, and relationship visualization.
|
||||
|
||||
## Architecture
|
||||
|
||||
### Backend (`/backend`)
|
||||
- **Entry point**: `main.go` - Sets up Gin router, initializes Neo4j connection, registers handlers
|
||||
- **Handlers** (`/handlers`): HTTP request handlers for `/api/graph`, `/api/search`, `/api/nodes/:id`, `/api/nodes/:id/neighbors`
|
||||
- **Services** (`/services`): Business logic layer. `Neo4jService` queries Neo4j and converts results to domain models
|
||||
- **Models** (`/models`): Domain models (`Node`, `Edge`, `GraphData`) and API response types
|
||||
- **Neo4j client** (`/neo4j`): Connection wrapper using `github.com/neo4j/neo4j-go-driver/v5`
|
||||
- **Config** (`/config`): Configuration loading from `.env` with CORS and server settings
|
||||
|
||||
**Important**: Neo4j connection config is in `backend/config/.env` which contains credentials. The service queries Neo4j by executing Cypher queries and converting results to JSON.
|
||||
|
||||
### Frontend (`/frontend`)
|
||||
- **React 19 + TypeScript + Vite** build system
|
||||
- **State management**: Zustand stores (`graphStore.ts`, `layoutStore.ts`)
|
||||
- **Graph visualization**: AntV G6 v5 for force-directed layout and interactive graphs
|
||||
- **Styling**: Tailwind CSS v4 + HeroUI components
|
||||
- **API client**: Axios (`services/graphApi.ts`)
|
||||
|
||||
**Key frontend components**:
|
||||
- `KnowledgeGraph.tsx` - Main page that wires up search, graph view, and node panel
|
||||
- `GraphView/index.tsx` - G6 graph rendering with node selection, highlighting
|
||||
- `NodePanel/index.tsx` - Sidebar showing selected node details
|
||||
- `SearchBar/index.tsx` - Search input with node autocomplete
|
||||
|
||||
## Common Commands
|
||||
|
||||
### Backend
|
||||
```bash
|
||||
cd backend
|
||||
go run main.go # Start dev server on :3001
|
||||
swag init -g main.go # Regenerate Swagger docs
|
||||
```
|
||||
|
||||
### Frontend
|
||||
```bash
|
||||
cd frontend
|
||||
npm run dev # Start dev server on :5173
|
||||
npm run build # Production build
|
||||
npm run lint # Lint code
|
||||
```
|
||||
|
||||
### API Endpoints
|
||||
- `GET /health` - Health check
|
||||
- `GET /api/graph` - Get all graph data (nodes + edges)
|
||||
- `GET /api/graph/stats` - Graph statistics
|
||||
- `GET /api/search?q=query` - Search nodes by label, ID, or type
|
||||
- `GET /api/nodes/:id` - Get node by ID
|
||||
- `GET /api/nodes/:id/neighbors` - Get node neighbors and related edges
|
||||
- `GET /swagger/*` - Swagger UI documentation
|
||||
|
||||
## Data Flow
|
||||
|
||||
1. Frontend fetches graph data via `/api/graph`
|
||||
2. Graph data is stored in `graphStore` (Zustand)
|
||||
3. `GraphView` renders with G6 force-directed layout
|
||||
4. Node clicks highlight connected nodes and trigger `NodePanel` updates
|
||||
5. Search queries `/api/search` and selects matching nodes
|
||||
|
||||
## Neo4j Queries
|
||||
|
||||
The backend uses these Cypher query patterns:
|
||||
- All nodes: `MATCH (n) RETURN n`
|
||||
- All edges: `MATCH (a)-[r]->(b) RETURN a.id AS source, b.id AS target, r`
|
||||
- Node by ID: `MATCH (n {id: $id}) RETURN n`
|
||||
- Search: `MATCH (n) WHERE toLower(n.label) CONTAINS toLower($query) OR ... RETURN n`
|
||||
- Neighbors: `MATCH ({id: $id})-[r]-(m) RETURN m, r, startNode(r).id AS source, endNode(r).id AS target`
|
||||
|
||||
## File Conventions
|
||||
|
||||
- Backend handlers follow `*_handler.go` naming
|
||||
- Swagger annotations in handlers with `@Summary`, `@Router`, etc.
|
||||
- Frontend types in `types/graph.ts` shared between components
|
||||
- Graph styling utilities in `utils/graphStyle.ts`
|
||||
Reference in New Issue
Block a user