in backend/plugins/zentao/tasks/changelog_convertor.go [69:178]
func ConvertChangelog(taskCtx plugin.SubTaskContext) errors.Error {
data := taskCtx.GetData().(*ZentaoTaskData)
db := taskCtx.GetDal()
changelogIdGen := didgen.NewDomainIdGenerator(&models.ZentaoChangelogDetail{})
accountIdGen := didgen.NewDomainIdGenerator(&models.ZentaoAccount{})
executionIdGen := didgen.NewDomainIdGenerator(&models.ZentaoExecution{})
storyIdGen := didgen.NewDomainIdGenerator(&models.ZentaoStory{})
taskIdGen := didgen.NewDomainIdGenerator(&models.ZentaoTask{})
bugIdGen := didgen.NewDomainIdGenerator(&models.ZentaoBug{})
cn := models.ZentaoChangelog{}.TableName()
cdn := models.ZentaoChangelogDetail{}.TableName()
an := models.ZentaoAccount{}.TableName()
cursor, err := db.Cursor(
dal.Select(fmt.Sprintf("*,%s.id cid,%s.id cdid,%s.id aid ", cn, cdn, an)),
dal.From(&models.ZentaoChangelog{}),
dal.Join(fmt.Sprintf("LEFT JOIN %s on %s.changelog_id = %s.id and %s.connection_id = %d", cdn, cdn, cn, cdn, data.Options.ConnectionId)),
dal.Join(fmt.Sprintf("LEFT JOIN %s on %s.realname = %s.actor and %s.connection_id = %d", an, an, cn, an, data.Options.ConnectionId)),
dal.Where(fmt.Sprintf(`%s.project = ? and %s.connection_id = ?`, cn, cn),
data.Options.ProjectId,
data.Options.ConnectionId),
)
if err != nil {
return err
}
defer cursor.Close()
convertor, err := api.NewDataConverter(api.DataConverterArgs{
InputRowType: reflect.TypeOf(ZentaoChangelogSelect{}),
Input: cursor,
RawDataSubTaskArgs: api.RawDataSubTaskArgs{
Ctx: taskCtx,
Options: data.Options,
Table: RAW_CHANGELOG_TABLE,
},
Convert: func(inputRow interface{}) ([]interface{}, errors.Error) {
cl := inputRow.(*ZentaoChangelogSelect)
if cl.CDID == 0 {
return nil, nil
}
var issueId string
switch cl.ObjectType {
case "story":
issueId = storyIdGen.Generate(data.Options.ConnectionId, cl.ObjectId)
case "task":
issueId = taskIdGen.Generate(data.Options.ConnectionId, cl.ObjectId)
case "bug":
issueId = bugIdGen.Generate(data.Options.ConnectionId, cl.ObjectId)
}
domainCl := &ticket.IssueChangelogs{
DomainEntity: domainlayer.DomainEntity{
Id: changelogIdGen.Generate(data.Options.ConnectionId, cl.CID, cl.CDID),
},
IssueId: issueId,
AuthorName: cl.Actor,
FieldId: cl.Field,
FieldName: cl.Field,
OriginalFromValue: cl.Old,
OriginalToValue: cl.New,
FromValue: cl.Old,
ToValue: cl.New,
CreatedDate: cl.Date,
}
if cl.AID != 0 {
domainCl.AuthorId = accountIdGen.Generate(data.Options.ConnectionId, cl.AID)
}
if domainCl.FieldName == "assignedTo" {
domainCl.FieldName = "assignee"
if cl.Old != "" {
if id := data.AccountCache.getAccountID(cl.Old); id != 0 {
domainCl.OriginalFromValue = accountIdGen.Generate(data.Options.ConnectionId, id)
domainCl.FromValue = accountIdGen.Generate(data.Options.ConnectionId, id)
}
}
if cl.New != "" {
if id := data.AccountCache.getAccountID(cl.New); id != 0 {
domainCl.OriginalToValue = accountIdGen.Generate(data.Options.ConnectionId, id)
domainCl.ToValue = accountIdGen.Generate(data.Options.ConnectionId, id)
}
}
}
if domainCl.FieldName == "execution" {
domainCl.FieldName = "Sprint"
if cl.Old != "" {
oldValue, _ := strconv.ParseInt(cl.Old, 10, 64)
if oldValue != 0 {
domainCl.OriginalFromValue = executionIdGen.Generate(data.Options.ConnectionId, oldValue)
domainCl.FromValue = executionIdGen.Generate(data.Options.ConnectionId, oldValue)
}
}
if cl.New != "" {
newValue, _ := strconv.ParseInt(cl.New, 10, 64)
if newValue != 0 {
domainCl.OriginalToValue = executionIdGen.Generate(data.Options.ConnectionId, newValue)
domainCl.ToValue = executionIdGen.Generate(data.Options.ConnectionId, newValue)
}
}
}
return []interface{}{
domainCl,
}, nil
},
})
if err != nil {
return err
}
return convertor.Execute()
}