diff --git a/sqle/api/app.go b/sqle/api/app.go index 72db0dfd3..afbd1c8ee 100644 --- a/sqle/api/app.go +++ b/sqle/api/app.go @@ -445,6 +445,10 @@ func StartApi(net *gracenet.Net, exitChan chan struct{}, config *config.SqleOpti v1Router.GET("/rule_knowledge/db_types/:db_type/custom_rules/:rule_name/", v1.GetCustomRuleKnowledge) v1Router.GET("/workflows/statistic_of_instances", v1.GetWorkflowStatisticOfInstances) + // 知识库 Knowledge Base + v1Router.GET("/knowledge_bases", v1.GetKnowledgeBaseList) + v1Router.GET("/knowledge_bases/tags", v1.GetKnowledgeBaseTagList) + //rule v1Router.GET("/rules", v1.GetRules) v1Router.GET("/custom_rules", v1.GetCustomRules) diff --git a/sqle/api/controller/v1/knowledge_base.go b/sqle/api/controller/v1/knowledge_base.go new file mode 100644 index 000000000..559a6d4cd --- /dev/null +++ b/sqle/api/controller/v1/knowledge_base.go @@ -0,0 +1,64 @@ +package v1 + +import ( + "github.com/actiontech/sqle/sqle/api/controller" + "github.com/labstack/echo/v4" +) + +type GetKnowledgeBaseListReq struct { + KeyWords string `json:"keywords" query:"keywords" example:"keywords"` // 搜索内容 + Tags []string `json:"tags" query:"tags" example:"tag1"` // 搜索标签 + Limit uint32 `json:"limit" query:"limit" example:"10" validate:"required"` + Offset uint32 `json:"offset" query:"offset" example:"0"` +} + +type GetKnowledgeBaseListRes struct { + controller.BaseRes + Data []*KnowledgeBase `json:"data"` + TotalNums uint64 `json:"total_nums"` +} + +type KnowledgeBase struct { + ID uint `json:"id"` // 知识库ID + Title string `json:"title"` // 标题 + Description string `json:"description"` // 描述 + Content string `json:"content"` // 内容 + Tags []*Tag `json:"tags"` // 标签 +} + +type Tag struct { + ID uint `json:"id"` // 标签ID + Name string `json:"name"` // 标签名称 +} + +// GetKnowledgeBaseList +// @Summary 获取知识库列表 +// @Description get knowledge base list +// @Id getKnowledgeBaseList +// @Tags knowledge_base +// @Param keywords query string false "keywords" +// @Param tags query []string false "tags" +// @Security ApiKeyAuth +// @Success 200 {object} v1.GetKnowledgeBaseListRes +// @router /v1/knowledge_bases [get] +func GetKnowledgeBaseList(c echo.Context) error { + return getKnowledgeBaseList(c) +} + +type GetKnowledgeBaseTagListRes struct { + controller.BaseRes + TotalNums uint64 `json:"total_nums"` + Data []*Tag `json:"data"` +} + +// GetKnowledgeBaseTagList +// @Summary 获取知识库标签列表 +// @Description get tag list of knowledge base +// @Id getKnowledgeBaseTagList +// @Tags knowledge_base +// @Security ApiKeyAuth +// @Success 200 {object} v1.GetKnowledgeBaseTagListRes +// @router /v1/knowledge_bases/tags [get] +func GetKnowledgeBaseTagList(c echo.Context) error { + return getKnowledgeBaseTagList(c) +} diff --git a/sqle/api/controller/v1/knowledge_base_ce.go b/sqle/api/controller/v1/knowledge_base_ce.go new file mode 100644 index 000000000..33cb470d5 --- /dev/null +++ b/sqle/api/controller/v1/knowledge_base_ce.go @@ -0,0 +1,21 @@ +//go:build !enterprise +// +build !enterprise + +package v1 + +import ( + e "errors" + + "github.com/actiontech/sqle/sqle/errors" + "github.com/labstack/echo/v4" +) + +var ErrCommunityEditionDoesNotSupportKnowledgeBase = errors.New(errors.EnterpriseEditionFeatures, e.New("community edition does not support knowledge base")) + +func getKnowledgeBaseList(c echo.Context) error { + return ErrCommunityEditionDoesNotSupportKnowledgeBase +} + +func getKnowledgeBaseTagList(c echo.Context) error { + return ErrCommunityEditionDoesNotSupportKnowledgeBase +} diff --git a/sqle/docs/docs.go b/sqle/docs/docs.go index 08fdc5739..376a3305a 100644 --- a/sqle/docs/docs.go +++ b/sqle/docs/docs.go @@ -1369,6 +1369,69 @@ var doc = `{ } } }, + "/v1/knowledge_bases": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "get knowledge base list", + "tags": [ + "knowledge_base" + ], + "summary": "获取知识库列表", + "operationId": "getKnowledgeBaseList", + "parameters": [ + { + "type": "string", + "description": "keywords", + "name": "keywords", + "in": "query" + }, + { + "type": "array", + "items": { + "type": "string" + }, + "description": "tags", + "name": "tags", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1.GetKnowledgeBaseListRes" + } + } + } + } + }, + "/v1/knowledge_bases/tags": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "get tag list of knowledge base", + "tags": [ + "knowledge_base" + ], + "summary": "获取知识库标签列表", + "operationId": "getKnowledgeBaseTagList", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1.GetKnowledgeBaseTagListRes" + } + } + } + } + }, "/v1/operation_records": { "get": { "security": [ @@ -14496,6 +14559,50 @@ var doc = `{ } } }, + "v1.GetKnowledgeBaseListRes": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "example": 0 + }, + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.KnowledgeBase" + } + }, + "message": { + "type": "string", + "example": "ok" + }, + "total_nums": { + "type": "integer" + } + } + }, + "v1.GetKnowledgeBaseTagListRes": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "example": 0 + }, + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.Tag" + } + }, + "message": { + "type": "string", + "example": "ok" + }, + "total_nums": { + "type": "integer" + } + } + }, "v1.GetLicenseResV1": { "type": "object", "properties": { @@ -16197,6 +16304,34 @@ var doc = `{ } } }, + "v1.KnowledgeBase": { + "type": "object", + "properties": { + "content": { + "description": "内容", + "type": "string" + }, + "description": { + "description": "描述", + "type": "string" + }, + "id": { + "description": "知识库ID", + "type": "integer" + }, + "tags": { + "description": "标签", + "type": "array", + "items": { + "$ref": "#/definitions/v1.Tag" + } + }, + "title": { + "description": "标题", + "type": "string" + } + } + }, "v1.LicenseItem": { "type": "object", "properties": { @@ -17997,6 +18132,19 @@ var doc = `{ } } }, + "v1.Tag": { + "type": "object", + "properties": { + "id": { + "description": "标签ID", + "type": "integer" + }, + "name": { + "description": "标签名称", + "type": "string" + } + } + }, "v1.TargetReleaseInstance": { "type": "object", "properties": { diff --git a/sqle/docs/swagger.json b/sqle/docs/swagger.json index fec22cc6b..d07f4b656 100644 --- a/sqle/docs/swagger.json +++ b/sqle/docs/swagger.json @@ -1353,6 +1353,69 @@ } } }, + "/v1/knowledge_bases": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "get knowledge base list", + "tags": [ + "knowledge_base" + ], + "summary": "获取知识库列表", + "operationId": "getKnowledgeBaseList", + "parameters": [ + { + "type": "string", + "description": "keywords", + "name": "keywords", + "in": "query" + }, + { + "type": "array", + "items": { + "type": "string" + }, + "description": "tags", + "name": "tags", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1.GetKnowledgeBaseListRes" + } + } + } + } + }, + "/v1/knowledge_bases/tags": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "get tag list of knowledge base", + "tags": [ + "knowledge_base" + ], + "summary": "获取知识库标签列表", + "operationId": "getKnowledgeBaseTagList", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1.GetKnowledgeBaseTagListRes" + } + } + } + } + }, "/v1/operation_records": { "get": { "security": [ @@ -14480,6 +14543,50 @@ } } }, + "v1.GetKnowledgeBaseListRes": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "example": 0 + }, + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.KnowledgeBase" + } + }, + "message": { + "type": "string", + "example": "ok" + }, + "total_nums": { + "type": "integer" + } + } + }, + "v1.GetKnowledgeBaseTagListRes": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "example": 0 + }, + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/v1.Tag" + } + }, + "message": { + "type": "string", + "example": "ok" + }, + "total_nums": { + "type": "integer" + } + } + }, "v1.GetLicenseResV1": { "type": "object", "properties": { @@ -16181,6 +16288,34 @@ } } }, + "v1.KnowledgeBase": { + "type": "object", + "properties": { + "content": { + "description": "内容", + "type": "string" + }, + "description": { + "description": "描述", + "type": "string" + }, + "id": { + "description": "知识库ID", + "type": "integer" + }, + "tags": { + "description": "标签", + "type": "array", + "items": { + "$ref": "#/definitions/v1.Tag" + } + }, + "title": { + "description": "标题", + "type": "string" + } + } + }, "v1.LicenseItem": { "type": "object", "properties": { @@ -17981,6 +18116,19 @@ } } }, + "v1.Tag": { + "type": "object", + "properties": { + "id": { + "description": "标签ID", + "type": "integer" + }, + "name": { + "description": "标签名称", + "type": "string" + } + } + }, "v1.TargetReleaseInstance": { "type": "object", "properties": { diff --git a/sqle/docs/swagger.yaml b/sqle/docs/swagger.yaml index 68f7dbe16..24c4657b6 100644 --- a/sqle/docs/swagger.yaml +++ b/sqle/docs/swagger.yaml @@ -2067,6 +2067,36 @@ definitions: example: ok type: string type: object + v1.GetKnowledgeBaseListRes: + properties: + code: + example: 0 + type: integer + data: + items: + $ref: '#/definitions/v1.KnowledgeBase' + type: array + message: + example: ok + type: string + total_nums: + type: integer + type: object + v1.GetKnowledgeBaseTagListRes: + properties: + code: + example: 0 + type: integer + data: + items: + $ref: '#/definitions/v1.Tag' + type: array + message: + example: ok + type: string + total_nums: + type: integer + type: object v1.GetLicenseResV1: properties: code: @@ -3241,6 +3271,26 @@ definitions: $ref: '#/definitions/v1.InstanceTypePercent' type: array type: object + v1.KnowledgeBase: + properties: + content: + description: 内容 + type: string + description: + description: 描述 + type: string + id: + description: 知识库ID + type: integer + tags: + description: 标签 + items: + $ref: '#/definitions/v1.Tag' + type: array + title: + description: 标题 + type: string + type: object v1.LicenseItem: properties: description: @@ -4463,6 +4513,15 @@ definitions: $ref: '#/definitions/v1.TableMeta' type: array type: object + v1.Tag: + properties: + id: + description: 标签ID + type: integer + name: + description: 标签名称 + type: string + type: object v1.TargetReleaseInstance: properties: instance_id: @@ -7247,6 +7306,45 @@ paths: summary: 获取规则模板文件 tags: - rule_template + /v1/knowledge_bases: + get: + description: get knowledge base list + operationId: getKnowledgeBaseList + parameters: + - description: keywords + in: query + name: keywords + type: string + - description: tags + in: query + items: + type: string + name: tags + type: array + responses: + "200": + description: OK + schema: + $ref: '#/definitions/v1.GetKnowledgeBaseListRes' + security: + - ApiKeyAuth: [] + summary: 获取知识库列表 + tags: + - knowledge_base + /v1/knowledge_bases/tags: + get: + description: get tag list of knowledge base + operationId: getKnowledgeBaseTagList + responses: + "200": + description: OK + schema: + $ref: '#/definitions/v1.GetKnowledgeBaseTagListRes' + security: + - ApiKeyAuth: [] + summary: 获取知识库标签列表 + tags: + - knowledge_base /v1/operation_records: get: description: Get operation record list