This is an automated email from the ASF dual-hosted git repository.

warren pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new d49f7117 refactor: remove code enriching
d49f7117 is described below

commit d49f7117a4cfabe29d61af4db2f515b15bcfa85c
Author: zhangliang <[email protected]>
AuthorDate: Tue May 31 09:34:56 2022 +0800

    refactor: remove code enriching
---
 models/domainlayer/ticket/sprint.go                |   9 +-
 models/migrationscripts/register.go                |   1 +
 .../updateSchemas20220528.go}                      |  59 ++-
 plugins/jira/jira.go                               |   1 +
 plugins/jira/tasks/changelog_convertor.go          |  16 +-
 plugins/jira/tasks/sprint_issues_convertor.go      | 432 ++-------------------
 .../tapd/tasks/issue_assign_history_converter.go   |  76 ----
 .../tapd/tasks/issue_sprint_history_converter.go   |  77 ----
 .../tapd/tasks/issue_status_history_converter.go   |  75 ----
 9 files changed, 76 insertions(+), 670 deletions(-)

diff --git a/models/domainlayer/ticket/sprint.go 
b/models/domainlayer/ticket/sprint.go
index 189a1108..bd89d6e7 100644
--- a/models/domainlayer/ticket/sprint.go
+++ b/models/domainlayer/ticket/sprint.go
@@ -43,11 +43,6 @@ type Sprint struct {
 
 type SprintIssue struct {
        common.NoPKModel
-       SprintId      string `gorm:"primaryKey;type:varchar(255)"`
-       IssueId       string `gorm:"primaryKey;type:varchar(255)"`
-       IsRemoved     bool
-       AddedDate     *time.Time
-       RemovedDate   *time.Time
-       AddedStage    *string `gorm:"type:varchar(255)"`
-       ResolvedStage *string `gorm:"type:varchar(255)"`
+       SprintId string `gorm:"primaryKey;type:varchar(255)"`
+       IssueId  string `gorm:"primaryKey;type:varchar(255)"`
 }
diff --git a/models/migrationscripts/register.go 
b/models/migrationscripts/register.go
index 8805fdff..d7ee8e38 100644
--- a/models/migrationscripts/register.go
+++ b/models/migrationscripts/register.go
@@ -26,5 +26,6 @@ func RegisterAll() {
                new(updateSchemas20220505), new(updateSchemas20220507), 
new(updateSchemas20220510),
                new(updateSchemas20220513), new(updateSchemas20220524), 
new(updateSchemas20220526),
                new(updateSchemas20220527),
+               new(updateSchemas20220528),
        }, "Framework")
 }
diff --git a/models/domainlayer/ticket/sprint.go 
b/models/migrationscripts/updateSchemas20220528.go
similarity index 54%
copy from models/domainlayer/ticket/sprint.go
copy to models/migrationscripts/updateSchemas20220528.go
index 189a1108..755c3502 100644
--- a/models/domainlayer/ticket/sprint.go
+++ b/models/migrationscripts/updateSchemas20220528.go
@@ -15,33 +15,18 @@ See the License for the specific language governing 
permissions and
 limitations under the License.
 */
 
-package ticket
+package migrationscripts
 
 import (
-       "github.com/apache/incubator-devlake/models/common"
+       "context"
        "time"
 
-       "github.com/apache/incubator-devlake/models/domainlayer"
-)
+       "gorm.io/gorm"
 
-var (
-       BeforeSprint = "BEFORE_SPRINT"
-       DuringSprint = "DURING_SPRINT"
-       AfterSprint  = "AFTER_SPRINT"
+       "github.com/apache/incubator-devlake/models/common"
 )
 
