chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,229 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http"
|
||||
|
||||
"github.com/hertz-contrib/sse"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/conversation/run"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/application/conversation"
|
||||
sseImpl "github.com/coze-dev/coze-studio/backend/infra/sse/impl/sse"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/errorx"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/lang/ptr"
|
||||
"github.com/coze-dev/coze-studio/backend/types/errno"
|
||||
)
|
||||
|
||||
// AgentRun .
|
||||
// @router /api/conversation/chat [POST]
|
||||
func AgentRun(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req run.AgentRunRequest
|
||||
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if checkErr := checkParams(ctx, &req); checkErr != nil {
|
||||
invalidParamRequestResponse(c, checkErr.Error())
|
||||
return
|
||||
}
|
||||
|
||||
sseSender := sseImpl.NewSSESender(sse.NewStream(c))
|
||||
c.SetStatusCode(http.StatusOK)
|
||||
c.Response.Header.Set("X-Accel-Buffering", "no")
|
||||
|
||||
err = conversation.ConversationSVC.Run(ctx, sseSender, &req)
|
||||
if err != nil {
|
||||
errData := run.ErrorData{
|
||||
Code: errno.ErrConversationAgentRunError,
|
||||
Msg: err.Error(),
|
||||
}
|
||||
ed, _ := json.Marshal(errData)
|
||||
_ = sseSender.Send(ctx, &sse.Event{
|
||||
Event: run.RunEventError,
|
||||
Data: ed,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func checkParams(_ context.Context, ar *run.AgentRunRequest) error {
|
||||
if ar.BotID == 0 {
|
||||
return errorx.New(errno.ErrConversationInvalidParamCode, errorx.KV("msg", "bot id is required"))
|
||||
}
|
||||
|
||||
if ar.Scene == nil {
|
||||
return errorx.New(errno.ErrConversationInvalidParamCode, errorx.KV("msg", "scene is required"))
|
||||
}
|
||||
|
||||
if ar.ContentType == nil {
|
||||
ar.ContentType = ptr.Of(run.ContentTypeText)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ChatV3 .
|
||||
// @router /v3/chat [POST]
|
||||
func ChatV3(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req run.ChatV3Request
|
||||
|
||||
// Pre-process parameters field: convert JSON object to string if needed
|
||||
if err = preprocessChatV3Parameters(c); err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
if checkErr := checkParamsV3(ctx, &req); checkErr != nil {
|
||||
invalidParamRequestResponse(c, checkErr.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.Stream != nil && !*req.Stream {
|
||||
|
||||
resp, err := conversation.ConversationOpenAPISVC.OpenapiAgentRunSync(ctx, &req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
return
|
||||
}
|
||||
|
||||
// Streaming mode (default)
|
||||
c.SetStatusCode(http.StatusOK)
|
||||
c.Response.Header.Set("X-Accel-Buffering", "no")
|
||||
sseSender := sseImpl.NewSSESender(sse.NewStream(c))
|
||||
err = conversation.ConversationOpenAPISVC.OpenapiAgentRun(ctx, sseSender, &req)
|
||||
if err != nil {
|
||||
errData := run.ErrorData{
|
||||
Code: errno.ErrConversationAgentRunError,
|
||||
Msg: err.Error(),
|
||||
}
|
||||
ed, _ := json.Marshal(errData)
|
||||
_ = sseSender.Send(ctx, &sse.Event{
|
||||
Event: run.RunEventError,
|
||||
Data: ed,
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func checkParamsV3(_ context.Context, ar *run.ChatV3Request) error {
|
||||
if ar.BotID == 0 {
|
||||
return errorx.New(errno.ErrConversationInvalidParamCode, errorx.KV("msg", "bot id is required"))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// CancelChatApi .
|
||||
// @router /v3/chat/cancel [POST]
|
||||
func CancelChatApi(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req run.CancelChatApiRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := conversation.ConversationOpenAPISVC.CancelRun(ctx, &req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// preprocessChatV3Parameters handles the conversion of parameters field from JSON object to string
|
||||
func preprocessChatV3Parameters(c *app.RequestContext) error {
|
||||
// Get the raw request body
|
||||
body := c.Request.Body()
|
||||
if len(body) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Parse the JSON body
|
||||
var requestData map[string]interface{}
|
||||
if err := json.Unmarshal(body, &requestData); err != nil {
|
||||
return nil // If it's not valid JSON, let BindAndValidate handle the error
|
||||
}
|
||||
|
||||
// Check if parameters field exists and is an object
|
||||
if parametersValue, exists := requestData["parameters"]; exists {
|
||||
// If parameters is already a string, no conversion needed
|
||||
if _, isString := parametersValue.(string); isString {
|
||||
return errors.New("parameters field should be an object, not a string")
|
||||
}
|
||||
|
||||
// If parameters is an object, convert it to JSON string
|
||||
if parametersObj, isObject := parametersValue.(map[string]interface{}); isObject {
|
||||
parametersJSON, err := json.Marshal(parametersObj)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
requestData["parameters"] = string(parametersJSON)
|
||||
|
||||
// Update the request body with the modified data
|
||||
modifiedBody, err := json.Marshal(requestData)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Replace the request body
|
||||
c.Request.SetBody(modifiedBody)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// RetrieveChatOpen .
|
||||
// @router /v3/chat/retrieve [GET]
|
||||
func RetrieveChatOpen(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req run.RetrieveChatOpenRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := conversation.ConversationOpenAPISVC.RetrieveRunRecord(ctx, &req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusInternalServerError, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/api/internal/httputil"
|
||||
)
|
||||
|
||||
func invalidParamRequestResponse(c *app.RequestContext, errMsg string) {
|
||||
httputil.BadRequest(c, errMsg)
|
||||
}
|
||||
|
||||
func internalServerErrorResponse(ctx context.Context, c *app.RequestContext, err error) {
|
||||
httputil.InternalError(ctx, c, err)
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
openapiauthApp "github.com/coze-dev/coze-studio/backend/application/openauth"
|
||||
"github.com/coze-dev/coze-studio/backend/application/plugin"
|
||||
"github.com/coze-dev/coze-studio/backend/application/singleagent"
|
||||
"github.com/coze-dev/coze-studio/backend/application/upload"
|
||||
"github.com/coze-dev/coze-studio/backend/bizpkg/config"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/app/bot_open_api"
|
||||
)
|
||||
|
||||
// OauthAuthorizationCode .
|
||||
// @router /api/oauth/authorization_code [GET]
|
||||
func OauthAuthorizationCode(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req bot_open_api.OauthAuthorizationCodeReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.Code == "" {
|
||||
invalidParamRequestResponse(c, "authorization failed, code is required")
|
||||
return
|
||||
}
|
||||
if req.State == "" {
|
||||
invalidParamRequestResponse(c, "state is required")
|
||||
return
|
||||
}
|
||||
|
||||
_, err = plugin.PluginApplicationSVC.OauthAuthorizationCode(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
host, err := config.Base().GetServerHost(ctx)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
redirectURL := fmt.Sprintf("%s/information/auth/success", host)
|
||||
c.Redirect(consts.StatusFound, []byte(redirectURL))
|
||||
c.Abort()
|
||||
}
|
||||
|
||||
// UploadFileOpen .
|
||||
// @router /v1/files/upload [POST]
|
||||
func UploadFileOpen(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req bot_open_api.UploadFileOpenRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(bot_open_api.UploadFileOpenResponse)
|
||||
resp, err = upload.SVC.UploadFileOpen(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetBotOnlineInfo .
|
||||
// @router /v1/bot/get_online_info [GET]
|
||||
func GetBotOnlineInfo(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req bot_open_api.GetBotOnlineInfoReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := singleagent.SingleAgentSVC.GetAgentOnlineInfo(ctx, &req)
|
||||
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ImpersonateCozeUser .
|
||||
// @router /api/permission_api/coze_web_app/impersonate_coze_user [POST]
|
||||
func ImpersonateCozeUser(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req bot_open_api.ImpersonateCozeUserRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := openapiauthApp.OpenAuthApplication.ImpersonateCozeUserAccessToken(ctx, &req)
|
||||
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// OpenGetBotInfo .
|
||||
// @router /v1/bots/:bot_id [GET]
|
||||
func OpenGetBotInfo(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req bot_open_api.OpenGetBotInfoRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := singleagent.SingleAgentSVC.OpenGetBotInfo(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
@@ -0,0 +1,292 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/cloudwego/eino/schema"
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/admin/config"
|
||||
bizConf "github.com/coze-dev/coze-studio/backend/bizpkg/config"
|
||||
"github.com/coze-dev/coze-studio/backend/bizpkg/config/modelmgr"
|
||||
"github.com/coze-dev/coze-studio/backend/bizpkg/llm/modelbuilder"
|
||||
"github.com/coze-dev/coze-studio/backend/infra/embedding/impl"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/lang/conv"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/lang/ptr"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/logs"
|
||||
)
|
||||
|
||||
// GetBasicConfiguration .
|
||||
// @router /api/admin/config/basic/get [GET]
|
||||
func GetBasicConfiguration(ctx context.Context, c *app.RequestContext) {
|
||||
baseConfig, err := bizConf.Base().GetBaseConfig(ctx)
|
||||
if err != nil {
|
||||
c.String(consts.StatusInternalServerError, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(config.GetBasicConfigurationResp)
|
||||
resp.Configuration = baseConfig
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// SaveBasicConfiguration .
|
||||
// @router /api/admin/config/basic/save [POST]
|
||||
func SaveBasicConfiguration(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req config.SaveBasicConfigurationReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.Configuration == nil {
|
||||
invalidParamRequestResponse(c, "Configuration is nil")
|
||||
return
|
||||
}
|
||||
|
||||
// TODO: check coze api token
|
||||
|
||||
// Validate ServerHost: allow http/https URLs, or hostname:port
|
||||
if req.Configuration.ServerHost == "" {
|
||||
invalidParamRequestResponse(c, "ServerHost is empty")
|
||||
return
|
||||
}
|
||||
|
||||
host := req.Configuration.ServerHost
|
||||
if strings.Contains(host, "://") {
|
||||
u, parseErr := url.Parse(host)
|
||||
if parseErr != nil || u.Host == "" || (u.Scheme != "http" && u.Scheme != "https") {
|
||||
invalidParamRequestResponse(c, "ServerHost is invalid URL, require http/https")
|
||||
return
|
||||
}
|
||||
} else {
|
||||
// Expect hostname:port format
|
||||
h, p, splitErr := net.SplitHostPort(host)
|
||||
if splitErr != nil || h == "" {
|
||||
invalidParamRequestResponse(c, "ServerHost must be hostname:port or http(s) URL")
|
||||
return
|
||||
}
|
||||
port, portErr := strconv.Atoi(p)
|
||||
if portErr != nil || port <= 0 || port > 65535 {
|
||||
invalidParamRequestResponse(c, "ServerHost port is invalid")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
logs.Infof("server host is valid %s", req.Configuration.ServerHost)
|
||||
|
||||
if req.Configuration.CodeRunnerType.String() == "<UNSET>" {
|
||||
invalidParamRequestResponse(c, "CodeRunnerType is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
err = bizConf.Base().SaveBaseConfig(ctx, req.Configuration)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, fmt.Errorf("save basic config failed: %w", err))
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(config.SaveBasicConfigurationResp)
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetKnowledgeConfig .
|
||||
// @router /api/admin/config/knowledge/get [GET]
|
||||
func GetKnowledgeConfig(ctx context.Context, c *app.RequestContext) {
|
||||
knowledgeConfig, err := bizConf.Knowledge().GetKnowledgeConfig(ctx)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, fmt.Errorf("get knowledge config failed: %w", err))
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(config.GetKnowledgeConfigResp)
|
||||
resp.KnowledgeConfig = knowledgeConfig
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdateKnowledgeConfig .
|
||||
// @router /api/admin/config/knowledge/save [POST]
|
||||
func UpdateKnowledgeConfig(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req config.UpdateKnowledgeConfigReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.KnowledgeConfig == nil {
|
||||
invalidParamRequestResponse(c, "KnowledgeConfig is nil")
|
||||
return
|
||||
}
|
||||
|
||||
if req.KnowledgeConfig.EmbeddingConfig == nil {
|
||||
invalidParamRequestResponse(c, "EmbeddingConfig is nil")
|
||||
return
|
||||
}
|
||||
|
||||
if req.KnowledgeConfig.EmbeddingConfig.Connection == nil {
|
||||
invalidParamRequestResponse(c, "Connection is nil")
|
||||
return
|
||||
}
|
||||
|
||||
if req.KnowledgeConfig.EmbeddingConfig.Connection.EmbeddingInfo == nil {
|
||||
invalidParamRequestResponse(c, "EmbeddingInfo is nil")
|
||||
return
|
||||
}
|
||||
|
||||
embedding, err := impl.GetEmbedding(ctx, req.KnowledgeConfig.EmbeddingConfig)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, fmt.Sprintf("get embedding failed: %v", err))
|
||||
return
|
||||
}
|
||||
|
||||
if req.KnowledgeConfig.EmbeddingConfig.Connection.EmbeddingInfo.Dims <= 0 {
|
||||
req.KnowledgeConfig.EmbeddingConfig.Connection.EmbeddingInfo.Dims = int32(embedding.Dimensions())
|
||||
|
||||
embedding, err = impl.GetEmbedding(ctx, req.KnowledgeConfig.EmbeddingConfig)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, fmt.Sprintf("get embedding failed: %v", err))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
denseEmbeddings, err := embedding.EmbedStrings(ctx, []string{"test"})
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, fmt.Sprintf("embed test string failed: %v", err))
|
||||
return
|
||||
}
|
||||
|
||||
if len(denseEmbeddings) == 0 {
|
||||
invalidParamRequestResponse(c, fmt.Sprintf("embed test string failed: %v", err))
|
||||
return
|
||||
}
|
||||
|
||||
logs.CtxDebugf(ctx, "embed test string result: %d, expect %d",
|
||||
len(denseEmbeddings[0]), req.KnowledgeConfig.EmbeddingConfig.Connection.EmbeddingInfo.Dims)
|
||||
if len(denseEmbeddings[0]) != int(req.KnowledgeConfig.EmbeddingConfig.Connection.EmbeddingInfo.Dims) {
|
||||
invalidParamRequestResponse(c, fmt.Sprintf("embed test string failed: dims not match, expect %d, got %d",
|
||||
req.KnowledgeConfig.EmbeddingConfig.Connection.EmbeddingInfo.Dims, len(denseEmbeddings[0])))
|
||||
return
|
||||
}
|
||||
|
||||
err = bizConf.Knowledge().SaveKnowledgeConfig(ctx, req.KnowledgeConfig)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, fmt.Errorf("save knowledge config failed: %w", err))
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(config.UpdateKnowledgeConfigResp)
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetModelList .
|
||||
// @router /api/admin/config/model/list [GET]
|
||||
func GetModelList(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req config.GetModelListReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
modelList, err := bizConf.ModelConf().GetProviderModelList(ctx)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, fmt.Errorf("get model list failed: %w", err))
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(config.GetModelListResp)
|
||||
resp.ProviderModelList = modelList
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// CreateModel .
|
||||
// @router /api/admin/config/model/create [POST]
|
||||
func CreateModel(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req config.CreateModelReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
modelBuilder, err := modelbuilder.NewModelBuilder(req.ModelClass, &config.Model{
|
||||
EnableBase64URL: req.EnableBase64URL,
|
||||
Connection: req.Connection,
|
||||
})
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, fmt.Sprintf("create model builder failed: %v", err))
|
||||
return
|
||||
}
|
||||
|
||||
logs.CtxDebugf(ctx, "create model req: %s, conn: %s", conv.DebugJsonToStr(req), conv.DebugJsonToStr(req.Connection.BaseConnInfo))
|
||||
|
||||
chatModel, err := modelBuilder.Build(ctx, &modelbuilder.LLMParams{EnableThinking: ptr.Of(false)})
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, fmt.Sprintf("build model failed: %v", err))
|
||||
return
|
||||
}
|
||||
|
||||
respMsgs, err := chatModel.Generate(ctx, []*schema.Message{
|
||||
schema.SystemMessage("Just answer with a number, no explanation."),
|
||||
schema.UserMessage("1+1=?"),
|
||||
})
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, fmt.Sprintf("generate model failed: %v", err))
|
||||
return
|
||||
}
|
||||
|
||||
logs.CtxDebugf(ctx, "chatModel.Generate resp : %s", conv.DebugJsonToStr(respMsgs))
|
||||
|
||||
id, err := bizConf.ModelConf().CreateModel(ctx, req.ModelClass, req.ModelName, req.Connection, &modelmgr.ModelExtra{
|
||||
EnableBase64URL: req.EnableBase64URL,
|
||||
})
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, fmt.Sprintf("create model failed: %v", err))
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(config.CreateModelResp)
|
||||
resp.ID = id
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DeleteModel .
|
||||
// @router /api/admin/config/model/delete [POST]
|
||||
func DeleteModel(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req config.DeleteModelReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
err = bizConf.ModelConf().DeleteModel(ctx, req.ID)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, fmt.Errorf("delete model failed: %w", err))
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(config.DeleteModelResp)
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
@@ -0,0 +1,231 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/conversation/conversation"
|
||||
application "github.com/coze-dev/coze-studio/backend/application/conversation"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/errorx"
|
||||
"github.com/coze-dev/coze-studio/backend/types/errno"
|
||||
)
|
||||
|
||||
// ClearConversationHistory .
|
||||
// @router /api/conversation/clear_message [POST]
|
||||
func ClearConversationHistory(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req conversation.ClearConversationHistoryRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if checkErr := checkCCHParams(ctx, &req); checkErr != nil {
|
||||
invalidParamRequestResponse(c, checkErr.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.ConversationSVC.ClearHistory(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
func checkCCHParams(_ context.Context, req *conversation.ClearConversationHistoryRequest) error {
|
||||
if req.ConversationID <= 0 {
|
||||
return errorx.New(errno.ErrConversationInvalidParamCode, errorx.KV("msg", "invalid conversation id"))
|
||||
}
|
||||
|
||||
if req.Scene == nil {
|
||||
return errorx.New(errno.ErrConversationInvalidParamCode, errorx.KV("msg", "scene is required"))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// ClearConversationCtx .
|
||||
// @router /api/conversation/create_section [POST]
|
||||
func ClearConversationCtx(ctx context.Context, c *app.RequestContext) {
|
||||
resp := new(conversation.ClearConversationCtxResponse)
|
||||
var err error
|
||||
var req conversation.ClearConversationCtxRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if checkErr := checkCCCParams(ctx, &req); checkErr != nil {
|
||||
invalidParamRequestResponse(c, checkErr.Error())
|
||||
return
|
||||
}
|
||||
|
||||
newSectionID, err := application.ConversationSVC.CreateSection(ctx, req.ConversationID)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
resp.NewSectionID = newSectionID
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
func checkCCCParams(ctx context.Context, req *conversation.ClearConversationCtxRequest) error {
|
||||
if req.ConversationID <= 0 {
|
||||
return errorx.New(errno.ErrConversationInvalidParamCode, errorx.KV("msg", "invalid conversation id"))
|
||||
}
|
||||
|
||||
if req.Scene == nil {
|
||||
return errorx.New(errno.ErrConversationInvalidParamCode, errorx.KV("msg", "scene is required"))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// CreateConversation .
|
||||
// @router /api/conversation/create [POST]
|
||||
func CreateConversation(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req conversation.CreateConversationRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.ConversationSVC.CreateConversation(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ClearConversationApi .
|
||||
// @router /v1/conversations/:conversation_id/clear [POST]
|
||||
func ClearConversationApi(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req conversation.ClearConversationApiRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(conversation.ClearConversationApiResponse)
|
||||
|
||||
sectionID, err := application.ConversationSVC.CreateSection(ctx, req.ConversationID)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
resp.Data = &conversation.Section{
|
||||
ID: sectionID,
|
||||
ConversationID: req.ConversationID,
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ListConversationsApi .
|
||||
// @router /v1/conversations [GET]
|
||||
func ListConversationsApi(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req conversation.ListConversationsApiRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.ConversationSVC.ListConversation(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdateConversationApi .
|
||||
// @router /v1/conversations/:conversation_id [PUT]
|
||||
func UpdateConversationApi(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req conversation.UpdateConversationApiRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.ConversationSVC.UpdateConversation(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DeleteConversationApi .
|
||||
// @router /v1/conversations/:conversation_id [DELETE]
|
||||
func DeleteConversationApi(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req conversation.DeleteConversationApiRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
resp, err := application.ConversationSVC.DeleteConversation(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// RetrieveConversationApi .
|
||||
// @router /v1/conversation/retrieve [GET]
|
||||
func RetrieveConversationApi(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req conversation.RetrieveConversationApiRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.ConversationSVC.RetrieveConversation(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
@@ -0,0 +1,412 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/data/database/table"
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/data/knowledge"
|
||||
"github.com/coze-dev/coze-studio/backend/application/memory"
|
||||
"github.com/coze-dev/coze-studio/backend/application/singleagent"
|
||||
)
|
||||
|
||||
// ListDatabase .
|
||||
// @router /api/memory/database/list [POST]
|
||||
func ListDatabase(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.ListDatabaseRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.DatabaseApplicationSVC.ListDatabase(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetDatabaseByID .
|
||||
// @router /api/memory/database/get_by_id [POST]
|
||||
func GetDatabaseByID(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.SingleDatabaseRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.DatabaseApplicationSVC.GetDatabaseByID(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// AddDatabase .
|
||||
// @router /api/memory/database/add [POST]
|
||||
func AddDatabase(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.AddDatabaseRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.DatabaseApplicationSVC.AddDatabase(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdateDatabase .
|
||||
// @router /api/memory/database/update [POST]
|
||||
func UpdateDatabase(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.UpdateDatabaseRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.DatabaseApplicationSVC.UpdateDatabase(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DeleteDatabase .
|
||||
// @router /api/memory/database/delete [POST]
|
||||
func DeleteDatabase(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.DeleteDatabaseRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.DatabaseApplicationSVC.DeleteDatabase(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// BindDatabase .
|
||||
// @router /api/memory/database/bind_to_bot [POST]
|
||||
func BindDatabase(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.BindDatabaseToBotRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := singleagent.SingleAgentSVC.BindDatabase(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UnBindDatabase .
|
||||
// @router /api/memory/database/unbind_to_bot [POST]
|
||||
func UnBindDatabase(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.BindDatabaseToBotRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := singleagent.SingleAgentSVC.UnBindDatabase(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ListDatabaseRecords .
|
||||
// @router /api/memory/database/list_records [POST]
|
||||
func ListDatabaseRecords(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.ListDatabaseRecordsRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.DatabaseApplicationSVC.ListDatabaseRecords(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdateDatabaseRecords .
|
||||
// @router /api/memory/database/update_records [POST]
|
||||
func UpdateDatabaseRecords(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.UpdateDatabaseRecordsRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.DatabaseApplicationSVC.UpdateDatabaseRecords(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetOnlineDatabaseId .
|
||||
// @router /api/memory/database/get_online_database_id [POST]
|
||||
func GetOnlineDatabaseId(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.GetOnlineDatabaseIdRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.DatabaseApplicationSVC.GetOnlineDatabaseId(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ResetBotTable .
|
||||
// @router /api/memory/database/table/reset [POST]
|
||||
func ResetBotTable(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.ResetBotTableRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.DatabaseApplicationSVC.ResetBotTable(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetDatabaseTemplate .
|
||||
// @router /api/memory/database/get_template [POST]
|
||||
func GetDatabaseTemplate(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.GetDatabaseTemplateRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.DatabaseApplicationSVC.GetDatabaseTemplate(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetConnectorName .
|
||||
// @router /api/memory/database/get_connector_name [POST]
|
||||
func GetConnectorName(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.GetSpaceConnectorListRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.DatabaseApplicationSVC.GetConnectorName(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetBotDatabase .
|
||||
// @router /api/memory/database/table/list_new [POST]
|
||||
func GetBotDatabase(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.GetBotTableRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.DatabaseApplicationSVC.GetBotDatabase(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdateDatabaseBotSwitch .
|
||||
// @router /api/memory/database/update_bot_switch [POST]
|
||||
func UpdateDatabaseBotSwitch(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.UpdateDatabaseBotSwitchRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := singleagent.SingleAgentSVC.UpdatePromptDisable(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetDatabaseTableSchema .
|
||||
// @router /api/memory/table_schema/get [POST]
|
||||
func GetDatabaseTableSchema(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.GetTableSchemaRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
var resp *knowledge.GetTableSchemaInfoResponse
|
||||
resp, err = memory.DatabaseApplicationSVC.GetDatabaseTableSchema(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// SubmitDatabaseInsertTask .
|
||||
// @router /api/memory/table_file/submit [POST]
|
||||
func SubmitDatabaseInsertTask(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.SubmitDatabaseInsertRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.DatabaseApplicationSVC.SubmitDatabaseInsertTask(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DatabaseFileProgressData .
|
||||
// @router /api/memory/table_file/get_progress [POST]
|
||||
func DatabaseFileProgressData(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.GetDatabaseFileProgressRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.DatabaseApplicationSVC.DatabaseFileProgressData(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ValidateDatabaseTableSchema .
|
||||
// @router /api/memory/table_schema/validate [POST]
|
||||
func ValidateDatabaseTableSchema(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req table.ValidateTableSchemaRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.DatabaseApplicationSVC.ValidateDatabaseTableSchema(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
@@ -0,0 +1,494 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/sha256"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"time"
|
||||
"unicode/utf8"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/app/developer_api"
|
||||
"github.com/coze-dev/coze-studio/backend/application/base/ctxutil"
|
||||
"github.com/coze-dev/coze-studio/backend/application/modelmgr"
|
||||
"github.com/coze-dev/coze-studio/backend/application/plugin"
|
||||
"github.com/coze-dev/coze-studio/backend/application/singleagent"
|
||||
application "github.com/coze-dev/coze-studio/backend/application/singleagent"
|
||||
"github.com/coze-dev/coze-studio/backend/application/upload"
|
||||
"github.com/coze-dev/coze-studio/backend/application/user"
|
||||
"github.com/coze-dev/coze-studio/backend/bizpkg/config"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/errorx"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/lang/ptr"
|
||||
"github.com/coze-dev/coze-studio/backend/types/errno"
|
||||
)
|
||||
|
||||
// DraftBotCreate .
|
||||
// @router /api/draftbot/create [POST]
|
||||
func DraftBotCreate(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req developer_api.DraftBotCreateRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.SpaceID <= 0 {
|
||||
invalidParamRequestResponse(c, "space id is not set")
|
||||
return
|
||||
}
|
||||
|
||||
if req.Name == "" {
|
||||
invalidParamRequestResponse(c, "name is nil")
|
||||
return
|
||||
}
|
||||
|
||||
if req.IconURI == "" {
|
||||
invalidParamRequestResponse(c, "icon uri is nil")
|
||||
return
|
||||
}
|
||||
|
||||
if utf8.RuneCountInString(req.Name) > 50 {
|
||||
invalidParamRequestResponse(c, "name is too long")
|
||||
return
|
||||
}
|
||||
|
||||
if utf8.RuneCountInString(req.Description) > 2000 {
|
||||
invalidParamRequestResponse(c, "description is too long")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.SingleAgentSVC.CreateSingleAgentDraft(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DeleteDraftBot .
|
||||
// @router /api/draftbot/delete [POST]
|
||||
func DeleteDraftBot(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req developer_api.DeleteDraftBotRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.SingleAgentSVC.DeleteAgentDraft(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdateDraftBotDisplayInfo .
|
||||
// @router /api/draftbot/update_display_info [POST]
|
||||
func UpdateDraftBotDisplayInfo(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req developer_api.UpdateDraftBotDisplayInfoRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.SingleAgentSVC.UpdateAgentDraftDisplayInfo(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DuplicateDraftBot .
|
||||
// @router /api/draftbot/duplicate [POST]
|
||||
func DuplicateDraftBot(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req developer_api.DuplicateDraftBotRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.SingleAgentSVC.DuplicateDraftBot(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetDraftBotDisplayInfo .
|
||||
// @router /api/draftbot/get_display_info [POST]
|
||||
func GetDraftBotDisplayInfo(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req developer_api.GetDraftBotDisplayInfoRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.SingleAgentSVC.GetAgentDraftDisplayInfo(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PublishDraftBot .
|
||||
// @router /api/draftbot/publish [POST]
|
||||
func PublishDraftBot(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req developer_api.PublishDraftBotRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if len(req.Connectors) == 0 {
|
||||
invalidParamRequestResponse(c, "connectors is nil")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.SingleAgentSVC.PublishAgent(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ListDraftBotHistory .
|
||||
// @router /api/draftbot/list_draft_history [POST]
|
||||
func ListDraftBotHistory(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req developer_api.ListDraftBotHistoryRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.BotID == 0 {
|
||||
invalidParamRequestResponse(c, "bot id is not set")
|
||||
return
|
||||
}
|
||||
|
||||
if req.PageIndex <= 0 {
|
||||
req.PageIndex = 1
|
||||
}
|
||||
|
||||
if req.PageSize <= 0 {
|
||||
req.PageSize = 30
|
||||
}
|
||||
|
||||
resp, err := application.SingleAgentSVC.ListAgentPublishHistory(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetIcon .
|
||||
// @router /api/developer/get_icon [POST]
|
||||
func GetIcon(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req developer_api.GetIconRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := upload.SVC.GetIcon(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetUploadAuthToken .
|
||||
// @router /api/playground/upload/auth_token [POST]
|
||||
func GetUploadAuthToken(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req developer_api.GetUploadAuthTokenRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.SingleAgentSVC.GetUploadAuthToken(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
func createSecret(uid int64, fileType string) string {
|
||||
num := 10
|
||||
input := fmt.Sprintf("upload_%d_Ma*9)fhi_%d_gou_%s_rand_%d", uid, time.Now().Unix(), fileType, rand.Intn(100000))
|
||||
// Do md5, take the first 20,//mapIntToBase62 map the number to Base62
|
||||
hash := sha256.Sum256([]byte(fmt.Sprintf("%s", input)))
|
||||
hashString := base64.StdEncoding.EncodeToString(hash[:])
|
||||
if len(hashString) > num {
|
||||
hashString = hashString[:num]
|
||||
}
|
||||
|
||||
result := ""
|
||||
for _, char := range hashString {
|
||||
index := int(char) % 62
|
||||
result += string(baseWord[index])
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// UploadFile .
|
||||
// @router /api/bot/upload_file [POST]
|
||||
func UploadFile(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req developer_api.UploadFileRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(developer_api.UploadFileResponse)
|
||||
fileContent, err := base64.StdEncoding.DecodeString(req.Data)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
userID := ctxutil.GetUIDFromCtx(ctx)
|
||||
if userID == nil {
|
||||
internalServerErrorResponse(ctx, c, errorx.New(errno.ErrUploadPermissionCode, errorx.KV("msg", "session required")))
|
||||
return
|
||||
}
|
||||
secret := createSecret(ptr.From(userID), req.FileHead.FileType)
|
||||
fileName := fmt.Sprintf("%d_%d_%s.%s", ptr.From(userID), time.Now().UnixNano(), secret, req.FileHead.FileType)
|
||||
objectName := fmt.Sprintf("%s/%s", req.FileHead.BizType.String(), fileName)
|
||||
resp, err = upload.SVC.UploadFile(ctx, fileContent, objectName)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
const baseWord = "1Aa2Bb3Cc4Dd5Ee6Ff7Gg8Hh9Ii0JjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"
|
||||
|
||||
// GetOnboarding .
|
||||
// @router /api/playground/get_onboarding [POST]
|
||||
func GetOnboarding(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req developer_api.GetOnboardingRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(developer_api.GetOnboardingResponse)
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PublishConnectorList .
|
||||
// @router /api/draftbot/publish/connector/list [POST]
|
||||
func PublishConnectorList(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req developer_api.PublishConnectorListRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.BotID == 0 {
|
||||
invalidParamRequestResponse(c, "bot id is not set")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := singleagent.SingleAgentSVC.GetPublishConnectorList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// CheckDraftBotCommit .
|
||||
// @router /api/draftbot/commit_check [POST]
|
||||
func CheckDraftBotCommit(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req developer_api.CheckDraftBotCommitRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
|
||||
}
|
||||
resp := new(developer_api.CheckDraftBotCommitResponse)
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdateUserProfileCheck .
|
||||
// @router /api/user/update_profile_check [POST]
|
||||
func UpdateUserProfileCheck(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req developer_api.UpdateUserProfileCheckRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := user.UserApplicationSVC.UpdateUserProfileCheck(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetTypeList .
|
||||
// @router /api/bot/get_type_list [POST]
|
||||
func GetTypeList(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req developer_api.GetTypeListRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := modelmgr.ModelmgrApplicationSVC.GetModelList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PluginOauthAuthorizationCode .
|
||||
// @router /api/plugin_oauth/:plugin_id/authorization_code [GET]
|
||||
func PluginOauthAuthorizationCode(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req developer_api.PluginOauthAuthorizationCodeReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.Code == "" {
|
||||
invalidParamRequestResponse(c, "authorization failed, code is required")
|
||||
return
|
||||
}
|
||||
if req.State == "" {
|
||||
invalidParamRequestResponse(c, "state is required")
|
||||
return
|
||||
}
|
||||
|
||||
confirmCode, err := plugin.PluginApplicationSVC.PluginOauthAuthorizationCode(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
host, err := config.Base().GetServerHost(ctx)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
redirectURL := fmt.Sprintf("%s/oauth/confirm?confirm_code=%s", host, confirmCode)
|
||||
c.Redirect(consts.StatusFound, []byte(redirectURL))
|
||||
c.Abort()
|
||||
}
|
||||
|
||||
// PluginOauthInfo .
|
||||
// @router /api/plugin/oauth/get_oauth_info [GET]
|
||||
func PluginOauthInfo(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req developer_api.PluginOauthInfoReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.PluginOauthInfo(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PluginOauthConfirm .
|
||||
// @router /api/plugin/oauth/confirm [POST]
|
||||
func PluginOauthConfirm(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req developer_api.PluginOauthConfirmReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.PluginOauthConfirm(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
@@ -0,0 +1,426 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/app/intelligence"
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/app/intelligence/common"
|
||||
project "github.com/coze-dev/coze-studio/backend/api/model/app/intelligence/project"
|
||||
publish "github.com/coze-dev/coze-studio/backend/api/model/app/intelligence/publish"
|
||||
task "github.com/coze-dev/coze-studio/backend/api/model/app/intelligence/task"
|
||||
appApplication "github.com/coze-dev/coze-studio/backend/application/app"
|
||||
"github.com/coze-dev/coze-studio/backend/application/search"
|
||||
)
|
||||
|
||||
// GetDraftIntelligenceList .
|
||||
// @router /api/intelligence_api/search/get_draft_intelligence_list [POST]
|
||||
func GetDraftIntelligenceList(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req intelligence.GetDraftIntelligenceListRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := search.SearchSVC.GetDraftIntelligenceList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetDraftIntelligenceInfo .
|
||||
// @router /api/intelligence_api/search/get_draft_intelligence_info [POST]
|
||||
func GetDraftIntelligenceInfo(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req intelligence.GetDraftIntelligenceInfoRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.IntelligenceID <= 0 {
|
||||
invalidParamRequestResponse(c, "invalid intelligence id")
|
||||
return
|
||||
}
|
||||
if req.IntelligenceType != common.IntelligenceType_Project {
|
||||
invalidParamRequestResponse(c, fmt.Sprintf("invalid intelligence type '%d'", req.IntelligenceType))
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := appApplication.APPApplicationSVC.GetDraftIntelligenceInfo(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetUserRecentlyEditIntelligence .
|
||||
// @router /api/intelligence_api/search/get_recently_edit_intelligence [POST]
|
||||
func GetUserRecentlyEditIntelligence(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req intelligence.GetUserRecentlyEditIntelligenceRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(intelligence.GetUserRecentlyEditIntelligenceResponse)
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DraftProjectCreate .
|
||||
// @router /api/intelligence_api/draft_project/create [POST]
|
||||
func DraftProjectCreate(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req project.DraftProjectCreateRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.SpaceID <= 0 {
|
||||
invalidParamRequestResponse(c, "invalid space id")
|
||||
return
|
||||
}
|
||||
if req.Name == "" || len(req.Name) > 256 {
|
||||
invalidParamRequestResponse(c, "invalid name")
|
||||
return
|
||||
}
|
||||
if req.IconURI == "" || len(req.IconURI) > 512 {
|
||||
invalidParamRequestResponse(c, "invalid icon uri")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := appApplication.APPApplicationSVC.DraftProjectCreate(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DraftProjectUpdate .
|
||||
// @router /api/intelligence_api/draft_project/update [POST]
|
||||
func DraftProjectUpdate(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req project.DraftProjectUpdateRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.ProjectID <= 0 {
|
||||
invalidParamRequestResponse(c, "invalid project id")
|
||||
return
|
||||
}
|
||||
if req.Name != nil && (len(*req.Name) == 0 || len(*req.Name) > 256) {
|
||||
invalidParamRequestResponse(c, "invalid name")
|
||||
return
|
||||
}
|
||||
if req.IconURI != nil && (len(*req.IconURI) == 0 || len(*req.IconURI) > 512) {
|
||||
invalidParamRequestResponse(c, "invalid icon uri")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := appApplication.APPApplicationSVC.DraftProjectUpdate(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DraftProjectDelete .
|
||||
// @router /api/intelligence_api/draft_project/delete [POST]
|
||||
func DraftProjectDelete(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req project.DraftProjectDeleteRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.ProjectID <= 0 {
|
||||
invalidParamRequestResponse(c, "invalid project id")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := appApplication.APPApplicationSVC.DraftProjectDelete(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetProjectPublishedConnector .
|
||||
// @router /api/intelligence_api/publish/get_published_connector [POST]
|
||||
func GetProjectPublishedConnector(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req publish.GetProjectPublishedConnectorRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(publish.GetProjectPublishedConnectorResponse)
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// CheckProjectVersionNumber .
|
||||
// @router /api/intelligence_api/publish/check_version_number [POST]
|
||||
func CheckProjectVersionNumber(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req publish.CheckProjectVersionNumberRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.ProjectID <= 0 {
|
||||
invalidParamRequestResponse(c, "invalid project id")
|
||||
return
|
||||
}
|
||||
if req.VersionNumber == "" {
|
||||
invalidParamRequestResponse(c, "invalid version number")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := appApplication.APPApplicationSVC.CheckProjectVersionNumber(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PublishProject .
|
||||
// @router /api/intelligence_api/publish/publish_project [POST]
|
||||
func PublishProject(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req publish.PublishProjectRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.ProjectID <= 0 {
|
||||
invalidParamRequestResponse(c, "invalid project id")
|
||||
return
|
||||
}
|
||||
if req.VersionNumber == "" {
|
||||
invalidParamRequestResponse(c, "invalid version number")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := appApplication.APPApplicationSVC.PublishAPP(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetPublishRecordList .
|
||||
// @router /api/intelligence_api/publish/publish_record_list [POST]
|
||||
func GetPublishRecordList(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req publish.GetPublishRecordListRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.ProjectID <= 0 {
|
||||
invalidParamRequestResponse(c, "invalid project id")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := appApplication.APPApplicationSVC.GetPublishRecordList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ProjectPublishConnectorList .
|
||||
// @router /api/intelligence_api/publish/connector_list [POST]
|
||||
func ProjectPublishConnectorList(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req publish.PublishConnectorListRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.ProjectID <= 0 {
|
||||
invalidParamRequestResponse(c, "invalid project id")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := appApplication.APPApplicationSVC.ProjectPublishConnectorList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetPublishRecordDetail .
|
||||
// @router /api/intelligence_api/publish/publish_record_detail [POST]
|
||||
func GetPublishRecordDetail(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req publish.GetPublishRecordDetailRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.ProjectID <= 0 {
|
||||
invalidParamRequestResponse(c, "invalid project id")
|
||||
return
|
||||
}
|
||||
if req.PublishRecordID != nil && *req.PublishRecordID <= 0 {
|
||||
invalidParamRequestResponse(c, "invalid publish record id")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := appApplication.APPApplicationSVC.GetPublishRecordDetail(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DraftProjectInnerTaskList .
|
||||
// @router /api/intelligence_api/draft_project/inner_task_list [POST]
|
||||
func DraftProjectInnerTaskList(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req task.DraftProjectInnerTaskListRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.ProjectID <= 0 {
|
||||
invalidParamRequestResponse(c, "invalid project id")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := appApplication.APPApplicationSVC.DraftProjectInnerTaskList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DraftProjectCopy .
|
||||
// @router /api/intelligence_api/draft_project/copy [POST]
|
||||
func DraftProjectCopy(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req project.DraftProjectCopyRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.ProjectID <= 0 {
|
||||
invalidParamRequestResponse(c, "invalid project id")
|
||||
return
|
||||
}
|
||||
if req.ToSpaceID <= 0 {
|
||||
invalidParamRequestResponse(c, "invalid to space id")
|
||||
return
|
||||
}
|
||||
if req.Name == "" || len(req.Name) > 256 {
|
||||
invalidParamRequestResponse(c, "invalid name")
|
||||
return
|
||||
}
|
||||
if req.IconURI == "" || len(req.IconURI) > 512 {
|
||||
invalidParamRequestResponse(c, "invalid icon uri")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := appApplication.APPApplicationSVC.DraftProjectCopy(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetOnlineAppData .
|
||||
// @router /v1/apps/:app_id [GET]
|
||||
func GetOnlineAppData(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req project.GetOnlineAppDataRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := appApplication.APPApplicationSVC.GetOnlineAppData(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
@@ -0,0 +1,770 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
|
||||
dataset "github.com/coze-dev/coze-studio/backend/api/model/data/knowledge"
|
||||
"github.com/coze-dev/coze-studio/backend/application/knowledge"
|
||||
application "github.com/coze-dev/coze-studio/backend/application/knowledge"
|
||||
"github.com/coze-dev/coze-studio/backend/application/memory"
|
||||
"github.com/coze-dev/coze-studio/backend/application/upload"
|
||||
)
|
||||
|
||||
// CreateDataset .
|
||||
// @router /api/knowledge/create [POST]
|
||||
func CreateDataset(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.CreateDatasetRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
resp := new(dataset.CreateDatasetResponse)
|
||||
resp, err = application.KnowledgeSVC.CreateKnowledge(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DatasetDetail .
|
||||
// @router /api/knowledge/detail [POST]
|
||||
func DatasetDetail(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.DatasetDetailRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
resp := new(dataset.DatasetDetailResponse)
|
||||
resp, err = application.KnowledgeSVC.DatasetDetail(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ListDataset .
|
||||
// @router /api/knowledge/list [POST]
|
||||
func ListDataset(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.ListDatasetRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.ListDatasetResponse)
|
||||
resp, err = application.KnowledgeSVC.ListKnowledge(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DeleteDataset .
|
||||
// @router /api/knowledge/delete [POST]
|
||||
func DeleteDataset(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.DeleteDatasetRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.DeleteDatasetResponse)
|
||||
resp, err = application.KnowledgeSVC.DeleteKnowledge(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdateDataset .
|
||||
// @router /api/knowledge/update [POST]
|
||||
func UpdateDataset(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.UpdateDatasetRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.UpdateDatasetResponse)
|
||||
resp, err = application.KnowledgeSVC.UpdateKnowledge(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// CreateDocument .
|
||||
// @router /api/knowledge/document/create [POST]
|
||||
func CreateDocument(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.CreateDocumentRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.CreateDocumentResponse)
|
||||
resp, err = application.KnowledgeSVC.CreateDocument(ctx, &req, false)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ListDocument .
|
||||
// @router /api/knowledge/document/list [POST]
|
||||
func ListDocument(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.ListDocumentRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.ListDocumentResponse)
|
||||
resp, err = application.KnowledgeSVC.ListDocument(ctx, &req, false)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DeleteDocument .
|
||||
// @router /api/knowledge/document/delete [POST]
|
||||
func DeleteDocument(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.DeleteDocumentRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.DeleteDocumentResponse)
|
||||
resp, err = application.KnowledgeSVC.DeleteDocument(ctx, &req, false)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdateDocument .
|
||||
// @router /api/knowledge/document/update [POST]
|
||||
func UpdateDocument(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.UpdateDocumentRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.UpdateDocumentResponse)
|
||||
resp, err = application.KnowledgeSVC.UpdateDocument(ctx, &req, false)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetDocumentProgress .
|
||||
// @router /api/knowledge/document/progress/get [POST]
|
||||
func GetDocumentProgress(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.GetDocumentProgressRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.GetDocumentProgressResponse)
|
||||
resp, err = application.KnowledgeSVC.GetDocumentProgress(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// Resegment .
|
||||
// @router /api/knowledge/document/resegment [POST]
|
||||
func Resegment(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.ResegmentRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.ResegmentResponse)
|
||||
resp, err = application.KnowledgeSVC.Resegment(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdatePhotoCaption .
|
||||
// @router /api/knowledge/photo/caption [POST]
|
||||
func UpdatePhotoCaption(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.UpdatePhotoCaptionRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.UpdatePhotoCaptionResponse)
|
||||
resp, err = application.KnowledgeSVC.UpdatePhotoCaption(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ListPhoto .
|
||||
// @router /api/knowledge/photo/list [POST]
|
||||
func ListPhoto(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.ListPhotoRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.ListPhotoResponse)
|
||||
resp, err = application.KnowledgeSVC.ListPhoto(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PhotoDetail .
|
||||
// @router /api/knowledge/photo/detail [POST]
|
||||
func PhotoDetail(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.PhotoDetailRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.PhotoDetailResponse)
|
||||
resp, err = application.KnowledgeSVC.PhotoDetail(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetTableSchema .
|
||||
// @router /api/knowledge/table_schema/get [POST]
|
||||
func GetTableSchema(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.GetTableSchemaRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.GetTableSchemaResponse)
|
||||
resp, err = application.KnowledgeSVC.GetTableSchema(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ValidateTableSchema .
|
||||
// @router /api/knowledge/table_schema/validate [POST]
|
||||
func ValidateTableSchema(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.ValidateTableSchemaRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.ValidateTableSchemaResponse)
|
||||
resp, err = application.KnowledgeSVC.ValidateTableSchema(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DeleteSlice .
|
||||
// @router /api/knowledge/slice/delete [POST]
|
||||
func DeleteSlice(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.DeleteSliceRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.DeleteSliceResponse)
|
||||
resp, err = application.KnowledgeSVC.DeleteSlice(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// CreateSlice .
|
||||
// @router /api/knowledge/slice/create [POST]
|
||||
func CreateSlice(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.CreateSliceRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.CreateSliceResponse)
|
||||
resp, err = application.KnowledgeSVC.CreateSlice(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdateSlice .
|
||||
// @router /api/knowledge/slice/update [POST]
|
||||
func UpdateSlice(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.UpdateSliceRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.UpdateSliceResponse)
|
||||
resp, err = application.KnowledgeSVC.UpdateSlice(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ListSlice .
|
||||
// @router /api/knowledge/slice/list [POST]
|
||||
func ListSlice(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.ListSliceRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.ListSliceResponse)
|
||||
resp, err = application.KnowledgeSVC.ListSlice(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// CreateDocumentReview .
|
||||
// @router /api/knowledge/review/create [POST]
|
||||
func CreateDocumentReview(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.CreateDocumentReviewRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.CreateDocumentReviewResponse)
|
||||
resp, err = application.KnowledgeSVC.CreateDocumentReview(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// MGetDocumentReview .
|
||||
// @router /api/knowledge/review/mget [POST]
|
||||
func MGetDocumentReview(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.MGetDocumentReviewRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.MGetDocumentReviewResponse)
|
||||
resp, err = application.KnowledgeSVC.MGetDocumentReview(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// SaveDocumentReview .
|
||||
// @router /api/knowledge/review/save [POST]
|
||||
func SaveDocumentReview(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.SaveDocumentReviewRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.SaveDocumentReviewResponse)
|
||||
resp, err = application.KnowledgeSVC.SaveDocumentReview(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetIconForDataset .
|
||||
// @router /api/knowledge/icon/get [POST]
|
||||
func GetIconForDataset(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.GetIconRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.GetIconResponse)
|
||||
resp, err = upload.SVC.GetIconForDataset(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ExtractPhotoCaption .
|
||||
// @router /api/knowledge/photo/extract_caption [POST]
|
||||
func ExtractPhotoCaption(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.ExtractPhotoCaptionRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.ExtractPhotoCaptionResponse)
|
||||
resp, err = application.KnowledgeSVC.ExtractPhotoCaption(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetDocumentTableInfo .
|
||||
// @router /api/memory/doc_table_info [GET]
|
||||
func GetDocumentTableInfo(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.GetDocumentTableInfoRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.GetDocumentTableInfoResponse)
|
||||
resp, err = knowledge.KnowledgeSVC.GetDocumentTableInfo(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetModeConfig .
|
||||
// @router /api/memory/table_mode_config [GET]
|
||||
func GetModeConfig(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.GetModeConfigRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.BotID == 0 {
|
||||
invalidParamRequestResponse(c, "bot_id is zero")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.DatabaseApplicationSVC.GetModeConfig(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// CreateDocumentOpenAPI .
|
||||
// @router /open_api/knowledge/document/create [POST]
|
||||
func CreateDocumentOpenAPI(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.CreateDocumentRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.CreateDocumentResponse)
|
||||
resp, err = application.KnowledgeSVC.CreateDocument(ctx, &req, true)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DeleteDocumentOpenAPI .
|
||||
// @router /open_api/knowledge/document/delete [POST]
|
||||
func DeleteDocumentOpenAPI(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.DeleteDocumentRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.DeleteDocumentResponse)
|
||||
resp, err = application.KnowledgeSVC.DeleteDocument(ctx, &req, true)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdateDocumentOpenAPI .
|
||||
// @router /open_api/knowledge/document/update [POST]
|
||||
func UpdateDocumentOpenAPI(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.UpdateDocumentRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.UpdateDocumentResponse)
|
||||
resp, err = application.KnowledgeSVC.UpdateDocument(ctx, &req, true)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ListDocumentOpenAPI .
|
||||
// @router /open_api/knowledge/document/list [POST]
|
||||
func ListDocumentOpenAPI(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.ListDocumentRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(dataset.ListDocumentResponse)
|
||||
resp, err = application.KnowledgeSVC.ListDocument(ctx, &req, true)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// CreateDatasetOpenAPI .
|
||||
// @router /v1/datasets [POST]
|
||||
func CreateDatasetOpenAPI(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.CreateDatasetOpenApiRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.KnowledgeSVC.CreateKnowledgeAPI(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ListDatasetOpenAPI .
|
||||
// @router /v1/datasets [GET]
|
||||
func ListDatasetOpenAPI(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.ListDatasetOpenApiRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.KnowledgeSVC.ListKnowledgeAPI(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdateDatasetOpenAPI .
|
||||
// @router /v1/datasets/:dataset_id [PUT]
|
||||
func UpdateDatasetOpenAPI(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.UpdateDatasetOpenApiRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.KnowledgeSVC.UpdateKnowledgeAPI(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DeleteDatasetOpenAPI .
|
||||
// @router /v1/datasets/:dataset_id [DELETE]
|
||||
func DeleteDatasetOpenAPI(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.DeleteDatasetOpenApiRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.KnowledgeSVC.DeleteKnowledgeAPI(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ListPhotoDocumentOpenAPI .
|
||||
// @router /v1/datasets/:dataset_id/images [GET]
|
||||
func ListPhotoDocumentOpenAPI(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.ListPhotoOpenApiRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.KnowledgeSVC.ListPhotoAPI(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetDocumentProgressOpenAPI .
|
||||
// @router /v1/datasets/:dataset_id/process [POST]
|
||||
func GetDocumentProgressOpenAPI(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req dataset.GetDocumentProgressOpenApiRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.KnowledgeSVC.GetDocumentProgressAPI(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
@@ -0,0 +1,229 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/data/variable/kvmemory"
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/data/variable/project_memory"
|
||||
appApplication "github.com/coze-dev/coze-studio/backend/application/app"
|
||||
"github.com/coze-dev/coze-studio/backend/application/memory"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/lang/conv"
|
||||
)
|
||||
|
||||
// GetSysVariableConf .
|
||||
// @router /api/memory/sys_variable_conf [GET]
|
||||
func GetSysVariableConf(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req kvmemory.GetSysVariableConfRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.VariableApplicationSVC.GetSysVariableConf(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetProjectVariableList .
|
||||
// @router /api/memory/project/variable/meta_list [GET]
|
||||
func GetProjectVariableList(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req project_memory.GetProjectVariableListReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.ProjectID == "" {
|
||||
invalidParamRequestResponse(c, "project_id is empty")
|
||||
return
|
||||
}
|
||||
|
||||
pID, err := conv.StrToInt64(req.ProjectID)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, "project_id is not int")
|
||||
return
|
||||
}
|
||||
|
||||
pInfo, err := appApplication.APPApplicationSVC.DomainSVC.GetDraftAPP(ctx, pID)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.VariableApplicationSVC.GetProjectVariablesMeta(ctx, pInfo.OwnerID, &req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdateProjectVariable .
|
||||
// @router /api/memory/project/variable/meta_update [POST]
|
||||
func UpdateProjectVariable(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req project_memory.UpdateProjectVariableReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.ProjectID == "" {
|
||||
invalidParamRequestResponse(c, "project_id is empty")
|
||||
return
|
||||
}
|
||||
|
||||
key2Var := make(map[string]*project_memory.Variable)
|
||||
for _, v := range req.VariableList {
|
||||
if v.Keyword == "" {
|
||||
invalidParamRequestResponse(c, "variable name is empty")
|
||||
return
|
||||
}
|
||||
|
||||
if key2Var[v.Keyword] != nil {
|
||||
invalidParamRequestResponse(c, "variable keyword is duplicate")
|
||||
return
|
||||
}
|
||||
|
||||
key2Var[v.Keyword] = v
|
||||
}
|
||||
|
||||
resp, err := memory.VariableApplicationSVC.UpdateProjectVariable(ctx, req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// SetKvMemory .
|
||||
// @router /api/memory/variable/upsert [POST]
|
||||
func SetKvMemory(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req kvmemory.SetKvMemoryReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.BotID == 0 && req.GetProjectID() == "" {
|
||||
invalidParamRequestResponse(c, "bot_id and project_id are both empty")
|
||||
return
|
||||
}
|
||||
|
||||
if len(req.Data) == 0 {
|
||||
invalidParamRequestResponse(c, "data is empty")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.VariableApplicationSVC.SetVariableInstance(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetMemoryVariableMeta .
|
||||
// @router /api/memory/variable/get_meta [POST]
|
||||
func GetMemoryVariableMeta(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req project_memory.GetMemoryVariableMetaReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.VariableApplicationSVC.GetVariableMeta(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DelProfileMemory .
|
||||
// @router /api/memory/variable/delete [POST]
|
||||
func DelProfileMemory(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req kvmemory.DelProfileMemoryRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.BotID == 0 && req.GetProjectID() == "" {
|
||||
invalidParamRequestResponse(c, "bot_id and project_id are both empty")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.VariableApplicationSVC.DeleteVariableInstance(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetPlayGroundMemory .
|
||||
// @router /api/memory/variable/get [POST]
|
||||
func GetPlayGroundMemory(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req kvmemory.GetProfileMemoryRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.BotID == 0 && req.GetProjectID() == "" {
|
||||
invalidParamRequestResponse(c, "bot_id and project_id are both empty")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := memory.VariableApplicationSVC.GetPlayGroundMemory(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
@@ -0,0 +1,170 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/conversation/message"
|
||||
application "github.com/coze-dev/coze-studio/backend/application/conversation"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/errorx"
|
||||
"github.com/coze-dev/coze-studio/backend/types/errno"
|
||||
)
|
||||
|
||||
// GetMessageList .
|
||||
// @router /api/conversation/get_message_list [POST]
|
||||
func GetMessageList(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req message.GetMessageListRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if checkErr := checkMLParams(ctx, &req); checkErr != nil {
|
||||
invalidParamRequestResponse(c, checkErr.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.ConversationSVC.GetMessageList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
func checkMLParams(ctx context.Context, req *message.GetMessageListRequest) error {
|
||||
if req.BotID == "" {
|
||||
return errorx.New(errno.ErrConversationInvalidParamCode, errorx.KV("msg", "agent id is required"))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeleteMessage .
|
||||
// @router /api/conversation/delete_message [POST]
|
||||
func DeleteMessage(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req message.DeleteMessageRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
if checkErr := checkDMParams(ctx, &req); checkErr != nil {
|
||||
invalidParamRequestResponse(c, checkErr.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.ConversationSVC.DeleteMessage(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
func checkDMParams(_ context.Context, req *message.DeleteMessageRequest) error {
|
||||
if req.MessageID <= 0 {
|
||||
return errorx.New(errno.ErrConversationInvalidParamCode, errorx.KV("msg", "message id is invalid"))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// BreakMessage .
|
||||
// @router /api/conversation/break_message [POST]
|
||||
func BreakMessage(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req message.BreakMessageRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if checkErr := checkBMParams(ctx, &req); checkErr != nil {
|
||||
invalidParamRequestResponse(c, checkErr.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.ConversationSVC.BreakMessage(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
func checkBMParams(_ context.Context, req *message.BreakMessageRequest) error {
|
||||
if req.AnswerMessageID == nil {
|
||||
return errors.New("answer message id is required")
|
||||
}
|
||||
if *req.AnswerMessageID <= 0 {
|
||||
return errorx.New(errno.ErrConversationInvalidParamCode, errorx.KV("msg", "answer message id is invalid"))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetApiMessageList .
|
||||
// @router /v1/conversation/message/list [POST]
|
||||
func GetApiMessageList(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req message.ListMessageApiRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.OpenapiMessageSVC.GetApiMessageList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ListChatMessageApi .
|
||||
// @router /v3/chat/message/list [GET]
|
||||
func ListChatMessageApi(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req message.ListChatMessageApiRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := application.ConversationOpenAPISVC.ListChatMessageApi(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"net/http"
|
||||
"testing"
|
||||
|
||||
"github.com/bytedance/sonic"
|
||||
"github.com/cloudwego/hertz/pkg/app/server"
|
||||
"github.com/cloudwego/hertz/pkg/common/ut"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/conversation/common"
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/conversation/message"
|
||||
"github.com/coze-dev/coze-studio/backend/application"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/lang/ptr"
|
||||
)
|
||||
|
||||
func TestGetMessageList(t *testing.T) {
|
||||
h := server.Default()
|
||||
err := application.Init(context.Background())
|
||||
|
||||
t.Logf("application init err: %v", err)
|
||||
|
||||
h.POST("/api/conversation/get_message_list", GetMessageList)
|
||||
req := &message.GetMessageListRequest{
|
||||
BotID: "7366055842027922437",
|
||||
Scene: ptr.Of(common.Scene_Playground),
|
||||
ConversationID: "7496795464885338112",
|
||||
Count: 10,
|
||||
Cursor: "1746534530268",
|
||||
}
|
||||
m, err := sonic.Marshal(req)
|
||||
assert.Nil(t, err)
|
||||
w := ut.PerformRequest(h.Engine, "POST", "/api/conversation/get_message_list", &ut.Body{Body: bytes.NewBuffer(m), Len: len(m)}, ut.Header{Key: "Content-Type", Value: "application/json"})
|
||||
res := w.Result()
|
||||
t.Logf("get message list: %s", res.Body())
|
||||
|
||||
assert.Equal(t, http.StatusInternalServerError, w.Code)
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/permission/openapiauth"
|
||||
openapiauthApp "github.com/coze-dev/coze-studio/backend/application/openauth"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/errorx"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/lang/ptr"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/logs"
|
||||
"github.com/coze-dev/coze-studio/backend/types/errno"
|
||||
)
|
||||
|
||||
// GetPersonalAccessTokenAndPermission .
|
||||
// @router /api/permission_api/pat/get_personal_access_token_and_permission [GET]
|
||||
func GetPersonalAccessTokenAndPermission(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req openapiauth.GetPersonalAccessTokenAndPermissionRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.ID == 0 {
|
||||
invalidParamRequestResponse(c, "id is required")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := openapiauthApp.OpenAuthApplication.GetPersonalAccessTokenAndPermission(ctx, &req)
|
||||
if err != nil {
|
||||
logs.CtxErrorf(ctx, "OpenAuthApplicationService.GetPersonalAccessTokenAndPermission failed, err=%v", err)
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DeletePersonalAccessTokenAndPermission .
|
||||
// @router /api/permission_api/pat/delete_personal_access_token_and_permission [POST]
|
||||
func DeletePersonalAccessTokenAndPermission(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req openapiauth.DeletePersonalAccessTokenAndPermissionRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.ID <= 0 {
|
||||
invalidParamRequestResponse(c, "id is required")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := openapiauthApp.OpenAuthApplication.DeletePersonalAccessTokenAndPermission(ctx, &req)
|
||||
if err != nil {
|
||||
logs.CtxErrorf(ctx, "OpenAuthApplication.DeletePersonalAccessTokenAndPermission failed, err=%v", err)
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ListPersonalAccessTokens .
|
||||
// @router /api/permission_api/pat/list_personal_access_tokens [GET]
|
||||
func ListPersonalAccessTokens(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req openapiauth.ListPersonalAccessTokensRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.Page == nil || *req.Page <= 0 {
|
||||
req.Page = ptr.Of(int64(1))
|
||||
}
|
||||
if req.Size == nil || *req.Size <= 0 {
|
||||
req.Size = ptr.Of(int64(10))
|
||||
}
|
||||
|
||||
resp, err := openapiauthApp.OpenAuthApplication.ListPersonalAccessTokens(ctx, &req)
|
||||
if err != nil {
|
||||
logs.CtxErrorf(ctx, "OpenAuthApplication.ListPersonalAccessTokens failed, err=%v", err)
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// CreatePersonalAccessTokenAndPermission .
|
||||
// @router /api/permission_api/pat/create_personal_access_token_and_permission [POST]
|
||||
func CreatePersonalAccessTokenAndPermission(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req openapiauth.CreatePersonalAccessTokenAndPermissionRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if err = checkCPATParams(ctx, &req); err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := openapiauthApp.OpenAuthApplication.CreatePersonalAccessToken(ctx, &req)
|
||||
if err != nil {
|
||||
logs.CtxErrorf(ctx, "OpenAuthApplicationService.CreatePersonalAccessToken failed, err=%v", err)
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// checkCPATParams Check parameters for creating personal access tokens
|
||||
func checkCPATParams(ctx context.Context, req *openapiauth.CreatePersonalAccessTokenAndPermissionRequest) error {
|
||||
|
||||
if req.Name == "" {
|
||||
return errorx.New(errno.ErrPermissionInvalidParamCode, errorx.KV("msg", "name is required"))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// UpdatePersonalAccessTokenAndPermission .
|
||||
// @router /api/permission_api/pat/update_personal_access_token_and_permission [POST]
|
||||
func UpdatePersonalAccessTokenAndPermission(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req openapiauth.UpdatePersonalAccessTokenAndPermissionRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := openapiauthApp.OpenAuthApplication.UpdatePersonalAccessTokenAndPermission(ctx, &req)
|
||||
if err != nil {
|
||||
logs.CtxErrorf(ctx, "OpenAuthApplication.UpdatePersonalAccessTokenAndPermission failed, err=%v", err)
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
@@ -0,0 +1,220 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/passport"
|
||||
"github.com/coze-dev/coze-studio/backend/application/user"
|
||||
"github.com/coze-dev/coze-studio/backend/domain/user/entity"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/hertzutil/domain"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/i18n"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/logs"
|
||||
"github.com/coze-dev/coze-studio/backend/types/consts"
|
||||
)
|
||||
|
||||
// PassportWebEmailRegisterV2Post .
|
||||
// @router /passport/web/email/register/v2/ [POST]
|
||||
func PassportWebEmailRegisterV2Post(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req passport.PassportWebEmailRegisterV2PostRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
locale := string(i18n.GetLocale(ctx))
|
||||
|
||||
resp, sessionKey, err := user.UserApplicationSVC.PassportWebEmailRegisterV2(ctx, locale, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.SetCookie(entity.SessionKey,
|
||||
sessionKey,
|
||||
consts.SessionMaxAgeSecond,
|
||||
"/", domain.GetOriginHost(c),
|
||||
protocol.CookieSameSiteDefaultMode,
|
||||
false, true)
|
||||
|
||||
c.JSON(http.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PassportWebLogoutGet .
|
||||
// @router /passport/web/logout/ [GET]
|
||||
func PassportWebLogoutGet(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req passport.PassportWebLogoutGetRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(http.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := user.UserApplicationSVC.PassportWebLogoutGet(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PassportWebEmailLoginPost .
|
||||
// @router /passport/web/email/login/ [POST]
|
||||
func PassportWebEmailLoginPost(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req passport.PassportWebEmailLoginPostRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(http.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, sessionKey, err := user.UserApplicationSVC.PassportWebEmailLoginPost(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
logs.Infof("[PassportWebEmailLoginPost] sessionKey: %s", sessionKey)
|
||||
|
||||
c.SetCookie(entity.SessionKey,
|
||||
sessionKey,
|
||||
consts.SessionMaxAgeSecond,
|
||||
"/", domain.GetOriginHost(c),
|
||||
protocol.CookieSameSiteDefaultMode,
|
||||
false, true)
|
||||
c.JSON(http.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PassportWebEmailPasswordResetGet .
|
||||
// @router /passport/web/email/password/reset/ [GET]
|
||||
func PassportWebEmailPasswordResetGet(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req passport.PassportWebEmailPasswordResetGetRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(http.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := user.UserApplicationSVC.PassportWebEmailPasswordResetGet(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PassportAccountInfoV2 .
|
||||
// @router /passport/account/info/v2/ [POST]
|
||||
func PassportAccountInfoV2(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req passport.PassportAccountInfoV2Request
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(http.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := user.UserApplicationSVC.PassportAccountInfoV2(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UserUpdateAvatar .
|
||||
// @router web/user/update/upload_avatar/ [POST]
|
||||
func UserUpdateAvatar(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req passport.UserUpdateAvatarRequest
|
||||
|
||||
// Get the uploaded file
|
||||
file, err := c.FormFile("avatar")
|
||||
if err != nil {
|
||||
logs.CtxErrorf(ctx, "Get Avatar Fail failed, err=%v", err)
|
||||
invalidParamRequestResponse(c, "missing avatar file")
|
||||
return
|
||||
}
|
||||
|
||||
// Check file type
|
||||
if !strings.HasPrefix(file.Header.Get("Content-Type"), "image/") {
|
||||
invalidParamRequestResponse(c, "invalid file type, only image allowed")
|
||||
return
|
||||
}
|
||||
|
||||
// Read file content
|
||||
src, err := file.Open()
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
defer src.Close()
|
||||
|
||||
fileContent, err := io.ReadAll(src)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
req.Avatar = fileContent
|
||||
mimeType := file.Header.Get("Content-Type")
|
||||
|
||||
resp, err := user.UserApplicationSVC.UserUpdateAvatar(ctx, mimeType, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UserUpdateProfile .
|
||||
// @router api/user/update_profile [POST]
|
||||
func UserUpdateProfile(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req passport.UserUpdateProfileRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(http.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := user.UserApplicationSVC.UserUpdateProfile(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, resp)
|
||||
}
|
||||
@@ -0,0 +1,373 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/playground"
|
||||
appApplication "github.com/coze-dev/coze-studio/backend/application/app"
|
||||
"github.com/coze-dev/coze-studio/backend/application/prompt"
|
||||
"github.com/coze-dev/coze-studio/backend/application/shortcutcmd"
|
||||
"github.com/coze-dev/coze-studio/backend/application/singleagent"
|
||||
"github.com/coze-dev/coze-studio/backend/application/upload"
|
||||
"github.com/coze-dev/coze-studio/backend/application/user"
|
||||
)
|
||||
|
||||
// UpdateDraftBotInfoAgw .
|
||||
// @router /api/playground_api/draftbot/update_draft_bot_info [POST]
|
||||
func UpdateDraftBotInfoAgw(ctx context.Context, c *app.RequestContext) {
|
||||
var req playground.UpdateDraftBotInfoAgwRequest
|
||||
err := c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.BotInfo == nil {
|
||||
invalidParamRequestResponse(c, "bot info is nil")
|
||||
return
|
||||
}
|
||||
|
||||
if req.BotInfo.BotId == nil {
|
||||
invalidParamRequestResponse(c, "bot id is nil")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := singleagent.SingleAgentSVC.UpdateSingleAgentDraft(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetDraftBotInfoAgw .
|
||||
// @router /api/playground_api/draftbot/get_draft_bot_info [POST]
|
||||
func GetDraftBotInfoAgw(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req playground.GetDraftBotInfoAgwRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.BotID == 0 {
|
||||
invalidParamRequestResponse(c, "bot id is nil")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := singleagent.SingleAgentSVC.GetAgentBotInfo(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetOfficialPromptResourceList .
|
||||
// @router /api/playground_api/get_official_prompt_list [POST]
|
||||
func GetOfficialPromptResourceList(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req playground.GetOfficialPromptResourceListRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := prompt.PromptSVC.GetOfficialPromptResourceList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetPromptResourceInfo .
|
||||
// @router /api/playground_api/get_prompt_resource_info [GET]
|
||||
func GetPromptResourceInfo(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req playground.GetPromptResourceInfoRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := prompt.PromptSVC.GetPromptResourceInfo(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpsertPromptResource .
|
||||
// @router /api/playground_api/upsert_prompt_resource [POST]
|
||||
func UpsertPromptResource(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req playground.UpsertPromptResourceRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.Prompt == nil {
|
||||
invalidParamRequestResponse(c, "prompt is nil")
|
||||
return
|
||||
}
|
||||
|
||||
if req.Prompt.GetSpaceID() <= 0 {
|
||||
invalidParamRequestResponse(c, "space id is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
if len(req.Prompt.GetName()) <= 0 {
|
||||
invalidParamRequestResponse(c, "name is empty")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := prompt.PromptSVC.UpsertPromptResource(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DeletePromptResource .
|
||||
// @router /api/playground_api/delete_prompt_resource [POST]
|
||||
func DeletePromptResource(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req playground.DeletePromptResourceRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := prompt.PromptSVC.DeletePromptResource(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetSpaceListV2 .
|
||||
// @router /api/playground_api/space/list [POST]
|
||||
func GetSpaceListV2(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req playground.GetSpaceListV2Request
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := user.UserApplicationSVC.GetSpaceListV2(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetImagexShortUrl .
|
||||
// @router /api/playground_api/get_imagex_url [POST]
|
||||
func GetImagexShortUrl(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req playground.GetImagexShortUrlRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if len(req.Uris) == 0 {
|
||||
invalidParamRequestResponse(c, "uris is empty")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := singleagent.SingleAgentSVC.GetImagexShortUrl(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// MGetUserBasicInfo .
|
||||
// @router /api/playground_api/mget_user_info [POST]
|
||||
func MGetUserBasicInfo(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req playground.MGetUserBasicInfoRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := user.UserApplicationSVC.MGetUserBasicInfo(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetBotPopupInfo .
|
||||
// @router /api/playground_api/operate/get_bot_popup_info [POST]
|
||||
func GetBotPopupInfo(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req playground.GetBotPopupInfoRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if len(req.BotPopupTypes) == 0 {
|
||||
invalidParamRequestResponse(c, "bot popup types is empty")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := singleagent.SingleAgentSVC.GetAgentPopupInfo(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdateBotPopupInfo .
|
||||
// @router /api/playground_api/operate/update_bot_popup_info [POST]
|
||||
func UpdateBotPopupInfo(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req playground.UpdateBotPopupInfoRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := singleagent.SingleAgentSVC.UpdateAgentPopupInfo(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// CreateUpdateShortcutCommand .
|
||||
// @router /api/playground_api/create_update_shortcut_command [POST]
|
||||
func CreateUpdateShortcutCommand(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req playground.CreateUpdateShortcutCommandRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
shortCuts, err := shortcutcmd.ShortcutCmdSVC.Handler(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
resp := new(playground.CreateUpdateShortcutCommandResponse)
|
||||
resp.Shortcuts = shortCuts
|
||||
resp.Code = 0
|
||||
resp.Msg = ""
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ReportUserBehavior .
|
||||
// @router /api/playground_api/report_user_behavior [POST]
|
||||
func ReportUserBehavior(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req playground.ReportUserBehaviorRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.ResourceID <= 0 {
|
||||
invalidParamRequestResponse(c, "resource id is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(playground.ReportUserBehaviorResponse)
|
||||
|
||||
if req.ResourceType == playground.SpaceResourceType_DraftBot {
|
||||
resp, err = singleagent.SingleAgentSVC.ReportUserBehavior(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
} else if req.ResourceType == playground.SpaceResourceType_Project {
|
||||
resp, err = appApplication.APPApplicationSVC.ReportUserBehavior(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetFileUrls .
|
||||
// @router /api/playground_api/get_file_list [POST]
|
||||
func GetFileUrls(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req playground.GetFileUrlsRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
iconList, err := upload.SVC.GetShortcutIcons(ctx)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
resp := new(playground.GetFileUrlsResponse)
|
||||
resp.FileList = iconList
|
||||
resp.Code = 0
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
@@ -0,0 +1,915 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"context"
|
||||
"regexp"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/plugin_develop"
|
||||
common "github.com/coze-dev/coze-studio/backend/api/model/plugin_develop/common"
|
||||
"github.com/coze-dev/coze-studio/backend/application/plugin"
|
||||
appworkflow "github.com/coze-dev/coze-studio/backend/application/workflow"
|
||||
)
|
||||
|
||||
// GetPlaygroundPluginList .
|
||||
// @router /api/plugin_api/get_playground_plugin_list [POST]
|
||||
func GetPlaygroundPluginList(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.GetPlaygroundPluginListRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.GetSpaceID() <= 0 {
|
||||
invalidParamRequestResponse(c, "spaceID is invalid")
|
||||
return
|
||||
}
|
||||
if req.GetPage() <= 0 {
|
||||
invalidParamRequestResponse(c, "page is invalid")
|
||||
return
|
||||
}
|
||||
if req.GetSize() >= 30 {
|
||||
invalidParamRequestResponse(c, "size is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
// when there is only one element in the types list, and the element type is workflow, use workflow service
|
||||
// TODO Figure out when there are multiple values for types
|
||||
if len(req.GetPluginTypes()) == 1 && req.GetPluginTypes()[0] == int32(common.PluginType_WORKFLOW) {
|
||||
resp, err := appworkflow.SVC.GetPlaygroundPluginList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.GetPlaygroundPluginList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// RegisterPluginMeta .
|
||||
// @router /api/plugin_api/register_plugin_meta [POST]
|
||||
func RegisterPluginMeta(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.RegisterPluginMetaRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.GetName() == "" {
|
||||
invalidParamRequestResponse(c, "plugin name is invalid")
|
||||
return
|
||||
}
|
||||
if req.GetDesc() == "" {
|
||||
invalidParamRequestResponse(c, "plugin desc is invalid")
|
||||
return
|
||||
}
|
||||
if req.URL != nil && (*req.URL == "" || len(*req.URL) > 512) {
|
||||
invalidParamRequestResponse(c, "plugin url is invalid")
|
||||
return
|
||||
}
|
||||
if req.Icon == nil || req.Icon.URI == "" || len(req.Icon.URI) > 512 {
|
||||
invalidParamRequestResponse(c, "plugin icon is invalid")
|
||||
return
|
||||
}
|
||||
if req.AuthType == nil {
|
||||
invalidParamRequestResponse(c, "plugin auth type is invalid")
|
||||
return
|
||||
}
|
||||
if req.SpaceID <= 0 {
|
||||
invalidParamRequestResponse(c, "spaceID is invalid")
|
||||
return
|
||||
}
|
||||
if req.ProjectID != nil {
|
||||
if *req.ProjectID <= 0 {
|
||||
invalidParamRequestResponse(c, "projectID is invalid")
|
||||
return
|
||||
}
|
||||
}
|
||||
if req.GetPluginType() != common.PluginType_PLUGIN {
|
||||
invalidParamRequestResponse(c, "plugin type is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.RegisterPluginMeta(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetPluginAPIs .
|
||||
// @router /api/plugin_api/get_plugin_apis [POST]
|
||||
func GetPluginAPIs(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.GetPluginAPIsRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.PluginID <= 0 {
|
||||
invalidParamRequestResponse(c, "pluginID is invalid")
|
||||
return
|
||||
}
|
||||
if len(req.APIIds) == 0 {
|
||||
if req.Page <= 0 {
|
||||
invalidParamRequestResponse(c, "page is invalid")
|
||||
return
|
||||
}
|
||||
if req.Size >= 30 {
|
||||
invalidParamRequestResponse(c, "size is invalid")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.GetPluginAPIs(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetPluginInfo .
|
||||
// @router /api/plugin_api/get_plugin_info [POST]
|
||||
func GetPluginInfo(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.GetPluginInfoRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.PluginID <= 0 {
|
||||
invalidParamRequestResponse(c, "pluginID is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.GetPluginInfo(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetUpdatedAPIs .
|
||||
// @router /api/plugin_api/get_updated_apis [POST]
|
||||
func GetUpdatedAPIs(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.GetUpdatedAPIsRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.PluginID <= 0 {
|
||||
invalidParamRequestResponse(c, "pluginID is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.GetUpdatedAPIs(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetOAuthStatus .
|
||||
// @router /api/plugin_api/get_oauth_status [POST]
|
||||
func GetOAuthStatus(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.GetOAuthStatusRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.PluginID <= 0 {
|
||||
invalidParamRequestResponse(c, "pluginID is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.GetOAuthStatus(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// CheckAndLockPluginEdit .
|
||||
// @router /api/plugin_api/check_and_lock_plugin_edit [POST]
|
||||
func CheckAndLockPluginEdit(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.CheckAndLockPluginEditRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.PluginID <= 0 {
|
||||
invalidParamRequestResponse(c, "pluginID is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.CheckAndLockPluginEdit(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdatePlugin .
|
||||
// @router /api/plugin_api/update [POST]
|
||||
func UpdatePlugin(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.UpdatePluginRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.PluginID <= 0 {
|
||||
invalidParamRequestResponse(c, "pluginID is invalid")
|
||||
return
|
||||
}
|
||||
if req.AiPlugin == "" {
|
||||
invalidParamRequestResponse(c, "plugin manifest is invalid")
|
||||
return
|
||||
}
|
||||
if req.Openapi == "" {
|
||||
invalidParamRequestResponse(c, "plugin openapi doc is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.UpdatePlugin(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DeleteAPI .
|
||||
// @router /api/plugin_api/delete_api [POST]
|
||||
func DeleteAPI(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.DeleteAPIRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.PluginID <= 0 {
|
||||
invalidParamRequestResponse(c, "pluginID is invalid")
|
||||
return
|
||||
}
|
||||
if req.APIID <= 0 {
|
||||
invalidParamRequestResponse(c, "apiID is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.DeleteAPI(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DelPlugin .
|
||||
// @router /api/plugin_api/del_plugin [POST]
|
||||
func DelPlugin(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.DelPluginRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.PluginID <= 0 {
|
||||
invalidParamRequestResponse(c, "pluginID is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.DelPlugin(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PublishPlugin .
|
||||
// @router /api/plugin_api/publish_plugin [POST]
|
||||
func PublishPlugin(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.PublishPluginRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.PluginID <= 0 {
|
||||
invalidParamRequestResponse(c, "pluginID is invalid")
|
||||
return
|
||||
}
|
||||
if req.VersionName == "" || len(req.VersionName) > 255 {
|
||||
invalidParamRequestResponse(c, "version name is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
match, _ := regexp.MatchString(`^v\d+\.\d+\.\d+$`, req.VersionName)
|
||||
if !match {
|
||||
invalidParamRequestResponse(c, "version name is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
if req.VersionDesc == "" {
|
||||
invalidParamRequestResponse(c, "version desc is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.PublishPlugin(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdatePluginMeta .
|
||||
// @router /api/plugin_api/update_plugin_meta [POST]
|
||||
func UpdatePluginMeta(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.UpdatePluginMetaRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.PluginID <= 0 {
|
||||
invalidParamRequestResponse(c, "pluginID is invalid")
|
||||
return
|
||||
}
|
||||
if req.Name != nil && *req.Name == "" {
|
||||
invalidParamRequestResponse(c, "plugin name is invalid")
|
||||
return
|
||||
}
|
||||
if req.Desc != nil && *req.Desc == "" {
|
||||
invalidParamRequestResponse(c, "plugin desc is invalid")
|
||||
return
|
||||
}
|
||||
if req.URL != nil && (*req.URL == "" || len(*req.URL) > 512) {
|
||||
invalidParamRequestResponse(c, "plugin server url is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.UpdatePluginMeta(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetBotDefaultParams .
|
||||
// @router /api/plugin_api/get_bot_default_params [POST]
|
||||
func GetBotDefaultParams(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.GetBotDefaultParamsRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.SpaceID <= 0 {
|
||||
invalidParamRequestResponse(c, "spaceID is invalid")
|
||||
return
|
||||
}
|
||||
if req.BotID <= 0 {
|
||||
invalidParamRequestResponse(c, "botID is invalid")
|
||||
return
|
||||
}
|
||||
if req.PluginID <= 0 {
|
||||
invalidParamRequestResponse(c, "pluginID is invalid")
|
||||
return
|
||||
}
|
||||
if req.APIName == "" {
|
||||
invalidParamRequestResponse(c, "apiName is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.GetBotDefaultParams(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdateBotDefaultParams .
|
||||
// @router /api/plugin_api/update_bot_default_params [POST]
|
||||
func UpdateBotDefaultParams(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.UpdateBotDefaultParamsRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.SpaceID <= 0 {
|
||||
invalidParamRequestResponse(c, "spaceID is invalid")
|
||||
return
|
||||
}
|
||||
if req.BotID <= 0 {
|
||||
invalidParamRequestResponse(c, "botID is invalid")
|
||||
return
|
||||
}
|
||||
if req.PluginID <= 0 {
|
||||
invalidParamRequestResponse(c, "pluginID is invalid")
|
||||
return
|
||||
}
|
||||
if req.APIName == "" {
|
||||
invalidParamRequestResponse(c, "apiName is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.UpdateBotDefaultParams(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// CreateAPI .
|
||||
// @router /api/plugin_api/create_api [POST]
|
||||
func CreateAPI(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.CreateAPIRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.PluginID <= 0 {
|
||||
invalidParamRequestResponse(c, "pluginID is invalid")
|
||||
return
|
||||
}
|
||||
if req.Name == "" || len(req.Name) > 255 {
|
||||
invalidParamRequestResponse(c, "api name is invalid")
|
||||
return
|
||||
}
|
||||
if req.Desc == "" {
|
||||
invalidParamRequestResponse(c, "api desc is invalid")
|
||||
return
|
||||
}
|
||||
if req.Path != nil && (*req.Path == "" || len(*req.Path) > 512) {
|
||||
invalidParamRequestResponse(c, "api path is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.CreateAPI(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UpdateAPI .
|
||||
// @router /api/plugin_api/update_api [POST]
|
||||
func UpdateAPI(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.UpdateAPIRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.PluginID <= 0 {
|
||||
invalidParamRequestResponse(c, "pluginID is invalid")
|
||||
return
|
||||
}
|
||||
if req.APIID <= 0 {
|
||||
invalidParamRequestResponse(c, "apiID is invalid")
|
||||
return
|
||||
}
|
||||
if req.Name != nil && (*req.Name == "" || len(*req.Name) > 255) {
|
||||
invalidParamRequestResponse(c, "api name is invalid")
|
||||
return
|
||||
}
|
||||
if req.Desc != nil && (*req.Desc == "" || len(*req.Desc) > 255) {
|
||||
invalidParamRequestResponse(c, "api desc is invalid")
|
||||
return
|
||||
}
|
||||
if req.Path != nil && (*req.Path == "" || len(*req.Path) > 512) {
|
||||
invalidParamRequestResponse(c, "api path is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.UpdateAPI(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetUserAuthority .
|
||||
// @router /api/plugin_api/get_user_authority [POST]
|
||||
func GetUserAuthority(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.GetUserAuthorityRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.PluginID <= 0 {
|
||||
invalidParamRequestResponse(c, "pluginID is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.GetUserAuthority(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// DebugAPI .
|
||||
// @router /api/plugin_api/debug_api [POST]
|
||||
func DebugAPI(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.DebugAPIRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.PluginID <= 0 {
|
||||
invalidParamRequestResponse(c, "pluginID is invalid")
|
||||
return
|
||||
}
|
||||
if req.APIID <= 0 {
|
||||
invalidParamRequestResponse(c, "apiID is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.DebugAPI(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// UnlockPluginEdit .
|
||||
// @router /api/plugin_api/unlock_plugin_edit [POST]
|
||||
func UnlockPluginEdit(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.UnlockPluginEditRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.UnlockPluginEdit(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetPluginNextVersion .
|
||||
// @router /api/plugin_api/get_plugin_next_version [POST]
|
||||
func GetPluginNextVersion(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.GetPluginNextVersionRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.GetPluginNextVersion(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// RegisterPlugin .
|
||||
// @router /api/developer/register [POST]
|
||||
func RegisterPlugin(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.RegisterPluginRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.GetSpaceID() <= 0 {
|
||||
invalidParamRequestResponse(c, "spaceID is invalid")
|
||||
return
|
||||
}
|
||||
if req.ProjectID != nil && *req.ProjectID <= 0 {
|
||||
invalidParamRequestResponse(c, "projectID is invalid")
|
||||
return
|
||||
}
|
||||
if req.AiPlugin == "" {
|
||||
invalidParamRequestResponse(c, "plugin manifest is invalid")
|
||||
return
|
||||
}
|
||||
if req.Openapi == "" {
|
||||
invalidParamRequestResponse(c, "plugin openapi doc is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.RegisterPlugin(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetDevPluginList .
|
||||
// @router /api/plugin_api/get_dev_plugin_list [POST]
|
||||
func GetDevPluginList(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.GetDevPluginListRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.SpaceID <= 0 {
|
||||
invalidParamRequestResponse(c, "spaceID is invalid")
|
||||
return
|
||||
}
|
||||
if req.ProjectID <= 0 {
|
||||
invalidParamRequestResponse(c, "projectID is invalid")
|
||||
return
|
||||
}
|
||||
if req.GetPage() <= 0 {
|
||||
invalidParamRequestResponse(c, "page is invalid")
|
||||
return
|
||||
}
|
||||
if req.GetSize() <= 0 {
|
||||
invalidParamRequestResponse(c, "size is invalid")
|
||||
return
|
||||
}
|
||||
if req.GetSize() > 50 {
|
||||
invalidParamRequestResponse(c, "size is too large")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.GetDevPluginList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// Convert2OpenAPI .
|
||||
// @router /api/plugin_api/convert_to_openapi [POST]
|
||||
func Convert2OpenAPI(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.Convert2OpenAPIRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.SpaceID <= 0 {
|
||||
invalidParamRequestResponse(c, "spaceID is invalid")
|
||||
return
|
||||
}
|
||||
if req.Data == "" {
|
||||
invalidParamRequestResponse(c, "data is invalid")
|
||||
return
|
||||
}
|
||||
if req.PluginURL != nil && *req.PluginURL == "" {
|
||||
invalidParamRequestResponse(c, "pluginURL is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.Convert2OpenAPI(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetOAuthSchemaAPI .
|
||||
// @router /api/plugin_api/get_oauth_schema [POST]
|
||||
func GetOAuthSchemaAPI(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.GetOAuthSchemaRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.GetOAuthSchema(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetOAuthSchema .
|
||||
// @router /api/plugin/get_oauth_schema [POST]
|
||||
func GetOAuthSchema(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.GetOAuthSchemaRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.GetOAuthSchema(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// BatchCreateAPI .
|
||||
// @router /api/plugin_api/batch_create_api [POST]
|
||||
func BatchCreateAPI(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.BatchCreateAPIRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.SpaceID <= 0 {
|
||||
invalidParamRequestResponse(c, "spaceID is invalid")
|
||||
return
|
||||
}
|
||||
if req.PluginID <= 0 {
|
||||
invalidParamRequestResponse(c, "pluginID is invalid")
|
||||
return
|
||||
}
|
||||
if req.AiPlugin == "" {
|
||||
invalidParamRequestResponse(c, "plugin manifest is invalid")
|
||||
return
|
||||
}
|
||||
if req.Openapi == "" {
|
||||
invalidParamRequestResponse(c, "plugin openapi doc is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.BatchCreateAPI(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// RevokeAuthToken .
|
||||
// @router /api/plugin_api/revoke_auth_token [POST]
|
||||
func RevokeAuthToken(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.RevokeAuthTokenRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.PluginID <= 0 {
|
||||
invalidParamRequestResponse(c, "pluginID is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.RevokeAuthToken(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// GetQueriedOAuthPluginList .
|
||||
// @router /api/plugin_api/get_queried_oauth_plugins [POST]
|
||||
func GetQueriedOAuthPluginList(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req plugin_develop.GetQueriedOAuthPluginListRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.BotID <= 0 {
|
||||
invalidParamRequestResponse(c, "entityID is required")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.GetQueriedOAuthPluginList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
@@ -0,0 +1,420 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
product_public_api "github.com/coze-dev/coze-studio/backend/api/model/marketplace/product_public_api"
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/workflow"
|
||||
appworkflow "github.com/coze-dev/coze-studio/backend/application/workflow"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/app/developer_api"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/app/bot_common"
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/marketplace/product_common"
|
||||
"github.com/coze-dev/coze-studio/backend/api/model/playground"
|
||||
appApplication "github.com/coze-dev/coze-studio/backend/application/app"
|
||||
"github.com/coze-dev/coze-studio/backend/application/modelmgr"
|
||||
"github.com/coze-dev/coze-studio/backend/application/plugin"
|
||||
"github.com/coze-dev/coze-studio/backend/application/search"
|
||||
"github.com/coze-dev/coze-studio/backend/application/singleagent"
|
||||
"github.com/coze-dev/coze-studio/backend/application/template"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/logs"
|
||||
)
|
||||
|
||||
// PublicGetProductList .
|
||||
// @router /api/marketplace/product/list [GET]
|
||||
func PublicGetProductList(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req product_public_api.GetProductListRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
var resp *product_public_api.GetProductListResponse
|
||||
switch req.GetEntityType() {
|
||||
case product_common.ProductEntityType_Plugin:
|
||||
resp, err = plugin.PluginApplicationSVC.PublicGetProductList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
case product_common.ProductEntityType_TemplateCommon:
|
||||
resp, err = template.ApplicationSVC.PublicGetProductList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
case product_common.ProductEntityType_SaasPlugin:
|
||||
resp, err = plugin.PluginApplicationSVC.GetCozeSaasPluginList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PublicGetProductDetail .
|
||||
// @router /api/marketplace/product/detail [GET]
|
||||
func PublicGetProductDetail(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req product_public_api.GetProductDetailRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.GetProductID() <= 0 {
|
||||
invalidParamRequestResponse(c, "productID is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.PublicGetProductDetail(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PublicFavoriteProduct .
|
||||
// @router /api/marketplace/product/favorite [POST]
|
||||
func PublicFavoriteProduct(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req product_public_api.FavoriteProductRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.GetEntityID() <= 0 {
|
||||
invalidParamRequestResponse(c, "entityID is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
// check entity id is valid
|
||||
if req.GetEntityType() == product_common.ProductEntityType_Bot {
|
||||
_, err = singleagent.SingleAgentSVC.ValidateAgentDraftAccess(ctx, req.GetEntityID())
|
||||
} else if req.GetEntityType() == product_common.ProductEntityType_Project {
|
||||
_, err = appApplication.APPApplicationSVC.ValidateDraftAPPAccess(ctx, req.GetEntityID())
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := search.SearchSVC.PublicFavoriteProduct(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PublicGetUserFavoriteListV2 .
|
||||
// @router /api/marketplace/product/favorite/list.v2 [GET]
|
||||
func PublicGetUserFavoriteListV2(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req product_public_api.GetUserFavoriteListV2Request
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.GetPageSize() <= 0 {
|
||||
invalidParamRequestResponse(c, "pageSize is invalid")
|
||||
return
|
||||
}
|
||||
if req.GetEntityType() <= 0 {
|
||||
invalidParamRequestResponse(c, "entityType is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := search.SearchSVC.PublicGetUserFavoriteList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PublicDuplicateProduct .
|
||||
// @router /api/marketplace/product/duplicate [POST]
|
||||
func PublicDuplicateProduct(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req product_public_api.DuplicateProductRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(product_public_api.DuplicateProductResponse)
|
||||
resp.Data = new(product_public_api.DuplicateProductData)
|
||||
|
||||
switch req.GetEntityType() {
|
||||
case product_common.ProductEntityType_BotTemplate:
|
||||
modelListResp, err := modelmgr.ModelmgrApplicationSVC.GetModelList(ctx, &developer_api.GetTypeListRequest{})
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
if modelListResp == nil || modelListResp.Data == nil || len(modelListResp.Data.ModelList) == 0 {
|
||||
invalidParamRequestResponse(c, "no model found")
|
||||
return
|
||||
}
|
||||
|
||||
bot, err := singleagent.SingleAgentSVC.DuplicateDraftBot(ctx, &developer_api.DuplicateDraftBotRequest{
|
||||
BotID: req.GetProductID(),
|
||||
SpaceID: req.GetSpaceID(),
|
||||
})
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
botInfo, err := singleagent.SingleAgentSVC.GetAgentBotInfo(ctx, &playground.GetDraftBotInfoAgwRequest{
|
||||
BotID: bot.Data.BotID,
|
||||
})
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
if botInfo.Data == nil || botInfo.Data.BotInfo == nil {
|
||||
invalidParamRequestResponse(c, "no bot info found")
|
||||
return
|
||||
}
|
||||
|
||||
modelInfo := botInfo.GetData().GetBotInfo().ModelInfo
|
||||
if modelInfo == nil {
|
||||
invalidParamRequestResponse(c, "no model info found in agent")
|
||||
return
|
||||
}
|
||||
modelInfo.ModelId = &modelListResp.Data.ModelList[0].ModelType
|
||||
|
||||
if req.Name != nil {
|
||||
_, err = singleagent.SingleAgentSVC.UpdateSingleAgentDraft(ctx, &playground.UpdateDraftBotInfoAgwRequest{
|
||||
BotInfo: &bot_common.BotInfoForUpdate{
|
||||
BotId: &bot.Data.BotID,
|
||||
Name: req.Name,
|
||||
ModelInfo: modelInfo,
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
resp.Data.NewEntityID = bot.Data.BotID
|
||||
|
||||
case product_common.ProductEntityType_WorkflowTemplateV2:
|
||||
workflowResp, err := appworkflow.SVC.CopyWorkflow(ctx, &workflow.CopyWorkflowRequest{
|
||||
WorkflowID: strconv.FormatInt(req.GetProductID(), 10),
|
||||
SpaceID: strconv.FormatInt(req.GetSpaceID(), 10),
|
||||
})
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
newWorkflowID, err := strconv.ParseInt(workflowResp.Data.WorkflowID, 10, 64)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
resp.Data.NewEntityID = newWorkflowID
|
||||
resp.Data.NewPluginID = &newWorkflowID
|
||||
|
||||
if req.Name != nil {
|
||||
_, err = appworkflow.SVC.UpdateWorkflowMeta(ctx, &workflow.UpdateWorkflowMetaRequest{
|
||||
WorkflowID: workflowResp.Data.WorkflowID,
|
||||
SpaceID: strconv.FormatInt(req.GetSpaceID(), 10),
|
||||
Name: req.Name,
|
||||
})
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PublicSearchProduct .
|
||||
// @router /api/marketplace/product/search [GET]
|
||||
func PublicSearchProduct(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req product_public_api.SearchProductRequest
|
||||
|
||||
var categoryIDs []int64
|
||||
if categoryIDsStr := string(c.Query("category_ids")); categoryIDsStr != "" {
|
||||
categoryIDs, err = handlerCategoryIDs(c, &req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
c.Request.URI().QueryArgs().Del("category_ids")
|
||||
}
|
||||
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if len(categoryIDs) > 0 {
|
||||
req.CategoryIDs = categoryIDs
|
||||
}
|
||||
// Call plugin application service
|
||||
resp, err := plugin.PluginApplicationSVC.PublicSearchProduct(ctx, &req)
|
||||
if err != nil {
|
||||
logs.CtxErrorf(ctx, "PublicSearchProduct failed: %v", err)
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
func handlerCategoryIDs(c *app.RequestContext, req *product_public_api.SearchProductRequest) ([]int64, error) {
|
||||
var categoryIDs []int64
|
||||
if categoryIDsStr := string(c.Query("category_ids")); categoryIDsStr != "" {
|
||||
categoryIDStrs := strings.Split(categoryIDsStr, ",")
|
||||
categoryIDs = make([]int64, 0, len(categoryIDStrs))
|
||||
for _, idStr := range categoryIDStrs {
|
||||
idStr = strings.TrimSpace(idStr)
|
||||
if idStr != "" {
|
||||
// Validate that it's a valid integer
|
||||
if categoryID, parseErr := strconv.ParseInt(idStr, 10, 64); parseErr == nil {
|
||||
categoryIDs = append(categoryIDs, categoryID)
|
||||
} else {
|
||||
return nil, fmt.Errorf("invalid category_id: %s", idStr)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return categoryIDs, nil
|
||||
}
|
||||
|
||||
// PublicSearchSuggest .
|
||||
// @router /api/marketplace/product/search/suggest [GET]
|
||||
func PublicSearchSuggest(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req product_public_api.SearchSuggestRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// Call plugin application service
|
||||
resp, err := plugin.PluginApplicationSVC.PublicSearchSuggest(ctx, &req)
|
||||
if err != nil {
|
||||
logs.CtxErrorf(ctx, "PublicSearchSuggest failed: %v", err)
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PublicGetProductCategoryList .
|
||||
// @router /api/marketplace/product/category/list [GET]
|
||||
func PublicGetProductCategoryList(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req product_public_api.GetProductCategoryListRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
var resp *product_public_api.GetProductCategoryListResponse
|
||||
req.EntityType = product_common.ProductEntityType_SaasPlugin
|
||||
switch req.GetEntityType() {
|
||||
case product_common.ProductEntityType_SaasPlugin:
|
||||
resp, err = plugin.PluginApplicationSVC.GetSaasProductCategoryList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PublicGetProductCallInfo .
|
||||
// @router /api/marketplace/product/call_info [GET]
|
||||
func PublicGetProductCallInfo(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req product_public_api.GetProductCallInfoRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.GetProductCallInfo(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// PublicGetMarketPluginConfig .
|
||||
// @router /api/marketplace/product/config [GET]
|
||||
func PublicGetMarketPluginConfig(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req product_public_api.GetMarketPluginConfigRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := plugin.PluginApplicationSVC.GetMarketPluginConfig(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
@@ -0,0 +1,179 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
|
||||
appApplication "github.com/coze-dev/coze-studio/backend/application/app"
|
||||
|
||||
resource "github.com/coze-dev/coze-studio/backend/api/model/resource"
|
||||
"github.com/coze-dev/coze-studio/backend/application/search"
|
||||
)
|
||||
|
||||
// LibraryResourceList .
|
||||
// @router /api/plugin_api/library_resource_list [POST]
|
||||
func LibraryResourceList(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req resource.LibraryResourceListRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.SpaceID <= 0 {
|
||||
invalidParamRequestResponse(c, "space_id is invalid")
|
||||
return
|
||||
}
|
||||
if req.GetSize() > 100 {
|
||||
invalidParamRequestResponse(c, "size is too large")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := search.SearchSVC.LibraryResourceList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ProjectResourceList .
|
||||
// @router /api/plugin_api/project_resource_list [POST]
|
||||
func ProjectResourceList(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req resource.ProjectResourceListRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.SpaceID <= 0 {
|
||||
invalidParamRequestResponse(c, "space_id is invalid")
|
||||
return
|
||||
}
|
||||
if req.ProjectID <= 0 {
|
||||
invalidParamRequestResponse(c, "project_id is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := search.SearchSVC.ProjectResourceList(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ResourceCopyDispatch .
|
||||
// @router /api/plugin_api/resource_copy_dispatch [POST]
|
||||
func ResourceCopyDispatch(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req resource.ResourceCopyDispatchRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.ResID <= 0 {
|
||||
invalidParamRequestResponse(c, "res_id is invalid")
|
||||
return
|
||||
}
|
||||
if req.ResType <= 0 {
|
||||
invalidParamRequestResponse(c, "res_type is invalid")
|
||||
return
|
||||
}
|
||||
if req.GetProjectID() <= 0 {
|
||||
invalidParamRequestResponse(c, "project_id is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := appApplication.APPApplicationSVC.ResourceCopyDispatch(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ResourceCopyDetail .
|
||||
// @router /api/plugin_api/resource_copy_detail [POST]
|
||||
func ResourceCopyDetail(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req resource.ResourceCopyDetailRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.TaskID == "" {
|
||||
invalidParamRequestResponse(c, "task_id is invalid")
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := appApplication.APPApplicationSVC.ResourceCopyDetail(ctx, &req)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ResourceCopyRetry .
|
||||
// @router /api/plugin_api/resource_copy_retry [POST]
|
||||
func ResourceCopyRetry(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req resource.ResourceCopyRetryRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(resource.ResourceCopyRetryResponse)
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ResourceCopyCancel .
|
||||
// @router /api/plugin_api/resource_copy_cancel [POST]
|
||||
func ResourceCopyCancel(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req resource.ResourceCopyCancelRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(resource.ResourceCopyCancelResponse)
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package coze
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
|
||||
upload "github.com/coze-dev/coze-studio/backend/api/model/file/upload"
|
||||
uploadSVC "github.com/coze-dev/coze-studio/backend/application/upload"
|
||||
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/lang/ptr"
|
||||
)
|
||||
|
||||
// CommonUpload .
|
||||
// @router /api/common/upload/*tos_uri [POST]
|
||||
func CommonUpload(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req upload.CommonUploadRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
fullUrl := string(c.Request.URI().FullURI())
|
||||
|
||||
resp, err := uploadSVC.SVC.UploadFileCommon(ctx, &req, fullUrl)
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
|
||||
// ApplyUploadAction .
|
||||
// @router /api/common/upload/apply_upload_action [GET]
|
||||
func ApplyUploadAction(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req upload.ApplyUploadActionRequest
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
invalidParamRequestResponse(c, err.Error())
|
||||
return
|
||||
}
|
||||
resp := new(upload.ApplyUploadActionResponse)
|
||||
host := c.Request.Host()
|
||||
if ptr.From(req.Action) == "ApplyImageUpload" {
|
||||
resp, err = uploadSVC.SVC.ApplyImageUpload(ctx, &req, string(host))
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
} else if ptr.From(req.Action) == "CommitImageUpload" {
|
||||
resp, err = uploadSVC.SVC.CommitImageUpload(ctx, &req, string(host))
|
||||
if err != nil {
|
||||
internalServerErrorResponse(ctx, c, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user