2026-04-13 14:36:54 +08:00
|
|
|
package main
|
2026-04-05 15:03:56 +08:00
|
|
|
|
|
|
|
|
import (
|
2026-04-13 15:21:54 +08:00
|
|
|
"context"
|
2026-04-05 15:03:56 +08:00
|
|
|
"log"
|
|
|
|
|
"net/http"
|
|
|
|
|
|
|
|
|
|
"github.com/gin-contrib/cors"
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
|
2026-04-13 14:36:54 +08:00
|
|
|
"knowledge-graph-backend/config"
|
2026-04-05 15:03:56 +08:00
|
|
|
"knowledge-graph-backend/handlers"
|
2026-04-13 15:21:54 +08:00
|
|
|
neo4jClient "knowledge-graph-backend/neo4j"
|
2026-04-05 15:03:56 +08:00
|
|
|
"knowledge-graph-backend/services"
|
|
|
|
|
)
|
|
|
|
|
|
2026-04-13 14:36:54 +08:00
|
|
|
func main() {
|
|
|
|
|
cfg, err := config.Load()
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatalf("Failed to load config: %v", err)
|
|
|
|
|
}
|
2026-04-05 15:03:56 +08:00
|
|
|
|
2026-04-13 15:21:54 +08:00
|
|
|
driver := neo4jClient.NewDriver(cfg.Neo4j)
|
|
|
|
|
defer driver.Close(context.Background())
|
|
|
|
|
|
|
|
|
|
graphService := services.NewNeo4jService(driver)
|
2026-04-05 15:03:56 +08:00
|
|
|
|
2026-04-13 15:21:54 +08:00
|
|
|
graphHandler := handlers.NewGraphHandler(graphService)
|
|
|
|
|
searchHandler := handlers.NewSearchHandler(graphService)
|
|
|
|
|
nodeHandler := handlers.NewNodeHandler(graphService)
|
2026-04-05 15:03:56 +08:00
|
|
|
|
|
|
|
|
router := gin.Default()
|
|
|
|
|
|
2026-04-13 14:36:54 +08:00
|
|
|
router.Use(cors.New(cfg.CORS.ToGinConfig()))
|
2026-04-05 15:03:56 +08:00
|
|
|
|
|
|
|
|
router.GET("/health", func(c *gin.Context) {
|
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
|
|
|
"status": "ok",
|
|
|
|
|
"message": "Knowledge Graph API is running",
|
|
|
|
|
"version": "1.0.0",
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
api := router.Group("/api")
|
|
|
|
|
{
|
|
|
|
|
api.GET("/graph", graphHandler.GetGraphData)
|
|
|
|
|
api.GET("/graph/stats", graphHandler.GetStats)
|
|
|
|
|
|
|
|
|
|
api.GET("/search", searchHandler.SearchNodes)
|
|
|
|
|
|
|
|
|
|
api.GET("/nodes/:id", nodeHandler.GetNodeByID)
|
|
|
|
|
api.GET("/nodes/:id/neighbors", nodeHandler.GetNeighbors)
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-13 14:36:54 +08:00
|
|
|
log.Println("Knowledge Graph API Server running on http://localhost:" + cfg.Server.Port)
|
|
|
|
|
log.Println("Data file loaded from: " + cfg.Data.FilePath)
|
2026-04-05 15:03:56 +08:00
|
|
|
log.Println("Available endpoints:")
|
|
|
|
|
log.Println(" GET /health - Health check")
|
|
|
|
|
log.Println(" GET /api/graph - Get all graph data")
|
|
|
|
|
log.Println(" GET /api/graph/stats - Get graph statistics")
|
|
|
|
|
log.Println(" GET /api/search?q=query - Search nodes")
|
|
|
|
|
log.Println(" GET /api/nodes/:id - Get node by ID")
|
|
|
|
|
log.Println(" GET /api/nodes/:id/neighbors - Get node neighbors")
|
|
|
|
|
|
2026-04-13 14:36:54 +08:00
|
|
|
if err := router.Run(":" + cfg.Server.Port); err != nil {
|
2026-04-05 15:03:56 +08:00
|
|
|
log.Fatalf("Failed to start server: %v", err)
|
|
|
|
|
}
|
|
|
|
|
}
|