-type Sprint struct {
-       domainlayer.DomainEntity
-       Name            string `gorm:"type:varchar(255)"`
-       Url             string `gorm:"type:varchar(255)"`
-       Status          string `gorm:"type:varchar(100)"`
-       StartedDate     *time.Time
-       EndedDate       *time.Time
-       CompletedDate   *time.Time
-       OriginalBoardID string `gorm:"type:varchar(255)"`
-}
-
-type SprintIssue struct {
+type SprintIssue20220528 struct {
        common.NoPKModel
        SprintId      string `gorm:"primaryKey;type:varchar(255)"`
        IssueId       string `gorm:"primaryKey;type:varchar(255)"`
@@ -51,3 +36,37 @@ type SprintIssue struct {
        AddedStage    *string `gorm:"type:varchar(255)"`
        ResolvedStage *string `gorm:"type:varchar(255)"`
 }
+
+func (SprintIssue20220528) TableName() string {
+       return "sprint_issues"
+}
+
+type updateSchemas20220528 struct{}
+
+func (*updateSchemas20220528) Up(ctx context.Context, db *gorm.DB) error {
+       err := db.Migrator().DropColumn(&SprintIssue20220528{}, "is_removed")
+       if err != nil {
+               return err
+       }
+       err = db.Migrator().DropColumn(&SprintIssue20220528{}, "added_date")
+       if err != nil {
+               return err
+       }
+       err = db.Migrator().DropColumn(&SprintIssue20220528{}, "removed_date")
+       if err != nil {
+               return err
+       }
+       err = db.Migrator().DropColumn(&SprintIssue20220528{}, "added_stage")
+       if err != nil {
+               return err
+       }
+       return db.Migrator().DropColumn(&SprintIssue20220528{}, 
"resolved_stage")
+}
+
+func (*updateSchemas20220528) Version() uint64 {
+       return 20220528110537
+}
+
+func (*updateSchemas20220528) Name() string {
+       return "remove columns: is_removed, added_date, removed_date, 
added_stage, resolved_stage"
+}
diff --git a/plugins/jira/jira.go b/plugins/jira/jira.go
index d401bd03..9f758190 100644
--- a/plugins/jira/jira.go
+++ b/plugins/jira/jira.go
@@ -86,6 +86,7 @@ func (plugin Jira) SubTaskMetas() []core.SubTaskMeta {
                {Name: "convertChangelogs", EntryPoint: 
tasks.ConvertChangelogs, EnabledByDefault: true, Description: "convert Jira 
change logs"},
 
                {Name: "convertSprints", EntryPoint: tasks.ConvertSprints, 
EnabledByDefault: true, Description: "convert Jira sprints"},
+               {Name: "convertSprintIssues", EntryPoint: 
tasks.ConvertSprintIssues, EnabledByDefault: true, Description: "convert Jira 
sprint_issues"},
 
                {Name: "convertIssueCommits", EntryPoint: 
tasks.ConvertIssueCommits, EnabledByDefault: true, Description: "convert Jira 
issue commits"},
                {Name: "convertIssueRepoCommits", EntryPoint: 
tasks.ConvertIssueRepoCommits, EnabledByDefault: false, Description: "convert 
Jira issue repo commits"},
diff --git a/plugins/jira/tasks/changelog_convertor.go 
b/plugins/jira/tasks/changelog_convertor.go
index cc8be29f..19693146 100644
--- a/plugins/jira/tasks/changelog_convertor.go
+++ b/plugins/jira/tasks/changelog_convertor.go
@@ -42,11 +42,6 @@ func ConvertChangelogs(taskCtx core.SubTaskContext) error {
        connectionId := data.Connection.ID
        boardId := data.Options.BoardId
        logger := taskCtx.GetLogger()
-       sprintIssueConverter, err := NewSprintIssueConverter(taskCtx)
-       if err != nil {
-               logger.Info(err.Error())
-               return err
-       }
        db := taskCtx.GetDb()
        logger.Info("covert changelog")
        // select all changelogs belongs to the board
@@ -98,7 +93,6 @@ func ConvertChangelogs(taskCtx core.SubTaskContext) error {
                                ToValue:     row.ToString,
                                CreatedDate: row.Created,
                        }
-                       sprintIssueConverter.FeedIn(connectionId, *row)
                        return []interface{}{changelog}, nil
                },
        })
@@ -107,13 +101,5 @@ func ConvertChangelogs(taskCtx core.SubTaskContext) error {
                return err
        }
 
-       err = converter.Execute()
-       if err != nil {
-               return err
-       }
-       err = sprintIssueConverter.CreateSprintIssue()
-       if err != nil {
-               return err
-       }
-       return sprintIssueConverter.SaveAssigneeHistory()
+       return converter.Execute()
 }
diff --git a/plugins/jira/tasks/sprint_issues_convertor.go 
b/plugins/jira/tasks/sprint_issues_convertor.go
index 323893d8..0a752499 100644
--- a/plugins/jira/tasks/sprint_issues_convertor.go
+++ b/plugins/jira/tasks/sprint_issues_convertor.go
@@ -18,423 +18,55 @@ limitations under the License.
 package tasks
 
 import (
-       "fmt"
-       "strconv"
-       "strings"
-       "time"
+       "reflect"
 
        "github.com/apache/incubator-devlake/models/domainlayer/didgen"
        "github.com/apache/incubator-devlake/models/domainlayer/ticket"
        "github.com/apache/incubator-devlake/plugins/core"
+       "github.com/apache/incubator-devlake/plugins/helper"
        "github.com/apache/incubator-devlake/plugins/jira/models"
-       "gorm.io/gorm"
-       "gorm.io/gorm/clause"
 )
 
-const (
-       BatchSize = 1000
-)
-
-type SprintIssuesConverter struct {
-       db              *gorm.DB
-       logger          core.Logger
-       sprintIdGen     *didgen.DomainIdGenerator
-       issueIdGen      *didgen.DomainIdGenerator
-       userIdGen       *didgen.DomainIdGenerator
-       sprints         map[string]*models.JiraSprint
-       sprintIssue     map[string]*ticket.SprintIssue
-       status          map[string]*ticket.IssueStatusHistory
-       assignee        map[string]*ticket.IssueAssigneeHistory
-       assigneeDefault map[string]*ticket.IssueAssigneeHistory
-       sprintsHistory  map[string]*ticket.IssueSprintsHistory
-       jiraIssue       map[string]*models.JiraIssue
-}
-
-func NewSprintIssueConverter(taskCtx core.SubTaskContext) 
(*SprintIssuesConverter, error) {
+func ConvertSprintIssues(taskCtx core.SubTaskContext) error {
+       db := taskCtx.GetDb()
        data := taskCtx.GetData().(*JiraTaskData)
-       connectionId := data.Connection.ID
-       boardId := data.Options.BoardId
-       converter := &SprintIssuesConverter{
-               db:              taskCtx.GetDb(),
-               logger:          taskCtx.GetLogger(),
-               sprintIdGen:     
didgen.NewDomainIdGenerator(&models.JiraSprint{}),
-               issueIdGen:      
didgen.NewDomainIdGenerator(&models.JiraIssue{}),
-               userIdGen:       
didgen.NewDomainIdGenerator(&models.JiraUser{}),
-               sprints:         make(map[string]*models.JiraSprint),
-               sprintIssue:     make(map[string]*ticket.SprintIssue),
-               status:          make(map[string]*ticket.IssueStatusHistory),
-               assignee:        make(map[string]*ticket.IssueAssigneeHistory),
-               assigneeDefault: make(map[string]*ticket.IssueAssigneeHistory),
-               sprintsHistory:  make(map[string]*ticket.IssueSprintsHistory),
-               jiraIssue:       make(map[string]*models.JiraIssue),
-       }
-       return converter, converter.setupSprintIssue(connectionId, boardId)
-}
-
-func (c *SprintIssuesConverter) FeedIn(connectionId uint64, cl 
ChangelogItemResult) {
-       if cl.Field == "status" {
-               err := c.handleStatus(connectionId, cl)
-               if err != nil {
-                       return
-               }
-       }
-       if cl.Field == "assignee" {
-               err := c.handleAssignee(connectionId, cl)
-               if err != nil {
-                       return
-               }
-       }
-       if cl.Field != "Sprint" {
-               return
-       }
-       from, to, err := c.parseFromTo(cl.FromValue, cl.ToValue)
-       if err != nil {
-               return
-       }
-       for sprintId := range from {
-               err = c.handleFrom(connectionId, sprintId, cl)
-               if err != nil {
-                       c.logger.Error("handle from error:", err)
-                       return
-               }
-       }
-       for sprintId := range to {
-               err = c.handleTo(connectionId, sprintId, cl)
-               if err != nil {
-                       c.logger.Error("handle to error:", err)
-                       return
-               }
-       }
-}
-
-func (c *SprintIssuesConverter) CreateSprintIssue() error {
-       var err error
-       cache := make([]*ticket.SprintIssue, 0, BatchSize)
-       for _, item := range c.sprintIssue {
-               cache = append(cache, item)
-               if len(cache) == BatchSize {
-                       err = c.db.Clauses(clause.OnConflict{UpdateAll: 
true}).Create(cache).Error
-                       if err != nil {
-                               return err
-                       }
-                       cache = make([]*ticket.SprintIssue, 0, BatchSize)
-               }
-       }
-       if len(cache) != 0 {
-               err = c.db.Clauses(clause.OnConflict{UpdateAll: 
true}).Create(cache).Error
-               if err == nil {
-                       return err
-               }
-       }
-       return nil
-}
 
-func (c *SprintIssuesConverter) SaveAssigneeHistory() error {
-       var err error
-       cache := make([]*ticket.IssueAssigneeHistory, 0, BatchSize)
-       for _, item := range c.assigneeDefault {
-               cache = append(cache, item)
-               if len(cache) == BatchSize {
-                       err = c.db.Clauses(clause.OnConflict{UpdateAll: 
true}).Create(cache).Error
-                       if err != nil {
-                               return err
-                       }
-                       cache = make([]*ticket.IssueAssigneeHistory, 0, 
BatchSize)
-               }
-       }
-       if len(cache) != 0 {
-               err = c.db.Clauses(clause.OnConflict{UpdateAll: 
true}).Create(cache).Error
-               if err == nil {
-                       return err
-               }
-       }
-       return nil
-}
-
-func (c *SprintIssuesConverter) parseFromTo(from, to string) 
(map[uint64]struct{}, map[uint64]struct{}, error) {
-       fromInts := make(map[uint64]struct{})
-       toInts := make(map[uint64]struct{})
-       var n uint64
-       var err error
-       for _, item := range strings.Split(from, ",") {
-               s := strings.TrimSpace(item)
-               if s == "" {
-                       continue
-               }
-               n, err = strconv.ParseUint(s, 10, 64)
-               if err != nil {
-                       return nil, nil, err
-               }
-               fromInts[n] = struct{}{}
-       }
-       for _, item := range strings.Split(to, ",") {
-               s := strings.TrimSpace(item)
-               if s == "" {
-                       continue
-               }
-               n, err = strconv.ParseUint(s, 10, 64)
-               if err != nil {
-                       return nil, nil, err
-               }
-               toInts[n] = struct{}{}
-       }
-       inter := make(map[uint64]struct{})
-       for k := range fromInts {
-               if _, ok := toInts[k]; ok {
-                       inter[k] = struct{}{}
-                       delete(toInts, k)
-               }
-       }
-       for k := range inter {
-               delete(fromInts, k)
-       }
-       return fromInts, toInts, nil
-}
-
-func (c *SprintIssuesConverter) handleFrom(connectionId, sprintId uint64, cl 
ChangelogItemResult) error {
-       if sprint, _ := c.getJiraSprint(connectionId, sprintId); sprint == nil {
-               return nil
-       }
-       key := fmt.Sprintf("%d:%d:%d", connectionId, sprintId, cl.IssueId)
-       if item, ok := c.sprintIssue[key]; ok {
-               if item != nil && (item.RemovedDate == nil || item.RemovedDate 
!= nil && item.RemovedDate.Before(cl.Created)) {
-                       item.RemovedDate = &cl.Created
-                       item.IsRemoved = true
-               }
-       } else {
-               addedStage, _ := c.getStage(cl.Created, connectionId, sprintId)
-               jiraIssue, _ := c.getJiraIssue(connectionId, cl.IssueId)
-               sprint, _ := c.getJiraSprint(connectionId, sprintId)
-               if sprint == nil {
-                       return nil
-               }
-               sprintIssue := &ticket.SprintIssue{
-                       SprintId:    c.sprintIdGen.Generate(connectionId, 
sprintId),
-                       IssueId:     c.issueIdGen.Generate(connectionId, 
cl.IssueId),
-                       AddedDate:   sprint.StartDate,
-                       AddedStage:  addedStage,
-                       RemovedDate: &cl.Created,
-                       IsRemoved:   true,
-               }
-               if jiraIssue != nil {
-                       sprintIssue.AddedDate = &jiraIssue.Created
-                       sprintIssue.AddedStage = getStage(jiraIssue.Created, 
sprint.StartDate, sprint.CompleteDate)
-               }
-               c.sprintIssue[key] = sprintIssue
-       }
-       k := fmt.Sprintf("%d:%d", sprintId, cl.IssueId)
-       if item := c.sprintsHistory[k]; item != nil {
-               item.EndDate = &cl.Created
-               err := c.db.Clauses(clause.OnConflict{
-                       UpdateAll: true,
-               }).Create(item).Error
-               if err != nil {
-                       return err
-               }
-       }
-       return nil
-}
-
-func (c *SprintIssuesConverter) handleTo(connectionId, sprintId uint64, cl 
ChangelogItemResult) error {
-       domainSprintId := c.sprintIdGen.Generate(connectionId, sprintId)
-       key := fmt.Sprintf("%d:%d:%d", connectionId, sprintId, cl.IssueId)
-       addedStage, err := c.getStage(cl.Created, connectionId, sprintId)
-       if err == gorm.ErrRecordNotFound {
-               return nil
-       }
-       if err != nil {
-               return err
-       }
-       if addedStage == nil {
-               return nil
-       }
-       if item, ok := c.sprintIssue[key]; ok {
-               if item != nil {
-                       item.IsRemoved = false
-                       if item.AddedDate == nil || 
item.AddedDate.After(cl.Created) {
-                               item.AddedDate = &cl.Created
-                               item.AddedStage = addedStage
-                       }
-               }
-       } else {
-               c.sprintIssue[key] = &ticket.SprintIssue{
-                       SprintId:    domainSprintId,
-                       IssueId:     c.issueIdGen.Generate(connectionId, 
cl.IssueId),
-                       AddedDate:   &cl.Created,
-                       AddedStage:  addedStage,
-                       RemovedDate: nil,
-               }
-       }
-       k := fmt.Sprintf("%d:%d", sprintId, cl.IssueId)
-       now := time.Now()
-       c.sprintsHistory[k] = &ticket.IssueSprintsHistory{
-               IssueId:   c.issueIdGen.Generate(connectionId, cl.IssueId),
-               SprintId:  domainSprintId,
-               StartDate: cl.Created,
-               EndDate:   &now,
-       }
-       return nil
-}
-
-func (c *SprintIssuesConverter) setupSprintIssue(connectionId, boardId uint64) 
error {
-       cursor, err := c.db.Model(&models.JiraSprintIssue{}).
-               Select("_tool_jira_sprint_issues.*").
-               Joins("left join _tool_jira_board_sprints on 
_tool_jira_board_sprints.sprint_id = _tool_jira_sprint_issues.sprint_id").
-               Where("_tool_jira_board_sprints.connection_id = ? AND 
_tool_jira_board_sprints.board_id = ?", connectionId, boardId).
+       jiraSprintIssue := &models.JiraSprintIssue{}
+       // select all issues belongs to the board
+       cursor, err := db.Model(jiraSprintIssue).
+               Where("_tool_jira_sprint_issues.connection_id = ? ", 
data.Options.ConnectionId).
                Rows()
        if err != nil {
                return err
        }
        defer cursor.Close()
-       for cursor.Next() {
-               var jiraSprintIssue models.JiraSprintIssue
-               err = c.db.ScanRows(cursor, &jiraSprintIssue)
-               if err != nil {
-                       return err
-               }
-               sprint, _ := c.getJiraSprint(connectionId, 
jiraSprintIssue.SprintId)
-               if sprint == nil {
-                       continue
-               }
-               key := fmt.Sprintf("%d:%d:%d", connectionId, 
jiraSprintIssue.SprintId, jiraSprintIssue.IssueId)
-               dsi := ticket.SprintIssue{
-                       SprintId:  c.sprintIdGen.Generate(connectionId, 
jiraSprintIssue.SprintId),
-                       IssueId:   c.issueIdGen.Generate(connectionId, 
jiraSprintIssue.IssueId),
-                       AddedDate: jiraSprintIssue.IssueCreatedDate,
-               }
-               if dsi.AddedDate != nil {
-                       dsi.AddedStage = getStage(*dsi.AddedDate, 
sprint.StartDate, sprint.CompleteDate)
-               }
-               if jiraSprintIssue.ResolutionDate != nil {
-                       dsi.ResolvedStage = 
getStage(*jiraSprintIssue.ResolutionDate, sprint.StartDate, sprint.CompleteDate)
-               }
-               c.sprintIssue[key] = &dsi
-               issueId := c.issueIdGen.Generate(connectionId, 
jiraSprintIssue.IssueId)
-               issue, _ := c.getJiraIssue(connectionId, 
jiraSprintIssue.IssueId)
-               now := time.Now()
-               if issue != nil {
-                       issueAssigneeHistory := &ticket.IssueAssigneeHistory{
-                               IssueId:   issueId,
-                               StartDate: issue.Created,
-                               EndDate:   &now,
-                       }
-                       if issue.AssigneeAccountId != "" {
-                               issueAssigneeHistory.Assignee = 
c.userIdGen.Generate(connectionId, issue.AssigneeAccountId)
-                       }
-                       c.assigneeDefault[issueId] = issueAssigneeHistory
-               }
-       }
-       return nil
-}
-func (c *SprintIssuesConverter) getJiraSprint(connectionId, sprintId uint64) 
(*models.JiraSprint, error) {
-       key := fmt.Sprintf("%d:%d", connectionId, sprintId)
-       if value, ok := c.sprints[key]; ok {
-               return value, nil
-       }
-       var sprint models.JiraSprint
-       err := c.db.First(&sprint, "connection_id = ? AND sprint_id = ?", 
connectionId, sprintId).Error
-       if err != nil {
-               return nil, err
-       }
-       c.sprints[key] = &sprint
-       return &sprint, nil
-}
-
-func (c *SprintIssuesConverter) getJiraIssue(connectionId, issueId uint64) 
(*models.JiraIssue, error) {
-       key := fmt.Sprintf("%d:%d", connectionId, issueId)
-       if issue, ok := c.jiraIssue[key]; ok {
-               return issue, nil
-       }
-       var jiraIssue models.JiraIssue
-       err := c.db.First(&jiraIssue, "connection_id = ? AND issue_id = ?", 
connectionId, issueId).Error
-       if err != nil {
-               return nil, err
-       }
-       c.jiraIssue[key] = &jiraIssue
-       return &jiraIssue, nil
-}
 
-func (c *SprintIssuesConverter) getStage(t time.Time, connectionId, sprintId 
uint64) (*string, error) {
-       sprint, err := c.getJiraSprint(connectionId, sprintId)
-       if err != nil {
-               return nil, err
-       }
-       return getStage(t, sprint.StartDate, sprint.CompleteDate), nil
-}
-
-func (c *SprintIssuesConverter) handleStatus(connectionId uint64, cl 
ChangelogItemResult) error {
-       var err error
-       issueId := c.issueIdGen.Generate(connectionId, cl.IssueId)
-       if statusHistory := c.status[issueId]; statusHistory != nil {
-               statusHistory.EndDate = &cl.Created
-               err = c.db.Clauses(clause.OnConflict{
-                       UpdateAll: true,
-               }).Create(c.status[issueId]).Error
-               if err != nil {
-                       return err
-               }
-       }
-       now := time.Now()
-       c.status[issueId] = &ticket.IssueStatusHistory{
-               IssueId:        issueId,
-               OriginalStatus: cl.ToString,
-               StartDate:      cl.Created,
-               EndDate:        &now,
-       }
-       err = c.db.Clauses(clause.OnConflict{
-               UpdateAll: true,
-       }).Create(c.status[issueId]).Error
-       if err != nil {
-               return err
-       }
-       return nil
-}
-
-func (c *SprintIssuesConverter) handleAssignee(connectionId uint64, cl 
ChangelogItemResult) error {
-       var err error
-       issueId := c.issueIdGen.Generate(connectionId, cl.IssueId)
-       if assigneeHistory := c.assignee[issueId]; assigneeHistory != nil {
-               assigneeHistory.EndDate = &cl.Created
-               err = c.db.Clauses(clause.OnConflict{
-                       UpdateAll: true,
-               }).Create(assigneeHistory).Error
-               if err != nil {
-                       return err
-               }
-       }
-       var assignee string
-       if cl.ToValue != "" {
-               assignee = c.userIdGen.Generate(connectionId, cl.ToValue)
-       }
-       now := time.Now()
-       c.assignee[issueId] = &ticket.IssueAssigneeHistory{
-               IssueId:   issueId,
-               Assignee:  assignee,
-               StartDate: cl.Created,
-               EndDate:   &now,
-       }
-       err = c.db.Clauses(clause.OnConflict{
-               UpdateAll: true,
-       }).Create(c.assignee[issueId]).Error
+       issueIdGen := didgen.NewDomainIdGenerator(&models.JiraIssue{})
+       sprintIdGen := didgen.NewDomainIdGenerator(&models.JiraSprint{})
+
+       converter, err := helper.NewDataConverter(helper.DataConverterArgs{
+               InputRowType: reflect.TypeOf(models.JiraSprintIssue{}),
+               Input:        cursor,
+               RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
+                       Ctx: taskCtx,
+                       Params: JiraApiParams{
+                               ConnectionId: data.Connection.ID,
+                               BoardId:      data.Options.BoardId,
+                       },
+                       Table: RAW_ISSUE_TABLE,
+               },
+               Convert: func(inputRow interface{}) ([]interface{}, error) {
+                       jiraSprintIssue := inputRow.(*models.JiraSprintIssue)
+                       sprintIssue := &ticket.SprintIssue{
+                               SprintId: 
sprintIdGen.Generate(data.Options.ConnectionId, jiraSprintIssue.SprintId),
+                               IssueId:  
issueIdGen.Generate(data.Options.ConnectionId, jiraSprintIssue.IssueId),
+                       }
+                       return []interface{}{sprintIssue}, nil
+               },
+       })
        if err != nil {
                return err
        }
-       delete(c.assigneeDefault, issueId)
-       return nil
-}
 
-func getStage(t time.Time, sprintStart, sprintComplete *time.Time) *string {
-       if sprintStart == nil {
-               return &ticket.BeforeSprint
-       }
-       if sprintStart.After(t) {
-               return &ticket.BeforeSprint
-       }
-       if sprintComplete == nil {
-               return &ticket.DuringSprint
-       }
-       if sprintComplete.Before(t) {
-               return &ticket.AfterSprint
-       }
-       return &ticket.DuringSprint
+       return converter.Execute()
 }
diff --git a/plugins/tapd/tasks/issue_assign_history_converter.go 
b/plugins/tapd/tasks/issue_assign_history_converter.go
deleted file mode 100644
index d64b1eaf..00000000
--- a/plugins/tapd/tasks/issue_assign_history_converter.go
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements.  See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package tasks
-
-//import (
-//     "github.com/apache/incubator-devlake/models/domainlayer/ticket"
-//     "github.com/apache/incubator-devlake/plugins/core"
-//     "github.com/apache/incubator-devlake/plugins/helper"
-//     "github.com/apache/incubator-devlake/plugins/tapd/models"
-//     "reflect"
-//)
-//
-//func ConvertIssueAssigneeHistory(taskCtx core.SubTaskContext) error {
-//     data := taskCtx.GetData().(*TapdTaskData)
-//     logger := taskCtx.GetLogger()
-//     db := taskCtx.GetDb()
-//     logger.Info("convert board:%d", data.Options.WorkspaceID)
-//
-//     cursor, err := 
db.Model(&models.TapdIssueAssigneeHistory{}).Where("connection_id = ? AND 
workspace_id = ?", data.Connection.ID, data.Options.WorkspaceID).Rows()
-//     if err != nil {
-//             return err
-//     }
-//     defer cursor.Close()
-//     converter, err := helper.NewDataConverter(helper.DataConverterArgs{
-//             RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
-//                     Ctx: taskCtx,
-//                     Params: TapdApiParams{
-//                             ConnectionId: data.Connection.ID,
-//
-//                             WorkspaceID: data.Options.WorkspaceID,
-//                     },
-//                     Table: "tapd_api_%",
-//             },
-//             InputRowType: reflect.TypeOf(models.TapdIssueAssigneeHistory{}),
-//             Input:        cursor,
-//             Convert: func(inputRow interface{}) ([]interface{}, error) {
-//                     toolL := inputRow.(*models.TapdIssueAssigneeHistory)
-//                     domainL := &ticket.IssueAssigneeHistory{
-//                             IssueId:   
IssueIdGen.Generate(data.Connection.ID, toolL.IssueId),
-//                             Assignee:  toolL.Assignee,
-//                             StartDate: toolL.StartDate,
-//                             EndDate:   &toolL.EndDate,
-//                     }
-//                     return []interface{}{
-//                             domainL,
-//                     }, nil
-//             },
-//     })
-//     if err != nil {
-//             return err
-//     }
-//
-//     return converter.Execute()
-//}
-//
-//var ConvertIssueAssigneeHistoryMeta = core.SubTaskMeta{
-//     Name:             "convertIssueAssigneeHistory",
-//     EntryPoint:       ConvertIssueAssigneeHistory,
-//     EnabledByDefault: true,
-//     Description:      "convert Tapd IssueAssigneeHistory",
-//}
diff --git a/plugins/tapd/tasks/issue_sprint_history_converter.go 
b/plugins/tapd/tasks/issue_sprint_history_converter.go
deleted file mode 100644
index c39e4531..00000000
--- a/plugins/tapd/tasks/issue_sprint_history_converter.go
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements.  See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package tasks
-
-//import (
-//     "github.com/apache/incubator-devlake/models/domainlayer/didgen"
-//     "github.com/apache/incubator-devlake/models/domainlayer/ticket"
-//     "github.com/apache/incubator-devlake/plugins/core"
-//     "github.com/apache/incubator-devlake/plugins/helper"
-//     "github.com/apache/incubator-devlake/plugins/tapd/models"
-//     "reflect"
-//)
-//
-//func ConvertIssueSprintsHistory(taskCtx core.SubTaskContext) error {
-//     data := taskCtx.GetData().(*TapdTaskData)
-//     logger := taskCtx.GetLogger()
-//     db := taskCtx.GetDb()
-//     logger.Info("convert board:%d", data.Options.WorkspaceID)
-//     iterIdGen := didgen.NewDomainIdGenerator(&models.TapdIteration{})
-//     cursor, err := 
db.Model(&models.TapdIssueSprintHistory{}).Where("connection_id = ? AND 
workspace_id = ?", data.Connection.ID, data.Options.WorkspaceID).Rows()
-//     if err != nil {
-//             return err
-//     }
-//     defer cursor.Close()
-//     converter, err := helper.NewDataConverter(helper.DataConverterArgs{
-//             RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
-//                     Ctx: taskCtx,
-//                     Params: TapdApiParams{
-//                             ConnectionId: data.Connection.ID,
-//
-//                             WorkspaceID: data.Options.WorkspaceID,
-//                     },
-//                     Table: "tapd_api_%",
-//             },
-//             InputRowType: reflect.TypeOf(models.TapdIssueSprintHistory{}),
-//             Input:        cursor,
-//             Convert: func(inputRow interface{}) ([]interface{}, error) {
-//                     toolL := inputRow.(*models.TapdIssueSprintHistory)
-//                     domainL := &ticket.IssueSprintsHistory{
-//                             IssueId:   
IssueIdGen.Generate(data.Connection.ID, toolL.IssueId),
-//                             SprintId:  
iterIdGen.Generate(data.Connection.ID, toolL.SprintId),
-//                             StartDate: toolL.StartDate,
-//                             EndDate:   &toolL.EndDate,
-//                     }
-//                     return []interface{}{
-//                             domainL,
-//                     }, nil
-//             },
-//     })
-//     if err != nil {
-//             return err
-//     }
-//
-//     return converter.Execute()
-//}
-//
-//var ConvertIssueSprintsHistoryMeta = core.SubTaskMeta{
-//     Name:             "convertIssueSprintsHistory",
-//     EntryPoint:       ConvertIssueSprintsHistory,
-//     EnabledByDefault: true,
-//     Description:      "convert Tapd IssueSprintsHistory",
-//}
diff --git a/plugins/tapd/tasks/issue_status_history_converter.go 
b/plugins/tapd/tasks/issue_status_history_converter.go
deleted file mode 100644
index 263d2c11..00000000
--- a/plugins/tapd/tasks/issue_status_history_converter.go
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements.  See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package tasks
-
-//import (
-//     "github.com/apache/incubator-devlake/models/domainlayer/ticket"
-//     "github.com/apache/incubator-devlake/plugins/core"
-//     "github.com/apache/incubator-devlake/plugins/helper"
-//     "github.com/apache/incubator-devlake/plugins/tapd/models"
-//     "reflect"
-//)
-//
-//func ConvertIssueStatusHistory(taskCtx core.SubTaskContext) error {
-//     data := taskCtx.GetData().(*TapdTaskData)
-//     logger := taskCtx.GetLogger()
-//     db := taskCtx.GetDb()
-//     logger.Info("convert board:%d", data.Options.WorkspaceID)
-//     cursor, err := 
db.Model(&models.TapdIssueStatusHistory{}).Where("connection_id = ? AND 
workspace_id = ?", data.Connection.ID, data.Options.WorkspaceID).Rows()
-//     if err != nil {
-//             return err
-//     }
-//     defer cursor.Close()
-//     converter, err := helper.NewDataConverter(helper.DataConverterArgs{
-//             RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
-//                     Ctx: taskCtx,
-//                     Params: TapdApiParams{
-//                             ConnectionId: data.Connection.ID,
-//
-//                             WorkspaceID: data.Options.WorkspaceID,
-//                     },
-//                     Table: "tapd_api_%",
-//             },
-//             InputRowType: reflect.TypeOf(models.TapdIssueStatusHistory{}),
-//             Input:        cursor,
-//             Convert: func(inputRow interface{}) ([]interface{}, error) {
-//                     toolL := inputRow.(*models.TapdIssueStatusHistory)
-//                     domainL := &ticket.IssueStatusHistory{
-//                             IssueId:        
IssueIdGen.Generate(data.Connection.ID, toolL.IssueId),
-//                             OriginalStatus: toolL.OriginalStatus,
-//                             StartDate:      toolL.StartDate,
-//                             EndDate:        &toolL.EndDate,
-//                     }
-//                     return []interface{}{
-//                             domainL,
-//                     }, nil
-//             },
-//     })
-//     if err != nil {
-//             return err
-//     }
-//
-//     return converter.Execute()
-//}
-//
-//var ConvertIssueStatusHistoryMeta = core.SubTaskMeta{
-//     Name:             "convertIssueStatusHistory",
-//     EntryPoint:       ConvertIssueStatusHistory,
-//     EnabledByDefault: true,
-//     Description:      "convert Tapd IssueStatusHistory",
-//}

Reply via email to