This is an automated email from the ASF dual-hosted git repository. warren pushed a commit to branch fix-tapd-convert-unicode in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git
commit 322952225c6da9f09ecbc867e2d5cf4a4e2d9a74 Author: Warren Chen <[email protected]> AuthorDate: Mon Feb 13 15:48:09 2023 +0800 fix(tapd): convert unicode to string --- .../tapd/tasks/story_changelog_extractor.go | 56 +++++++++++++++++----- 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/backend/plugins/tapd/tasks/story_changelog_extractor.go b/backend/plugins/tapd/tasks/story_changelog_extractor.go index 67b9eda28..f9055b1c8 100644 --- a/backend/plugins/tapd/tasks/story_changelog_extractor.go +++ b/backend/plugins/tapd/tasks/story_changelog_extractor.go @@ -19,28 +19,30 @@ package tasks import ( "encoding/json" - "github.com/apache/incubator-devlake/core/errors" - "github.com/apache/incubator-devlake/core/plugin" - "github.com/apache/incubator-devlake/helpers/pluginhelper/api" - "github.com/apache/incubator-devlake/plugins/tapd/models" + "github.com/apache/incubator-devlake/errors" + "strconv" "strings" + + "github.com/apache/incubator-devlake/plugins/core" + "github.com/apache/incubator-devlake/plugins/helper" + "github.com/apache/incubator-devlake/plugins/tapd/models" ) -var _ plugin.SubTaskEntryPoint = ExtractStoryChangelog +var _ core.SubTaskEntryPoint = ExtractStoryChangelog -var ExtractStoryChangelogMeta = plugin.SubTaskMeta{ +var ExtractStoryChangelogMeta = core.SubTaskMeta{ Name: "extractStoryChangelog", EntryPoint: ExtractStoryChangelog, EnabledByDefault: true, Description: "Extract raw workspace data into tool layer table _tool_tapd_iterations", - DomainTypes: []string{plugin.DOMAIN_TYPE_TICKET}, + DomainTypes: []string{core.DOMAIN_TYPE_TICKET}, } -func ExtractStoryChangelog(taskCtx plugin.SubTaskContext) errors.Error { +func ExtractStoryChangelog(taskCtx core.SubTaskContext) errors.Error { rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, RAW_STORY_CHANGELOG_TABLE, false) - extractor, err := api.NewApiExtractor(api.ApiExtractorArgs{ + extractor, err := helper.NewApiExtractor(helper.ApiExtractorArgs{ RawDataSubTaskArgs: *rawDataSubTaskArgs, - Extract: func(row *api.RawData) ([]interface{}, errors.Error) { + Extract: func(row *helper.RawData) ([]interface{}, errors.Error) { var storyChangelogBody struct { WorkitemChange models.TapdStoryChangelog } @@ -88,14 +90,23 @@ func ExtractStoryChangelog(taskCtx plugin.SubTaskContext) errors.Error { default: item.ValueBeforeParsed = valueBeforeMap.(string) } + err = convertUnicode(&item) + if err != nil { + return nil, err + } results = append(results, &item) } default: item.ConnectionId = data.Options.ConnectionId item.ChangelogId = storyChangelog.Id item.Field = fc.Field - item.ValueAfterParsed = strings.Trim(string(fc.ValueAfterParsed), `"`) - item.ValueBeforeParsed = strings.Trim(string(fc.ValueBeforeParsed), `"`) + item.ValueAfterParsed = valueAfterMap.(string) + // as ValueAfterParsed is string, valueBeforeMap is always string + item.ValueBeforeParsed = valueBeforeMap.(string) + } + err = convertUnicode(&item) + if err != nil { + return nil, err } if item.Field == "iteration_id" { iterationFrom, iterationTo, err := parseIterationChangelog(taskCtx, item.ValueBeforeParsed, item.ValueAfterParsed) @@ -118,3 +129,24 @@ func ExtractStoryChangelog(taskCtx plugin.SubTaskContext) errors.Error { return extractor.Execute() } + +func unicodeToZh(s string) (string, error) { + str, err := strconv.Unquote(strings.Replace(strconv.Quote(s), `\\u`, `\u`, -1)) + if err != nil { + return "", err + } + return str, nil +} + +func convertUnicode(item *models.TapdStoryChangelogItem) errors.Error { + var err errors.Error + item.ValueAfterParsed, err = errors.Convert01(unicodeToZh(item.ValueAfterParsed)) + if err != nil { + return err + } + item.ValueBeforeParsed, err = errors.Convert01(unicodeToZh(item.ValueBeforeParsed)) + if err != nil { + return err + } + return nil +}
