blob: ac88141f98b52d17cee35ab29afd1527556299df [file] [log] [blame]
package tasks
import (
"github.com/merico-dev/lake/logger"
lakeModels "github.com/merico-dev/lake/models"
"github.com/merico-dev/lake/models/domainlayer"
"github.com/merico-dev/lake/models/domainlayer/didgen"
"github.com/merico-dev/lake/models/domainlayer/ticket"
jiraModels "github.com/merico-dev/lake/plugins/jira/models"
"gorm.io/gorm/clause"
)
func ConvertWorklog(sourceId uint64, boardId uint64) error {
jiraWorklog := &jiraModels.JiraWorklog{}
// select all worklogs belongs to the board
cursor, err := lakeModels.Db.Model(jiraWorklog).
Select("jira_worklogs.*").
Joins(`left join jira_board_issues on (jira_board_issues.issue_id = jira_worklogs.issue_id)`).
Where("jira_board_issues.source_id = ? AND jira_board_issues.board_id = ?", sourceId, boardId).
Rows()
if err != nil {
logger.Error("convert worklog error:", err)
return err
}
defer cursor.Close()
boardIdGen := didgen.NewDomainIdGenerator(&jiraModels.JiraBoard{}).Generate(sourceId, boardId)
worklogIdGen := didgen.NewDomainIdGenerator(&jiraModels.JiraWorklog{})
userIdGen := didgen.NewDomainIdGenerator(&jiraModels.JiraUser{})
issueIdGen := didgen.NewDomainIdGenerator(&jiraModels.JiraIssue{})
// iterate all rows
for cursor.Next() {
err = lakeModels.Db.ScanRows(cursor, jiraWorklog)
if err != nil {
return err
}
worklog := &ticket.Worklog{
DomainEntity: domainlayer.DomainEntity{
Id: worklogIdGen.Generate(jiraWorklog.SourceId, jiraWorklog.IssueId, jiraWorklog.WorklogId),
},
IssueId: issueIdGen.Generate(jiraWorklog.SourceId, jiraWorklog.IssueId),
BoardId: boardIdGen,
TimeSpent: jiraWorklog.TimeSpent,
TimeSpentSeconds: jiraWorklog.TimeSpentSeconds,
Updated: jiraWorklog.Updated,
Started: jiraWorklog.Started,
}
if jiraWorklog.AuthorId != "" {
worklog.AuthorId = userIdGen.Generate(sourceId, jiraWorklog.AuthorId)
}
if jiraWorklog.UpdateAuthorId != "" {
worklog.UpdateAuthorId = userIdGen.Generate(sourceId, jiraWorklog.UpdateAuthorId)
}
err = lakeModels.Db.Clauses(clause.OnConflict{UpdateAll: true}).Create(worklog).Error
if err != nil {
logger.Error("convert worklog error:", err)
return err
}
}
return nil
}