in backend/plugins/tapd/tasks/bug_changelog_converter.go [53:145]
func ConvertBugChangelog(taskCtx plugin.SubTaskContext) errors.Error {
rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, RAW_BUG_CHANGELOG_TABLE)
logger := taskCtx.GetLogger()
db := taskCtx.GetDal()
statusList := make([]models.TapdBugStatus, 0)
statusLanguageMap, getStdStatus, err := getDefaultStdStatusMapping(data, db, statusList)
if err != nil {
return err
}
customStatusMap := getStatusMapping(data)
logger.Info("convert changelog :%d", data.Options.WorkspaceId)
issueIdGen := didgen.NewDomainIdGenerator(&models.TapdBug{})
clIterIdGen := didgen.NewDomainIdGenerator(&models.TapdIteration{})
clIdGen := didgen.NewDomainIdGenerator(&models.TapdBugChangelog{})
clauses := []dal.Clause{
dal.Select("tc.created, tc.id, tc.workspace_id, tc.bug_id, tc.author, _tool_tapd_bug_changelog_items.*"),
dal.From(&models.TapdBugChangelogItem{}),
dal.Join("left join _tool_tapd_bug_changelogs tc on tc.id = _tool_tapd_bug_changelog_items.changelog_id "),
dal.Where("tc.connection_id = ? AND tc.workspace_id = ?", data.Options.ConnectionId, data.Options.WorkspaceId),
dal.Orderby("created DESC"),
}
cursor, err := db.Cursor(clauses...)
if err != nil {
return err
}
defer cursor.Close()
converter, err := helper.NewDataConverter(helper.DataConverterArgs{
RawDataSubTaskArgs: *rawDataSubTaskArgs,
InputRowType: reflect.TypeOf(BugChangelogItemResult{}),
Input: cursor,
Convert: func(inputRow interface{}) ([]interface{}, errors.Error) {
cl := inputRow.(*BugChangelogItemResult)
domainCl := &ticket.IssueChangelogs{
DomainEntity: domainlayer.DomainEntity{
Id: clIdGen.Generate(data.Options.ConnectionId, cl.Id, cl.Field),
},
IssueId: issueIdGen.Generate(data.Options.ConnectionId, cl.BugId),
AuthorId: getAccountIdGen().Generate(data.Options.ConnectionId, cl.Author),
AuthorName: cl.Author,
FieldId: cl.Field,
FieldName: cl.Field,
OriginalFromValue: cl.ValueBeforeParsed,
OriginalToValue: cl.ValueAfterParsed,
CreatedDate: *cl.Created,
}
if domainCl.FieldId == "iteration_id" {
domainCl.FieldName = "Sprint"
if cl.IterationIdFrom == 0 {
domainCl.OriginalFromValue = ""
domainCl.FromValue = ""
} else {
domainCl.OriginalFromValue = clIterIdGen.Generate(cl.ConnectionId, cl.IterationIdFrom)
domainCl.FromValue = cl.ValueBeforeParsed
}
if cl.IterationIdTo == 0 {
domainCl.OriginalToValue = ""
domainCl.ToValue = ""
} else {
domainCl.OriginalToValue = clIterIdGen.Generate(cl.ConnectionId, cl.IterationIdTo)
domainCl.ToValue = cl.ValueAfterParsed
}
}
if domainCl.FieldId == "current_owner" {
domainCl.FieldName = "assignee"
domainCl.OriginalFromValue = generateDomainAccountIdForUsers(cl.ValueBeforeParsed, cl.ConnectionId)
domainCl.OriginalToValue = generateDomainAccountIdForUsers(cl.ValueAfterParsed, cl.ConnectionId)
}
if domainCl.FieldName == "status" {
domainCl.OriginalFromValue = statusLanguageMap[domainCl.OriginalFromValue]
domainCl.OriginalToValue = statusLanguageMap[domainCl.OriginalToValue]
if len(customStatusMap) != 0 {
domainCl.FromValue = customStatusMap[domainCl.OriginalFromValue]
domainCl.ToValue = customStatusMap[domainCl.OriginalToValue]
} else {
domainCl.FromValue = getStdStatus(domainCl.OriginalFromValue)
domainCl.ToValue = getStdStatus(domainCl.OriginalToValue)
}
}
return []interface{}{
domainCl,
}, nil
},
})
if err != nil {
logger.Info(err.Error())
return err
}
return converter.Execute()
}