in backend/plugins/tapd/tasks/task_changelog_converter.go [57:148]
func ConvertTaskChangelog(taskCtx plugin.SubTaskContext) errors.Error {
rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, RAW_TASK_CHANGELOG_TABLE)
logger := taskCtx.GetLogger()
db := taskCtx.GetDal()
customStatusMap := getStatusMapping(data)
getTaskStdStatus := func(statusKey string) string {
if statusKey == "done" {
return ticket.DONE
} else if statusKey == "progressing" {
return ticket.IN_PROGRESS
} else {
return ticket.TODO
}
}
logger.Info("convert changelog :%d", data.Options.WorkspaceId)
clIdGen := didgen.NewDomainIdGenerator(&models.TapdTaskChangelog{})
issueIdGen := didgen.NewDomainIdGenerator(&models.TapdTask{})
clIterIdGen := didgen.NewDomainIdGenerator(&models.TapdIteration{})
clauses := []dal.Clause{
dal.Select("tc.created, tc.id, tc.workspace_id, tc.task_id, tc.creator, _tool_tapd_task_changelog_items.*"),
dal.From(&models.TapdTaskChangelogItem{}),
dal.Join("left join _tool_tapd_task_changelogs tc on tc.id = _tool_tapd_task_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(TaskChangelogItemResult{}),
Input: cursor,
Convert: func(inputRow interface{}) ([]interface{}, errors.Error) {
cl := inputRow.(*TaskChangelogItemResult)
domainCl := &ticket.IssueChangelogs{
DomainEntity: domainlayer.DomainEntity{
Id: fmt.Sprintf("%s:%s", clIdGen.Generate(data.Options.ConnectionId, cl.Id), cl.Field),
},
IssueId: issueIdGen.Generate(data.Options.ConnectionId, cl.TaskId),
AuthorId: getAccountIdGen().Generate(data.Options.ConnectionId, cl.Creator),
AuthorName: cl.Creator,
FieldId: cl.Field,
FieldName: cl.Field,
OriginalFromValue: cl.ValueBeforeParsed,
OriginalToValue: cl.ValueAfterParsed,
CreatedDate: *cl.Created,
}
if domainCl.FieldName == "status" {
if len(customStatusMap) != 0 {
domainCl.FromValue = customStatusMap[domainCl.OriginalFromValue]
domainCl.ToValue = customStatusMap[domainCl.OriginalToValue]
} else {
domainCl.FromValue = getTaskStdStatus(domainCl.OriginalFromValue)
domainCl.ToValue = getTaskStdStatus(domainCl.OriginalToValue)
}
}
if domainCl.FieldName == "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 == "owner" {
domainCl.FieldName = "assignee"
domainCl.OriginalFromValue = generateDomainAccountIdForUsers(cl.ValueBeforeParsed, cl.ConnectionId)
domainCl.OriginalToValue = generateDomainAccountIdForUsers(cl.ValueAfterParsed, cl.ConnectionId)
}
return []interface{}{
domainCl,
}, nil
},
})
if err != nil {
logger.Info(err.Error())
return err
}
return converter.Execute()
}