feat: optimized logic for upload service

This commit is contained in:
zhuangjie.1125
2025-09-03 19:50:01 +08:00
parent 67d28dd7d5
commit ffb553fbae
5 changed files with 120 additions and 59 deletions

View File

@ -821,7 +821,8 @@ func (w *ApplicationService) adaptorInputFileFields(ctx context.Context, workflo
fileURI := strings.TrimPrefix(u.Path, "/opencoze")
tagging, err := w.TosClient.GetObjectTagging(ctx, fileURI)
if err != nil {
return "", err
logs.CtxWarnf(ctx, fmt.Sprintf("GetObjectTagging failed: %v", err))
return input, nil
}
if fName, ok := tagging["filename"]; ok {
query := u.Query()

View File

@ -1208,8 +1208,10 @@ func (d databaseService) executeSelectSQL(ctx context.Context, req *ExecuteSQLRe
}
selectReq.Fields = fields
}
var complexCond *rdb.ComplexCondition
var (
finallyComplexCond *rdb.ComplexCondition
complexCond *rdb.ComplexCondition
)
var err error
if req.Condition != nil {
complexCond, err = convertCondition(ctx, req.Condition, fieldNameToPhysical, req.SQLParams)
@ -1219,24 +1221,32 @@ func (d databaseService) executeSelectSQL(ctx context.Context, req *ExecuteSQLRe
}
// add rw mode
var extraCondition *rdb.ComplexCondition
if tableInfo.RwMode == table.BotTableRWMode_LimitedReadWrite && req.UserID != "" {
cond := &rdb.Condition{
Field: database.DefaultUidColName,
Operator: entity3.OperatorEqual,
Value: req.UserID,
}
if complexCond == nil {
complexCond = &rdb.ComplexCondition{
Conditions: []*rdb.Condition{cond},
}
} else {
complexCond.Conditions = append(complexCond.Conditions, cond)
extraCondition = &rdb.ComplexCondition{
Conditions: []*rdb.Condition{cond},
}
}
if complexCond != nil {
selectReq.Where = complexCond
if extraCondition != nil {
finallyComplexCond = &rdb.ComplexCondition{
NestedConditions: []*rdb.ComplexCondition{
complexCond,
extraCondition,
},
Operator: entity3.AND,
}
} else {
finallyComplexCond = complexCond
}
if finallyComplexCond != nil {
selectReq.Where = finallyComplexCond
}
if len(req.OrderByList) > 0 {
@ -1377,32 +1387,47 @@ func (d databaseService) executeUpdateSQL(ctx context.Context, req *ExecuteSQLRe
}
condParams := req.SQLParams[index:]
complexCond, err := convertCondition(ctx, req.Condition, fieldNameToPhysical, condParams)
if err != nil {
return -1, fmt.Errorf("convert condition failed: %v", err)
var (
finallyComplexCond *rdb.ComplexCondition
complexCond *rdb.ComplexCondition
)
var err error
if req.Condition != nil {
complexCond, err = convertCondition(ctx, req.Condition, fieldNameToPhysical, condParams)
if err != nil {
return -1, fmt.Errorf("convert condition failed: %v", err)
}
}
// add rw mode
var extraCondition *rdb.ComplexCondition
if tableInfo.RwMode == table.BotTableRWMode_LimitedReadWrite && req.UserID != "" {
cond := &rdb.Condition{
Field: database.DefaultUidColName,
Operator: entity3.OperatorEqual,
Value: req.UserID,
}
if complexCond == nil {
complexCond = &rdb.ComplexCondition{
Conditions: []*rdb.Condition{cond},
}
} else {
complexCond.Conditions = append(complexCond.Conditions, cond)
extraCondition = &rdb.ComplexCondition{
Conditions: []*rdb.Condition{cond},
}
}
if extraCondition != nil {
finallyComplexCond = &rdb.ComplexCondition{
NestedConditions: []*rdb.ComplexCondition{
complexCond,
extraCondition,
},
Operator: entity3.AND,
}
} else {
finallyComplexCond = complexCond
}
updateResp, err := d.rdb.UpdateData(ctx, &rdb.UpdateDataRequest{
TableName: physicalTableName,
Data: updateData,
Where: complexCond,
Where: finallyComplexCond,
Limit: int64PtrToIntPtr(req.Limit),
})
if err != nil {
@ -1417,31 +1442,46 @@ func (d databaseService) executeDeleteSQL(ctx context.Context, req *ExecuteSQLRe
return -1, fmt.Errorf("missing delete condition")
}
complexCond, err := convertCondition(ctx, req.Condition, fieldNameToPhysical, req.SQLParams)
if err != nil {
return -1, fmt.Errorf("convert condition failed: %v", err)
var (
finallyComplexCond *rdb.ComplexCondition
complexCond *rdb.ComplexCondition
)
var err error
if req.Condition != nil {
complexCond, err = convertCondition(ctx, req.Condition, fieldNameToPhysical, req.SQLParams)
if err != nil {
return -1, fmt.Errorf("convert condition failed: %v", err)
}
}
// add rw mode
var extraCondition *rdb.ComplexCondition
if tableInfo.RwMode == table.BotTableRWMode_LimitedReadWrite && req.UserID != "" {
cond := &rdb.Condition{
Field: database.DefaultUidColName,
Operator: entity3.OperatorEqual,
Value: req.UserID,
}
if complexCond == nil {
complexCond = &rdb.ComplexCondition{
Conditions: []*rdb.Condition{cond},
}
} else {
complexCond.Conditions = append(complexCond.Conditions, cond)
extraCondition = &rdb.ComplexCondition{
Conditions: []*rdb.Condition{cond},
}
}
if extraCondition != nil {
finallyComplexCond = &rdb.ComplexCondition{
NestedConditions: []*rdb.ComplexCondition{
complexCond,
extraCondition,
},
Operator: entity3.AND,
}
} else {
finallyComplexCond = complexCond
}
deleteResp, err := d.rdb.DeleteData(ctx, &rdb.DeleteDataRequest{
TableName: physicalTableName,
Where: complexCond,
Where: finallyComplexCond,
Limit: int64PtrToIntPtr(req.Limit),
})
if err != nil {

View File

@ -18,10 +18,6 @@ package adaptor
import (
"context"
crossupload "github.com/coze-dev/coze-studio/backend/crossdomain/contract/upload"
"github.com/coze-dev/coze-studio/backend/crossdomain/contract/upload/uploadmock"
"github.com/coze-dev/coze-studio/backend/domain/upload/service"
"github.com/coze-dev/coze-studio/backend/types/consts"
"io"
"net"
"net/http"
@ -49,7 +45,10 @@ import (
mockmodel "github.com/coze-dev/coze-studio/backend/crossdomain/contract/modelmgr/modelmock"
crossplugin "github.com/coze-dev/coze-studio/backend/crossdomain/contract/plugin"
"github.com/coze-dev/coze-studio/backend/crossdomain/contract/plugin/pluginmock"
crossupload "github.com/coze-dev/coze-studio/backend/crossdomain/contract/upload"
"github.com/coze-dev/coze-studio/backend/crossdomain/contract/upload/uploadmock"
"github.com/coze-dev/coze-studio/backend/crossdomain/impl/code"
"github.com/coze-dev/coze-studio/backend/domain/upload/service"
userentity "github.com/coze-dev/coze-studio/backend/domain/user/entity"
"github.com/coze-dev/coze-studio/backend/domain/workflow"
"github.com/coze-dev/coze-studio/backend/domain/workflow/entity/vo"
@ -61,6 +60,7 @@ import (
"github.com/coze-dev/coze-studio/backend/internal/testutil"
"github.com/coze-dev/coze-studio/backend/pkg/ctxcache"
"github.com/coze-dev/coze-studio/backend/pkg/sonic"
"github.com/coze-dev/coze-studio/backend/types/consts"
)
func TestMain(m *testing.M) {

View File

@ -194,7 +194,8 @@ func parseToFileNameAndFileExtension(ctx context.Context, fileURL string) (strin
fileExt, ok := response.Tagging["file_ext"]
if !ok {
return "", "", fmt.Errorf("failed to get file tagging file_ext")
logs.CtxWarnf(ctx, "failed to get file tagging file ext")
fileExt = strings.TrimPrefix(filepath.Ext(fileURI), ".")
}
if len(fileExt) == 0 {
fileExt = strings.TrimPrefix(filepath.Ext(fileURI), ".")

View File

@ -930,14 +930,23 @@ func (m *mysqlService) buildWhereClause(condition *rdb.ComplexCondition) (string
if condition == nil {
return "", nil, nil
}
if condition.Operator == "" {
condition.Operator = entity2.AND
}
if len(condition.NestedConditions) > 0 {
return m.buildNestedConditions(condition)
} else if len(condition.Conditions) > 0 {
whereClauseString, values, err := m.buildWhereCondition(condition)
return "WHERE " + whereClauseString, values, err
} else {
return "", nil, fmt.Errorf("condddd")
}
}
func (m *mysqlService) buildWhereCondition(condition *rdb.ComplexCondition) (string, []interface{}, error) {
var whereClause strings.Builder
values := make([]interface{}, 0)
for i, cond := range condition.Conditions {
if i > 0 {
whereClause.WriteString(fmt.Sprintf(" %s ", condition.Operator))
@ -971,25 +980,35 @@ func (m *mysqlService) buildWhereClause(condition *rdb.ComplexCondition) (string
values = append(values, cond.Value)
}
}
if len(condition.NestedConditions) > 0 {
whereClause.WriteString(" AND (")
for i, nested := range condition.NestedConditions {
if i > 0 {
whereClause.WriteString(fmt.Sprintf(" %s ", nested.Operator))
}
nestedClause, nestedValues, err := m.buildWhereClause(nested)
if err != nil {
return "", nil, err
}
whereClause.WriteString(nestedClause)
values = append(values, nestedValues...)
}
whereClause.WriteString(")")
}
if whereClause.Len() > 0 {
return " WHERE " + whereClause.String(), values, nil
return whereClause.String(), values, nil
}
return "", values, nil
}
func (m *mysqlService) buildNestedConditions(condition *rdb.ComplexCondition) (string, []interface{}, error) {
var whereClause strings.Builder
values := make([]interface{}, 0)
whereClause.WriteString(" WHERE (")
for i, nested := range condition.NestedConditions {
if i > 0 {
whereClause.WriteString(fmt.Sprintf(" %s ", nested.Operator))
}
nestedClause, nestedValues, err := m.buildWhereCondition(nested)
if err != nil {
return "", nil, err
}
whereClause.WriteString(nestedClause)
if i < len(condition.NestedConditions)-1 {
whereClause.WriteString(" " + string(condition.Operator))
}
values = append(values, nestedValues...)
}
whereClause.WriteString(")")
if whereClause.Len() > 0 {
return whereClause.String(), values, nil
}
return "", values, nil
}