Skip to content

Commit df4a1a4

Browse files
authored
Merge pull request #578 from actiontech/commit/optimize-error
feat: add duplicate workflow name validation and localization support
2 parents 266e766 + 71e5c8a commit df4a1a4

7 files changed

Lines changed: 28 additions & 1 deletion

File tree

internal/apiserver/service/dms_controller.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@ import (
1919
aV1 "github.com/actiontech/dms/api/dms/service/v1"
2020
"github.com/actiontech/dms/internal/apiserver/conf"
2121
apiError "github.com/actiontech/dms/internal/apiserver/pkg/error"
22+
"github.com/actiontech/dms/internal/dms/biz"
2223
"github.com/actiontech/dms/internal/dms/pkg/constant"
2324
pkgConst "github.com/actiontech/dms/internal/dms/pkg/constant"
2425
"github.com/actiontech/dms/internal/dms/service"
26+
"github.com/actiontech/dms/internal/pkg/locale"
2527
"github.com/labstack/echo/v4/middleware"
2628
echoSwagger "github.com/swaggo/echo-swagger"
2729

@@ -3692,6 +3694,9 @@ func (ctl *DMSController) AddDataExportWorkflow(c echo.Context) error {
36923694

36933695
reply, err := ctl.DMS.AddDataExportWorkflow(c.Request().Context(), req, currentUserUid)
36943696
if nil != err {
3697+
if errors.Is(err, biz.ErrDataExportWorkflowNameDuplicate) {
3698+
return NewErrResp(c, errors.New(locale.Bundle.LocalizeMsgByCtx(c.Request().Context(), locale.DataExportWorkflowNameDuplicateErr)), apiError.BadRequestErr)
3699+
}
36953700
return NewErrResp(c, err, apiError.DMSServiceErr)
36963701
}
36973702
return NewOkRespWithReply(c, reply)

internal/dms/biz/data_export_workflow.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@ package biz
22

33
import (
44
"context"
5+
"errors"
56
"time"
67

78
pkgConst "github.com/actiontech/dms/internal/dms/pkg/constant"
89
dmsCommonV1 "github.com/actiontech/dms/pkg/dms-common/api/dms/v1"
910
utilLog "github.com/actiontech/dms/pkg/dms-common/pkg/log"
1011
)
1112

13+
var ErrDataExportWorkflowNameDuplicate = errors.New("data export workflow name duplicate")
14+
1215
type DataExportWorkflowStatus string
1316

1417
const (
@@ -98,6 +101,7 @@ type WorkflowStep struct {
98101

99102
type WorkflowRepo interface {
100103
SaveWorkflow(ctx context.Context, dataExportWorkflow *Workflow) error
104+
IsDataExportWorkflowNameDuplicate(ctx context.Context, projectUID, workflowName string) (bool, error)
101105
ListDataExportWorkflows(ctx context.Context, opt *ListWorkflowsOption) ([]*Workflow, int64, error)
102106
GetDataExportWorkflow(ctx context.Context, dataExportWorkflowUid string) (*Workflow, error)
103107
UpdateWorkflowStatusById(ctx context.Context, dataExportWorkflowUid string, status DataExportWorkflowStatus) error

internal/dms/service/data_export_workflow.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func (d *DMSService) AddDataExportWorkflow(ctx context.Context, req *dmsV1.AddDa
2525
}
2626
uid, err := d.DataExportWorkflowUsecase.AddDataExportWorkflow(ctx, currentUserUid, args)
2727
if err != nil {
28-
return nil, fmt.Errorf("add data export workflow failed: %v", err)
28+
return nil, fmt.Errorf("add data export workflow failed: %w", err)
2929
}
3030

3131
return &dmsV1.AddDataExportWorkflowReply{

internal/dms/storage/workflow.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,21 @@ func (d *WorkflowRepo) SaveWorkflow(ctx context.Context, dataExportWorkflow *biz
4444
return nil
4545
}
4646

47+
func (d *WorkflowRepo) IsDataExportWorkflowNameDuplicate(ctx context.Context, projectUID, workflowName string) (bool, error) {
48+
var count int64
49+
if err := transaction(d.log, ctx, d.db, func(tx *gorm.DB) error {
50+
if err := tx.WithContext(ctx).Model(&model.Workflow{}).
51+
Where("project_uid = ? AND name = ?", projectUID, workflowName).
52+
Count(&count).Error; err != nil {
53+
return fmt.Errorf("failed to check workflow name duplicate: %v", err)
54+
}
55+
return nil
56+
}); err != nil {
57+
return false, err
58+
}
59+
return count > 0, nil
60+
}
61+
4762
func (w *WorkflowRepo) UpdateWorkflowRecord(ctx context.Context, dataExportWorkflowRecord *biz.WorkflowRecord) error {
4863
model := convertBizWorkflowRecord(dataExportWorkflowRecord)
4964

internal/pkg/locale/active.en.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ DBServiceSQLQueryRuleTemplateName = "SQL Workbench audit rule template (need to
3636
DBServiceSyncExpand = "DB instance synchronization expansion service"
3737
DBServiceSyncVersion = "Version (Supports DMP5.23.04.0 and above)"
3838
DBServiceUser = "DB instance connection user"
39+
DataExportWorkflowNameDuplicateErr = "Duplicate workflow name, please modify the workflow name and resubmit."
3940
DataWorkflowDefault = "❓ Data Export Workflow Unknown Requests"
4041
DataWorkflowExportFailed = "⚠️ Data Export Workflow Execute Failed"
4142
DataWorkflowExportSuccess = "✅ Data Export Workflow Execute Succeeded"

internal/pkg/locale/active.zh.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ DBServiceSQLQueryRuleTemplateName = "工作台操作审核规则模板(需要先
3636
DBServiceSyncExpand = "数据源同步扩展服务"
3737
DBServiceSyncVersion = "版本(支持DMP5.23.04.0及以上版本)"
3838
DBServiceUser = "数据源连接用户"
39+
DataExportWorkflowNameDuplicateErr = "工单名称重复了,请您修改工单名称后重新提交工单。"
3940
DataWorkflowDefault = "❓数据导出工单未知请求"
4041
DataWorkflowExportFailed = "⚠️ 数据导出失败"
4142
DataWorkflowExportSuccess = "✅ 数据导出成功"

internal/pkg/locale/message_zh.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ var (
210210

211211
// Data Export Workflow
212212
var (
213+
DataExportWorkflowNameDuplicateErr = &i18n.Message{ID: "DataExportWorkflowNameDuplicateErr", Other: "工单名称重复了,请您修改工单名称后重新提交工单。"}
213214
DataWorkflowDefault = &i18n.Message{ID: "DataWorkflowDefault", Other: "❓数据导出工单未知请求"}
214215
DataWorkflowExportFailed = &i18n.Message{ID: "DataWorkflowExportFailed", Other: "⚠️ 数据导出失败"}
215216
DataWorkflowExportSuccess = &i18n.Message{ID: "DataWorkflowExportSuccess", Other: "✅ 数据导出成功"}

0 commit comments

Comments
 (0)