fix: 修复一系列问题并生成swagger一键脚本

This commit is contained in:
2026-04-28 13:36:48 +08:00
parent 10d5578a43
commit d939c2d5e1
10 changed files with 272 additions and 194 deletions
+21
View File
@@ -464,6 +464,27 @@ go run ./cmd/server
http://localhost:3001/swagger/index.html
```
### 9.4 生成 Swagger 文档
仓库根目录提供了两个脚本,方便重新生成 API 文档:
- Linux / WSL / macOS:`./gen_swagger.sh`
- Windows PowerShell:`./gen_swagger.ps1`
脚本会自动切换到 `backend/` 目录,并执行:
```bash
swag init -g ./cmd/server/main.go --parseDependency --parseInternal
```
生成产物位于 `backend/docs/` 下:
- `docs.go`
- `swagger.json`
- `swagger.yaml`
如果遇到 `cannot find type definition: model.GraphData` 之类的报错,通常是 handler 文件里缺少 `internal/model` 的显式导入。
---
## 十、当前实现特点
+1 -2
View File
@@ -10,7 +10,7 @@ import (
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
"knowledge-graph-backend/docs"
_ "knowledge-graph-backend/docs"
"knowledge-graph-backend/internal/config"
"knowledge-graph-backend/internal/handler"
neo4jClient "knowledge-graph-backend/internal/repository/neo4j"
@@ -45,7 +45,6 @@ func main() {
router.Use(cors.New(cfg.CORS.ToGinConfig()))
docs.SwaggerInfo.BasePath = "/"
router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
// @Summary 健康检查
+65 -63
View File
@@ -32,7 +32,7 @@ const docTemplate = `{
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/model.CreateEdgeRequest"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.CreateEdgeRequest"
}
}
],
@@ -40,31 +40,31 @@ const docTemplate = `{
"200": {
"description": "创建成功",
"schema": {
"$ref": "#/definitions/model.EdgeResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.EdgeResponse"
}
},
"400": {
"description": "请求错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"404": {
"description": "源节点或目标节点未找到",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"409": {
"description": "边已存在",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -90,19 +90,19 @@ const docTemplate = `{
"200": {
"description": "删除成功",
"schema": {
"$ref": "#/definitions/model.DeleteResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.DeleteResponse"
}
},
"404": {
"description": "边未找到",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -119,13 +119,13 @@ const docTemplate = `{
"200": {
"description": "成功",
"schema": {
"$ref": "#/definitions/model.GraphData"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.GraphData"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -142,13 +142,13 @@ const docTemplate = `{
"200": {
"description": "成功",
"schema": {
"$ref": "#/definitions/model.SimpleGraphData"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.SimpleGraphData"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -172,7 +172,7 @@ const docTemplate = `{
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -195,7 +195,7 @@ const docTemplate = `{
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/model.CreateNodeRequest"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.CreateNodeRequest"
}
}
],
@@ -203,25 +203,25 @@ const docTemplate = `{
"200": {
"description": "创建成功",
"schema": {
"$ref": "#/definitions/model.Node"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.Node"
}
},
"400": {
"description": "请求错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"409": {
"description": "节点已存在",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -247,25 +247,25 @@ const docTemplate = `{
"200": {
"description": "成功",
"schema": {
"$ref": "#/definitions/model.NodeResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.NodeResponse"
}
},
"400": {
"description": "请求错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"404": {
"description": "节点未找到",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -293,7 +293,7 @@ const docTemplate = `{
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/model.UpdateNodeRequest"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.UpdateNodeRequest"
}
}
],
@@ -301,25 +301,25 @@ const docTemplate = `{
"200": {
"description": "更新成功",
"schema": {
"$ref": "#/definitions/model.Node"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.Node"
}
},
"400": {
"description": "请求错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"404": {
"description": "节点未找到",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -343,19 +343,19 @@ const docTemplate = `{
"200": {
"description": "删除成功",
"schema": {
"$ref": "#/definitions/model.DeleteResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.DeleteResponse"
}
},
"404": {
"description": "节点未找到",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -381,25 +381,25 @@ const docTemplate = `{
"200": {
"description": "成功",
"schema": {
"$ref": "#/definitions/model.NeighborResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.NeighborResponse"
}
},
"400": {
"description": "请求错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"404": {
"description": "节点未找到",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -425,19 +425,19 @@ const docTemplate = `{
"200": {
"description": "成功",
"schema": {
"$ref": "#/definitions/model.SearchResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.SearchResponse"
}
},
"400": {
"description": "请求错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -445,7 +445,7 @@ const docTemplate = `{
}
},
"definitions": {
"model.CreateEdgeRequest": {
"knowledge-graph-backend_internal_model.CreateEdgeRequest": {
"type": "object",
"required": [
"id",
@@ -480,7 +480,7 @@ const docTemplate = `{
}
}
},
"model.CreateNodeRequest": {
"knowledge-graph-backend_internal_model.CreateNodeRequest": {
"type": "object",
"required": [
"id",
@@ -514,7 +514,7 @@ const docTemplate = `{
}
}
},
"model.DeleteResponse": {
"knowledge-graph-backend_internal_model.DeleteResponse": {
"type": "object",
"properties": {
"id": {
@@ -531,7 +531,7 @@ const docTemplate = `{
}
}
},
"model.Edge": {
"knowledge-graph-backend_internal_model.Edge": {
"type": "object",
"properties": {
"id": {
@@ -559,7 +559,7 @@ const docTemplate = `{
}
}
},
"model.EdgeResponse": {
"knowledge-graph-backend_internal_model.EdgeResponse": {
"type": "object",
"properties": {
"id": {
@@ -588,52 +588,54 @@ const docTemplate = `{
}
}
},
"model.ErrorResponse": {
"knowledge-graph-backend_internal_model.ErrorResponse": {
"type": "object",
"properties": {
"error": {
"type": "string"
"type": "string",
"example": "bad_request"
},
"message": {
"type": "string"
"type": "string",
"example": "invalid request"
}
}
},
"model.GraphData": {
"knowledge-graph-backend_internal_model.GraphData": {
"type": "object",
"properties": {
"edges": {
"type": "array",
"items": {
"$ref": "#/definitions/model.Edge"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.Edge"
}
},
"nodes": {
"type": "array",
"items": {
"$ref": "#/definitions/model.Node"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.Node"
}
}
}
},
"model.NeighborResponse": {
"knowledge-graph-backend_internal_model.NeighborResponse": {
"type": "object",
"properties": {
"edges": {
"type": "array",
"items": {
"$ref": "#/definitions/model.Edge"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.Edge"
}
},
"nodes": {
"type": "array",
"items": {
"$ref": "#/definitions/model.Node"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.Node"
}
}
}
},
"model.Node": {
"knowledge-graph-backend_internal_model.Node": {
"type": "object",
"properties": {
"id": {
@@ -661,7 +663,7 @@ const docTemplate = `{
}
}
},
"model.NodeResponse": {
"knowledge-graph-backend_internal_model.NodeResponse": {
"type": "object",
"properties": {
"id": {
@@ -673,7 +675,7 @@ const docTemplate = `{
"neighbors": {
"type": "array",
"items": {
"$ref": "#/definitions/model.Node"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.Node"
}
},
"properties": {
@@ -695,7 +697,7 @@ const docTemplate = `{
}
}
},
"model.SearchResponse": {
"knowledge-graph-backend_internal_model.SearchResponse": {
"type": "object",
"properties": {
"count": {
@@ -704,7 +706,7 @@ const docTemplate = `{
"nodes": {
"type": "array",
"items": {
"$ref": "#/definitions/model.Node"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.Node"
}
},
"query": {
@@ -712,7 +714,7 @@ const docTemplate = `{
}
}
},
"model.SimpleEdge": {
"knowledge-graph-backend_internal_model.SimpleEdge": {
"type": "object",
"properties": {
"label": {
@@ -733,24 +735,24 @@ const docTemplate = `{
}
}
},
"model.SimpleGraphData": {
"knowledge-graph-backend_internal_model.SimpleGraphData": {
"type": "object",
"properties": {
"edges": {
"type": "array",
"items": {
"$ref": "#/definitions/model.SimpleEdge"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.SimpleEdge"
}
},
"nodes": {
"type": "array",
"items": {
"$ref": "#/definitions/model.SimpleNode"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.SimpleNode"
}
}
}
},
"model.SimpleNode": {
"knowledge-graph-backend_internal_model.SimpleNode": {
"type": "object",
"properties": {
"id": {
@@ -767,7 +769,7 @@ const docTemplate = `{
}
}
},
"model.UpdateNodeRequest": {
"knowledge-graph-backend_internal_model.UpdateNodeRequest": {
"type": "object",
"properties": {
"label": {
+65 -63
View File
@@ -26,7 +26,7 @@
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/model.CreateEdgeRequest"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.CreateEdgeRequest"
}
}
],
@@ -34,31 +34,31 @@
"200": {
"description": "创建成功",
"schema": {
"$ref": "#/definitions/model.EdgeResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.EdgeResponse"
}
},
"400": {
"description": "请求错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"404": {
"description": "源节点或目标节点未找到",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"409": {
"description": "边已存在",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -84,19 +84,19 @@
"200": {
"description": "删除成功",
"schema": {
"$ref": "#/definitions/model.DeleteResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.DeleteResponse"
}
},
"404": {
"description": "边未找到",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -113,13 +113,13 @@
"200": {
"description": "成功",
"schema": {
"$ref": "#/definitions/model.GraphData"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.GraphData"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -136,13 +136,13 @@
"200": {
"description": "成功",
"schema": {
"$ref": "#/definitions/model.SimpleGraphData"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.SimpleGraphData"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -166,7 +166,7 @@
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -189,7 +189,7 @@
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/model.CreateNodeRequest"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.CreateNodeRequest"
}
}
],
@@ -197,25 +197,25 @@
"200": {
"description": "创建成功",
"schema": {
"$ref": "#/definitions/model.Node"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.Node"
}
},
"400": {
"description": "请求错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"409": {
"description": "节点已存在",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -241,25 +241,25 @@
"200": {
"description": "成功",
"schema": {
"$ref": "#/definitions/model.NodeResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.NodeResponse"
}
},
"400": {
"description": "请求错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"404": {
"description": "节点未找到",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -287,7 +287,7 @@
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/model.UpdateNodeRequest"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.UpdateNodeRequest"
}
}
],
@@ -295,25 +295,25 @@
"200": {
"description": "更新成功",
"schema": {
"$ref": "#/definitions/model.Node"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.Node"
}
},
"400": {
"description": "请求错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"404": {
"description": "节点未找到",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -337,19 +337,19 @@
"200": {
"description": "删除成功",
"schema": {
"$ref": "#/definitions/model.DeleteResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.DeleteResponse"
}
},
"404": {
"description": "节点未找到",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -375,25 +375,25 @@
"200": {
"description": "成功",
"schema": {
"$ref": "#/definitions/model.NeighborResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.NeighborResponse"
}
},
"400": {
"description": "请求错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"404": {
"description": "节点未找到",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -419,19 +419,19 @@
"200": {
"description": "成功",
"schema": {
"$ref": "#/definitions/model.SearchResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.SearchResponse"
}
},
"400": {
"description": "请求错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
},
"500": {
"description": "内部错误",
"schema": {
"$ref": "#/definitions/model.ErrorResponse"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.ErrorResponse"
}
}
}
@@ -439,7 +439,7 @@
}
},
"definitions": {
"model.CreateEdgeRequest": {
"knowledge-graph-backend_internal_model.CreateEdgeRequest": {
"type": "object",
"required": [
"id",
@@ -474,7 +474,7 @@
}
}
},
"model.CreateNodeRequest": {
"knowledge-graph-backend_internal_model.CreateNodeRequest": {
"type": "object",
"required": [
"id",
@@ -508,7 +508,7 @@
}
}
},
"model.DeleteResponse": {
"knowledge-graph-backend_internal_model.DeleteResponse": {
"type": "object",
"properties": {
"id": {
@@ -525,7 +525,7 @@
}
}
},
"model.Edge": {
"knowledge-graph-backend_internal_model.Edge": {
"type": "object",
"properties": {
"id": {
@@ -553,7 +553,7 @@
}
}
},
"model.EdgeResponse": {
"knowledge-graph-backend_internal_model.EdgeResponse": {
"type": "object",
"properties": {
"id": {
@@ -582,52 +582,54 @@
}
}
},
"model.ErrorResponse": {
"knowledge-graph-backend_internal_model.ErrorResponse": {
"type": "object",
"properties": {
"error": {
"type": "string"
"type": "string",
"example": "bad_request"
},
"message": {
"type": "string"
"type": "string",
"example": "invalid request"
}
}
},
"model.GraphData": {
"knowledge-graph-backend_internal_model.GraphData": {
"type": "object",
"properties": {
"edges": {
"type": "array",
"items": {
"$ref": "#/definitions/model.Edge"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.Edge"
}
},
"nodes": {
"type": "array",
"items": {
"$ref": "#/definitions/model.Node"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.Node"
}
}
}
},
"model.NeighborResponse": {
"knowledge-graph-backend_internal_model.NeighborResponse": {
"type": "object",
"properties": {
"edges": {
"type": "array",
"items": {
"$ref": "#/definitions/model.Edge"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.Edge"
}
},
"nodes": {
"type": "array",
"items": {
"$ref": "#/definitions/model.Node"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.Node"
}
}
}
},
"model.Node": {
"knowledge-graph-backend_internal_model.Node": {
"type": "object",
"properties": {
"id": {
@@ -655,7 +657,7 @@
}
}
},
"model.NodeResponse": {
"knowledge-graph-backend_internal_model.NodeResponse": {
"type": "object",
"properties": {
"id": {
@@ -667,7 +669,7 @@
"neighbors": {
"type": "array",
"items": {
"$ref": "#/definitions/model.Node"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.Node"
}
},
"properties": {
@@ -689,7 +691,7 @@
}
}
},
"model.SearchResponse": {
"knowledge-graph-backend_internal_model.SearchResponse": {
"type": "object",
"properties": {
"count": {
@@ -698,7 +700,7 @@
"nodes": {
"type": "array",
"items": {
"$ref": "#/definitions/model.Node"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.Node"
}
},
"query": {
@@ -706,7 +708,7 @@
}
}
},
"model.SimpleEdge": {
"knowledge-graph-backend_internal_model.SimpleEdge": {
"type": "object",
"properties": {
"label": {
@@ -727,24 +729,24 @@
}
}
},
"model.SimpleGraphData": {
"knowledge-graph-backend_internal_model.SimpleGraphData": {
"type": "object",
"properties": {
"edges": {
"type": "array",
"items": {
"$ref": "#/definitions/model.SimpleEdge"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.SimpleEdge"
}
},
"nodes": {
"type": "array",
"items": {
"$ref": "#/definitions/model.SimpleNode"
"$ref": "#/definitions/knowledge-graph-backend_internal_model.SimpleNode"
}
}
}
},
"model.SimpleNode": {
"knowledge-graph-backend_internal_model.SimpleNode": {
"type": "object",
"properties": {
"id": {
@@ -761,7 +763,7 @@
}
}
},
"model.UpdateNodeRequest": {
"knowledge-graph-backend_internal_model.UpdateNodeRequest": {
"type": "object",
"properties": {
"label": {
+63 -61
View File
@@ -1,6 +1,6 @@
basePath: /
definitions:
model.CreateEdgeRequest:
knowledge-graph-backend_internal_model.CreateEdgeRequest:
properties:
id:
example: edge_123
@@ -26,7 +26,7 @@ definitions:
- source
- target
type: object
model.CreateNodeRequest:
knowledge-graph-backend_internal_model.CreateNodeRequest:
properties:
id:
example: node_123
@@ -51,7 +51,7 @@ definitions:
- label
- type
type: object
model.DeleteResponse:
knowledge-graph-backend_internal_model.DeleteResponse:
properties:
id:
example: node_123
@@ -63,7 +63,7 @@ definitions:
example: true
type: boolean
type: object
model.Edge:
knowledge-graph-backend_internal_model.Edge:
properties:
id:
type: string
@@ -82,7 +82,7 @@ definitions:
type:
type: string
type: object
model.EdgeResponse:
knowledge-graph-backend_internal_model.EdgeResponse:
properties:
id:
example: edge_123
@@ -103,36 +103,38 @@ definitions:
example: CONTAINS
type: string
type: object
model.ErrorResponse:
knowledge-graph-backend_internal_model.ErrorResponse:
properties:
error:
example: bad_request
type: string
message:
example: invalid request
type: string
type: object
model.GraphData:
knowledge-graph-backend_internal_model.GraphData:
properties:
edges:
items:
$ref: '#/definitions/model.Edge'
$ref: '#/definitions/knowledge-graph-backend_internal_model.Edge'
type: array
nodes:
items:
$ref: '#/definitions/model.Node'
$ref: '#/definitions/knowledge-graph-backend_internal_model.Node'
type: array
type: object
model.NeighborResponse:
knowledge-graph-backend_internal_model.NeighborResponse:
properties:
edges:
items:
$ref: '#/definitions/model.Edge'
$ref: '#/definitions/knowledge-graph-backend_internal_model.Edge'
type: array
nodes:
items:
$ref: '#/definitions/model.Node'
$ref: '#/definitions/knowledge-graph-backend_internal_model.Node'
type: array
type: object
model.Node:
knowledge-graph-backend_internal_model.Node:
properties:
id:
type: string
@@ -151,7 +153,7 @@ definitions:
"y":
type: number
type: object
model.NodeResponse:
knowledge-graph-backend_internal_model.NodeResponse:
properties:
id:
type: string
@@ -159,7 +161,7 @@ definitions:
type: string
neighbors:
items:
$ref: '#/definitions/model.Node'
$ref: '#/definitions/knowledge-graph-backend_internal_model.Node'
type: array
properties:
additionalProperties: true
@@ -174,18 +176,18 @@ definitions:
"y":
type: number
type: object
model.SearchResponse:
knowledge-graph-backend_internal_model.SearchResponse:
properties:
count:
type: integer
nodes:
items:
$ref: '#/definitions/model.Node'
$ref: '#/definitions/knowledge-graph-backend_internal_model.Node'
type: array
query:
type: string
type: object
model.SimpleEdge:
knowledge-graph-backend_internal_model.SimpleEdge:
properties:
label:
example: 包含
@@ -200,18 +202,18 @@ definitions:
example: CONTAINS
type: string
type: object
model.SimpleGraphData:
knowledge-graph-backend_internal_model.SimpleGraphData:
properties:
edges:
items:
$ref: '#/definitions/model.SimpleEdge'
$ref: '#/definitions/knowledge-graph-backend_internal_model.SimpleEdge'
type: array
nodes:
items:
$ref: '#/definitions/model.SimpleNode'
$ref: '#/definitions/knowledge-graph-backend_internal_model.SimpleNode'
type: array
type: object
model.SimpleNode:
knowledge-graph-backend_internal_model.SimpleNode:
properties:
id:
example: "1"
@@ -223,7 +225,7 @@ definitions:
example: 概念
type: string
type: object
model.UpdateNodeRequest:
knowledge-graph-backend_internal_model.UpdateNodeRequest:
properties:
label:
example: 机器学习
@@ -259,30 +261,30 @@ paths:
name: request
required: true
schema:
$ref: '#/definitions/model.CreateEdgeRequest'
$ref: '#/definitions/knowledge-graph-backend_internal_model.CreateEdgeRequest'
produces:
- application/json
responses:
"200":
description: 创建成功
schema:
$ref: '#/definitions/model.EdgeResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.EdgeResponse'
"400":
description: 请求错误
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
"404":
description: 源节点或目标节点未找到
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
"409":
description: 边已存在
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
"500":
description: 内部错误
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
summary: 创建边
/api/edges/{id}:
delete:
@@ -299,15 +301,15 @@ paths:
"200":
description: 删除成功
schema:
$ref: '#/definitions/model.DeleteResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.DeleteResponse'
"404":
description: 边未找到
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
"500":
description: 内部错误
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
summary: 删除边
/api/graph:
get:
@@ -318,11 +320,11 @@ paths:
"200":
description: 成功
schema:
$ref: '#/definitions/model.GraphData'
$ref: '#/definitions/knowledge-graph-backend_internal_model.GraphData'
"500":
description: 内部错误
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
summary: 获取图数据
/api/graph/simpleJson:
get:
@@ -333,11 +335,11 @@ paths:
"200":
description: 成功
schema:
$ref: '#/definitions/model.SimpleGraphData'
$ref: '#/definitions/knowledge-graph-backend_internal_model.SimpleGraphData'
"500":
description: 内部错误
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
summary: 获取简化图数据
/api/graph/stats:
get:
@@ -353,7 +355,7 @@ paths:
"500":
description: 内部错误
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
summary: 获取图统计信息
/api/nodes:
post:
@@ -366,26 +368,26 @@ paths:
name: request
required: true
schema:
$ref: '#/definitions/model.CreateNodeRequest'
$ref: '#/definitions/knowledge-graph-backend_internal_model.CreateNodeRequest'
produces:
- application/json
responses:
"200":
description: 创建成功
schema:
$ref: '#/definitions/model.Node'
$ref: '#/definitions/knowledge-graph-backend_internal_model.Node'
"400":
description: 请求错误
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
"409":
description: 节点已存在
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
"500":
description: 内部错误
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
summary: 创建节点
/api/nodes/{id}:
delete:
@@ -402,15 +404,15 @@ paths:
"200":
description: 删除成功
schema:
$ref: '#/definitions/model.DeleteResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.DeleteResponse'
"404":
description: 节点未找到
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
"500":
description: 内部错误
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
summary: 删除节点
get:
description: 根据节点 ID 获取知识图谱中的节点详细信息
@@ -426,19 +428,19 @@ paths:
"200":
description: 成功
schema:
$ref: '#/definitions/model.NodeResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.NodeResponse'
"400":
description: 请求错误
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
"404":
description: 节点未找到
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
"500":
description: 内部错误
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
summary: 获取节点详情
put:
consumes:
@@ -455,26 +457,26 @@ paths:
name: request
required: true
schema:
$ref: '#/definitions/model.UpdateNodeRequest'
$ref: '#/definitions/knowledge-graph-backend_internal_model.UpdateNodeRequest'
produces:
- application/json
responses:
"200":
description: 更新成功
schema:
$ref: '#/definitions/model.Node'
$ref: '#/definitions/knowledge-graph-backend_internal_model.Node'
"400":
description: 请求错误
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
"404":
description: 节点未找到
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
"500":
description: 内部错误
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
summary: 更新节点
/api/nodes/{id}/neighbors:
get:
@@ -491,19 +493,19 @@ paths:
"200":
description: 成功
schema:
$ref: '#/definitions/model.NeighborResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.NeighborResponse'
"400":
description: 请求错误
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
"404":
description: 节点未找到
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
"500":
description: 内部错误
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
summary: 获取节点邻居
/api/search:
get:
@@ -520,14 +522,14 @@ paths:
"200":
description: 成功
schema:
$ref: '#/definitions/model.SearchResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.SearchResponse'
"400":
description: 请求错误
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
"500":
description: 内部错误
schema:
$ref: '#/definitions/model.ErrorResponse'
$ref: '#/definitions/knowledge-graph-backend_internal_model.ErrorResponse'
summary: 搜索节点
swagger: "2.0"
-5
View File
@@ -83,8 +83,3 @@ type SearchResponse struct {
Nodes []Node `json:"nodes"`
}
// ErrorResponse represents an error response
type ErrorResponse struct {
Error string `json:"error"`
Message string `json:"message"`
}
+31
View File
@@ -0,0 +1,31 @@
package service
import (
"context"
"github.com/neo4j/neo4j-go-driver/v5/neo4j"
"knowledge-graph-backend/internal/model"
)
func (s *Neo4jService) fetchNodeByID(id string) (model.Node, bool, error) {
ctx := context.Background()
result, err := neo4j.ExecuteQuery(ctx, s.driver,
`MATCH (n {id: $id}) RETURN n LIMIT 1`,
map[string]any{"id": id},
neo4j.EagerResultTransformer,
)
if err != nil {
return model.Node{}, false, err
}
if len(result.Records) == 0 {
return model.Node{}, false, nil
}
v, _ := result.Records[0].Get("n")
n, ok := v.(neo4j.Node)
if !ok {
return model.Node{}, false, nil
}
return neo4jNodeToModel(n), true, nil
}
+13
View File
@@ -0,0 +1,13 @@
package service
import "github.com/neo4j/neo4j-go-driver/v5/neo4j"
// Neo4jService provides graph operations backed by Neo4j.
type Neo4jService struct {
driver neo4j.DriverWithContext
}
// NewNeo4jService creates a new Neo4j-backed graph service.
func NewNeo4jService(driver neo4j.DriverWithContext) *Neo4jService {
return &Neo4jService{driver: driver}
}
+6
View File
@@ -0,0 +1,6 @@
$ErrorActionPreference = 'Stop'
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
Set-Location (Join-Path $ScriptDir 'backend')
swag init -g ./cmd/server/main.go --parseDependency --parseInternal
Executable
+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR/backend"
swag init -g ./cmd/server/main.go --parseDependency --parseInternal --output ./docs