Files
knowledge-graph-agent/backend/cmd/server/main.go
T

105 lines
3.3 KiB
Go
Raw Normal View History

2026-04-13 14:36:54 +08:00
package main
2026-04-05 15:03:56 +08:00
import (
"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 16:16:39 +08:00
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
2026-04-05 15:03:56 +08:00
_ "knowledge-graph-backend/docs"
2026-04-15 15:19:39 +08:00
"knowledge-graph-backend/internal/config"
"knowledge-graph-backend/internal/handler"
neo4jClient "knowledge-graph-backend/internal/repository/neo4j"
"knowledge-graph-backend/internal/service"
2026-04-05 15:03:56 +08:00
)
2026-04-13 16:16:39 +08:00
// @title 知识图谱 API
// @version 1.0.0
// @description 知识图谱后端服务,提供图数据查询、节点搜索等功能
2026-04-13 16:24:25 +08:00
// @host localhost:3001
2026-04-13 16:16:39 +08:00
// @BasePath /
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
driver := neo4jClient.NewDriver(cfg.Neo4j)
defer driver.Close(context.Background())
2026-04-15 15:19:39 +08:00
graphService := service.NewNeo4jService(driver)
2026-04-05 15:03:56 +08:00
2026-04-15 15:19:39 +08:00
graphHandler := handler.NewGraphHandler(graphService)
searchHandler := handler.NewSearchHandler(graphService)
nodeHandler := handler.NewNodeHandler(graphService)
2026-04-05 15:03:56 +08:00
2026-04-15 14:24:39 +08:00
// 增删改处理器
2026-04-15 15:19:39 +08:00
nodeCRUDHandler := handler.NewNodeCRUDHandler(graphService)
edgeCRUDHandler := handler.NewEdgeCRUDHandler(graphService)
2026-04-15 14:24:39 +08:00
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
2026-04-13 16:16:39 +08:00
router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
// @Summary 健康检查
// @Description 检查服务是否正常运行
// @Produce json
// @Success 200 {object} map[string]string "成功"
// @Router /health [get]
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)
2026-04-15 14:52:33 +08:00
api.GET("/graph/simpleJson", graphHandler.GetSimpleGraphData)
2026-04-05 15:03:56 +08:00
api.GET("/search", searchHandler.SearchNodes)
2026-04-15 14:24:39 +08:00
// 节点查询路由
2026-04-05 15:03:56 +08:00
api.GET("/nodes/:id", nodeHandler.GetNodeByID)
api.GET("/nodes/:id/neighbors", nodeHandler.GetNeighbors)
2026-04-15 14:24:39 +08:00
// 节点增删改路由
api.POST("/nodes", nodeCRUDHandler.CreateNode)
api.PUT("/nodes/:id", nodeCRUDHandler.UpdateNode)
api.DELETE("/nodes/:id", nodeCRUDHandler.DeleteNode)
// 边增删改路由
api.POST("/edges", edgeCRUDHandler.CreateEdge)
api.DELETE("/edges/:id", edgeCRUDHandler.DeleteEdge)
2026-04-05 15:03:56 +08:00
}
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")
2026-04-15 14:52:33 +08:00
log.Println(" GET /api/graph/simpleJson - Get simplified graph data (for LLM)")
2026-04-05 15:03:56 +08:00
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-15 14:24:39 +08:00
log.Println(" POST /api/nodes - Create new node")
log.Println(" PUT /api/nodes/:id - Update node")
log.Println(" DELETE /api/nodes/:id - Delete node")
log.Println(" POST /api/edges - Create new edge")
log.Println(" DELETE /api/edges/:id - Delete edge")
2026-04-05 15:03:56 +08:00
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)
}
}