You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by zh...@apache.org on 2022/07/08 03:38:06 UTC
[incubator-devlake] branch main updated: feat: update jira user to account and update changlog to issue_changlog (#2435)
This is an automated email from the ASF dual-hosted git repository.
zhangliang2022 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 0f21d25c feat: update jira user to account and update changlog to issue_changlog (#2435)
0f21d25c is described below
commit 0f21d25cf6c7cb250cba04edffca9aef7daca042
Author: abeizn <10...@users.noreply.github.com>
AuthorDate: Fri Jul 8 11:38:01 2022 +0800
feat: update jira user to account and update changlog to issue_changlog (#2435)
* feat: create tables
* fix: remove OrgId field
* refactor: rename users to accounts
* feat: team feature update users to account on tool layer step2:github
* feat: team feature update users to account on tool layer step2:github
* feat: team feature update users to account on tool layer step2:github
* feat: update gilab user to account
* feat: update gilab user to account
* feat: update gilab user to account
* feat: update gilab user to account
* feat: update jira user to account
* feat: update jira user to account
* feat: update jira user to account
* feat: update jira user to account
* feat: update jira user to account
* feat: update jira user to account and update changelog to issue changelog
Co-authored-by: zhangliang <li...@merico.dev>
---
plugins/gitlab/e2e/issues_test.go | 5 +-
plugins/gitlab/models/{user.go => account.go} | 0
plugins/gitlab/models/issue.go | 36 ------
.../archived/{user.go => account.go} | 0
.../models/migrationscripts/archived/issue.go | 36 ------
plugins/gitlab/tasks/issue_extractor.go | 6 +-
plugins/jira/e2e/changelog_test.go | 22 ++--
plugins/jira/e2e/issue_test.go | 6 +-
...logs.csv => _raw_jira_api_issue_changelogs.csv} | 0
...ms.csv => _tool_jira_issue_changelog_items.csv} | 0
...ngelogs.csv => _tool_jira_issue_changelogs.csv} | 60 ++++-----
plugins/jira/e2e/snapshot_tables/changelogs.csv | 31 -----
.../jira/e2e/snapshot_tables/issue_changelogs.csv | 31 +++++
plugins/jira/e2e/snapshot_tables/issues.csv | 60 ++++-----
plugins/jira/impl/impl.go | 12 +-
plugins/jira/models/{user.go => account.go} | 4 +-
.../models/{changelog.go => issue_changelog.go} | 12 +-
.../archived/{user.go => account.go} | 18 +--
.../jira/models/migrationscripts/archived/board.go | 23 +---
.../archived/{project.go => board_issue.go} | 13 +-
.../models/migrationscripts/archived/connection.go | 66 ++++++++++
.../archived/connection_history.go | 56 ++++++++
.../jira/models/migrationscripts/archived/issue.go | 23 +---
.../archived/{changelog.go => issue_changelog.go} | 35 ++---
.../archived/{remotelink.go => issue_commit.go} | 18 +--
.../issue_label.go} | 28 +---
.../models/migrationscripts/archived/project.go | 10 +-
.../models/migrationscripts/archived/remotelink.go | 7 +-
.../models/migrationscripts/archived/source.go | 57 ---------
.../models/migrationscripts/archived/sprint.go | 10 +-
.../status.go} | 21 +--
.../models/migrationscripts/archived/worklog.go | 3 +-
.../jira/models/migrationscripts/init_schema.go | 142 +++++++++++++++++++--
plugins/jira/models/migrationscripts/register.go | 13 --
.../migrationscripts/updateSchemas20220505.go | 124 ------------------
.../migrationscripts/updateSchemas20220507.go | 94 --------------
.../migrationscripts/updateSchemas20220525.go | 61 ---------
.../migrationscripts/updateSchemas20220526.go | 99 --------------
.../migrationscripts/updateSchemas20220527.go | 68 ----------
.../migrationscripts/updateSchemas20220601.go | 132 -------------------
.../migrationscripts/updateSchemas20220615.go | 64 ----------
.../migrationscripts/updateSchemas20220620.go | 75 -----------
.../migrationscripts/updateSchemas20220624.go | 57 ---------
.../migrationscripts/updateSchemas20220630.go | 60 ---------
.../migrationscripts/update_schemas20220518.go | 96 --------------
.../{user_collector.go => account_collector.go} | 18 +--
.../{user_convertor.go => account_convertor.go} | 31 ++---
.../{user_extractor.go => account_extractor.go} | 12 +-
plugins/jira/tasks/apiv2models/changelog.go | 21 +--
plugins/jira/tasks/apiv2models/issue.go | 17 +--
plugins/jira/tasks/apiv2models/user.go | 8 +-
plugins/jira/tasks/apiv2models/user_test.go | 2 +-
plugins/jira/tasks/apiv2models/worklog.go | 7 +-
...g_collector.go => issue_changelog_collector.go} | 16 +--
...g_convertor.go => issue_changelog_convertor.go} | 47 +++----
...g_extractor.go => issue_changelog_extractor.go} | 12 +-
plugins/jira/tasks/issue_convertor.go | 9 +-
plugins/jira/tasks/worklog_convertor.go | 7 +-
58 files changed, 564 insertions(+), 1437 deletions(-)
diff --git a/plugins/gitlab/e2e/issues_test.go b/plugins/gitlab/e2e/issues_test.go
index 13be2605..b98fcfdb 100644
--- a/plugins/gitlab/e2e/issues_test.go
+++ b/plugins/gitlab/e2e/issues_test.go
@@ -19,9 +19,10 @@ package e2e
import (
"fmt"
- "github.com/apache/incubator-devlake/models/domainlayer/ticket"
"testing"
+ "github.com/apache/incubator-devlake/models/domainlayer/ticket"
+
"github.com/apache/incubator-devlake/helpers/e2ehelper"
"github.com/apache/incubator-devlake/plugins/gitlab/impl"
"github.com/apache/incubator-devlake/plugins/gitlab/models"
@@ -45,7 +46,7 @@ func TestGitlabIssueDataFlow(t *testing.T) {
// verify extraction
dataflowTester.FlushTabler(&models.GitlabIssue{})
- dataflowTester.FlushTabler(&models.GitlabAuthor{})
+ dataflowTester.FlushTabler(&models.GitlabAccount{})
dataflowTester.FlushTabler(&models.GitlabIssueLabel{})
dataflowTester.Subtask(tasks.ExtractApiIssuesMeta, taskData)
dataflowTester.VerifyTable(
diff --git a/plugins/gitlab/models/user.go b/plugins/gitlab/models/account.go
similarity index 100%
rename from plugins/gitlab/models/user.go
rename to plugins/gitlab/models/account.go
diff --git a/plugins/gitlab/models/issue.go b/plugins/gitlab/models/issue.go
index 9bcb1b57..a0296800 100644
--- a/plugins/gitlab/models/issue.go
+++ b/plugins/gitlab/models/issue.go
@@ -53,39 +53,3 @@ type GitlabIssue struct {
func (GitlabIssue) TableName() string {
return "_tool_gitlab_issues"
}
-
-type GitlabAuthor struct {
- ConnectionId uint64 `gorm:"primaryKey"`
- GitlabId int `gorm:"primaryKey" json:"id"`
- Username string `gorm:"type:varchar(255)"`
- Email string `gorm:"type:varchar(255)"`
- Name string `gorm:"type:varchar(255)"`
- State string `gorm:"type:varchar(255)"`
- MembershipState string `json:"membership_state" gorm:"type:varchar(255)"`
- AvatarUrl string `json:"avatar_url" gorm:"type:varchar(255)"`
- WebUrl string `json:"web_url" gorm:"type:varchar(255)"`
-
- common.NoPKModel
-}
-
-func (GitlabAuthor) TableName() string {
- return "_tool_gitlab_accounts"
-}
-
-type GitlabAssignee struct {
- ConnectionId uint64 `gorm:"primaryKey"`
- GitlabId int `gorm:"primaryKey" json:"id"`
- Username string `gorm:"type:varchar(255)"`
- Email string `gorm:"type:varchar(255)"`
- Name string `gorm:"type:varchar(255)"`
- State string `gorm:"type:varchar(255)"`
- MembershipState string `json:"membership_state" gorm:"type:varchar(255)"`
- AvatarUrl string `json:"avatar_url" gorm:"type:varchar(255)"`
- WebUrl string `json:"web_url" gorm:"type:varchar(255)"`
-
- common.NoPKModel
-}
-
-func (GitlabAssignee) TableName() string {
- return "_tool_gitlab_accounts"
-}
diff --git a/plugins/gitlab/models/migrationscripts/archived/user.go b/plugins/gitlab/models/migrationscripts/archived/account.go
similarity index 100%
rename from plugins/gitlab/models/migrationscripts/archived/user.go
rename to plugins/gitlab/models/migrationscripts/archived/account.go
diff --git a/plugins/gitlab/models/migrationscripts/archived/issue.go b/plugins/gitlab/models/migrationscripts/archived/issue.go
index 81f08434..e65d1259 100644
--- a/plugins/gitlab/models/migrationscripts/archived/issue.go
+++ b/plugins/gitlab/models/migrationscripts/archived/issue.go
@@ -53,39 +53,3 @@ type GitlabIssue struct {
func (GitlabIssue) TableName() string {
return "_tool_gitlab_issues"
}
-
-type GitlabAuthor struct {
- ConnectionId uint64 `gorm:"primaryKey"`
- GitlabId int `gorm:"primaryKey" json:"id"`
- Username string `gorm:"type:varchar(255)"`
- Email string `gorm:"type:varchar(255)"`
- Name string `gorm:"type:varchar(255)"`
- State string `gorm:"type:varchar(255)"`
- MembershipState string `json:"membership_state" gorm:"type:varchar(255)"`
- AvatarUrl string `json:"avatar_url" gorm:"type:varchar(255)"`
- WebUrl string `json:"web_url" gorm:"type:varchar(255)"`
-
- archived.NoPKModel
-}
-
-func (GitlabAuthor) TableName() string {
- return "_tool_gitlab_accounts"
-}
-
-type GitlabAssignee struct {
- ConnectionId uint64 `gorm:"primaryKey"`
- GitlabId int `gorm:"primaryKey" json:"id"`
- Username string `gorm:"type:varchar(255)"`
- Email string `gorm:"type:varchar(255)"`
- Name string `gorm:"type:varchar(255)"`
- State string `gorm:"type:varchar(255)"`
- MembershipState string `json:"membership_state" gorm:"type:varchar(255)"`
- AvatarUrl string `json:"avatar_url" gorm:"type:varchar(255)"`
- WebUrl string `json:"web_url" gorm:"type:varchar(255)"`
-
- archived.NoPKModel
-}
-
-func (GitlabAssignee) TableName() string {
- return "_tool_gitlab_accounts"
-}
diff --git a/plugins/gitlab/tasks/issue_extractor.go b/plugins/gitlab/tasks/issue_extractor.go
index f4d35488..964ccc06 100644
--- a/plugins/gitlab/tasks/issue_extractor.go
+++ b/plugins/gitlab/tasks/issue_extractor.go
@@ -260,7 +260,7 @@ func ExtractApiIssues(taskCtx core.SubTaskContext) error {
results = append(results, gitlabIssue)
for _, v := range body.Assignees {
- GitlabAssignee := &models.GitlabAssignee{
+ GitlabAssignee := &models.GitlabAccount{
ConnectionId: data.Options.ConnectionId,
Username: v.Username,
Name: v.Name,
@@ -316,8 +316,8 @@ func convertGitlabIssue(issue *IssuesResponse, projectId int) (*models.GitlabIss
return gitlabIssue, nil
}
-func convertGitlabAuthor(issue *IssuesResponse, connectionId uint64) (*models.GitlabAuthor, error) {
- gitlabAuthor := &models.GitlabAuthor{
+func convertGitlabAuthor(issue *IssuesResponse, connectionId uint64) (*models.GitlabAccount, error) {
+ gitlabAuthor := &models.GitlabAccount{
ConnectionId: connectionId,
GitlabId: issue.Author.Id,
Username: issue.Author.Username,
diff --git a/plugins/jira/e2e/changelog_test.go b/plugins/jira/e2e/changelog_test.go
index 8dcaec25..562cd203 100644
--- a/plugins/jira/e2e/changelog_test.go
+++ b/plugins/jira/e2e/changelog_test.go
@@ -39,16 +39,16 @@ func TestChangelogDataFlow(t *testing.T) {
}
// import raw data table
- dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_jira_api_changelogs.csv", "_raw_jira_api_changelogs")
+ dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_jira_api_issue_changelogs.csv", "_raw_jira_api_issue_changelogs")
// verify changelog extraction
- dataflowTester.FlushTabler(&models.JiraChangelog{})
- dataflowTester.FlushTabler(&models.JiraChangelogItem{})
- dataflowTester.FlushTabler(&models.JiraUser{})
- dataflowTester.Subtask(tasks.ExtractChangelogsMeta, taskData)
+ dataflowTester.FlushTabler(&models.JiraIssueChangelogs{})
+ dataflowTester.FlushTabler(&models.JiraIssueChangelogItems{})
+ dataflowTester.FlushTabler(&models.JiraAccount{})
+ dataflowTester.Subtask(tasks.ExtractIssueChangelogsMeta, taskData)
dataflowTester.VerifyTable(
- models.JiraChangelog{},
- "./snapshot_tables/_tool_jira_changelogs.csv",
+ models.JiraIssueChangelogs{},
+ "./snapshot_tables/_tool_jira_issue_changelogs.csv",
[]string{
"connection_id",
"changelog_id",
@@ -66,8 +66,8 @@ func TestChangelogDataFlow(t *testing.T) {
)
dataflowTester.VerifyTable(
- models.JiraChangelogItem{},
- "./snapshot_tables/_tool_jira_changelog_items.csv",
+ models.JiraIssueChangelogItems{},
+ "./snapshot_tables/_tool_jira_issue_changelog_items.csv",
[]string{
"connection_id",
"changelog_id",
@@ -84,10 +84,10 @@ func TestChangelogDataFlow(t *testing.T) {
// verify changelog conversion
dataflowTester.ImportCsvIntoTabler("./snapshot_tables/_tool_jira_board_issues_for_changelog.csv", &models.JiraBoardIssue{})
dataflowTester.FlushTabler(&ticket.Changelog{})
- dataflowTester.Subtask(tasks.ConvertChangelogsMeta, taskData)
+ dataflowTester.Subtask(tasks.ConvertIssueChangelogsMeta, taskData)
dataflowTester.VerifyTable(
ticket.Changelog{},
- "./snapshot_tables/changelogs.csv",
+ "./snapshot_tables/issue_changelogs.csv",
[]string{
"id",
"issue_id",
diff --git a/plugins/jira/e2e/issue_test.go b/plugins/jira/e2e/issue_test.go
index 5dd29c6f..aa7b4272 100644
--- a/plugins/jira/e2e/issue_test.go
+++ b/plugins/jira/e2e/issue_test.go
@@ -45,10 +45,10 @@ func TestIssueDataFlow(t *testing.T) {
dataflowTester.FlushTabler(&models.JiraIssue{})
dataflowTester.FlushTabler(&models.JiraBoardIssue{})
dataflowTester.FlushTabler(&models.JiraSprintIssue{})
- dataflowTester.FlushTabler(&models.JiraChangelog{})
- dataflowTester.FlushTabler(&models.JiraChangelogItem{})
+ dataflowTester.FlushTabler(&models.JiraIssueChangelogs{})
+ dataflowTester.FlushTabler(&models.JiraIssueChangelogItems{})
dataflowTester.FlushTabler(&models.JiraWorklog{})
- dataflowTester.FlushTabler(&models.JiraUser{})
+ dataflowTester.FlushTabler(&models.JiraAccount{})
dataflowTester.Subtask(tasks.ExtractIssuesMeta, taskData)
dataflowTester.VerifyTable(
models.JiraIssue{},
diff --git a/plugins/jira/e2e/raw_tables/_raw_jira_api_changelogs.csv b/plugins/jira/e2e/raw_tables/_raw_jira_api_issue_changelogs.csv
similarity index 100%
rename from plugins/jira/e2e/raw_tables/_raw_jira_api_changelogs.csv
rename to plugins/jira/e2e/raw_tables/_raw_jira_api_issue_changelogs.csv
diff --git a/plugins/jira/e2e/snapshot_tables/_tool_jira_changelog_items.csv b/plugins/jira/e2e/snapshot_tables/_tool_jira_issue_changelog_items.csv
similarity index 100%
rename from plugins/jira/e2e/snapshot_tables/_tool_jira_changelog_items.csv
rename to plugins/jira/e2e/snapshot_tables/_tool_jira_issue_changelog_items.csv
diff --git a/plugins/jira/e2e/snapshot_tables/_tool_jira_changelogs.csv b/plugins/jira/e2e/snapshot_tables/_tool_jira_issue_changelogs.csv
similarity index 68%
rename from plugins/jira/e2e/snapshot_tables/_tool_jira_changelogs.csv
rename to plugins/jira/e2e/snapshot_tables/_tool_jira_issue_changelogs.csv
index a27e4aef..087f70c1 100644
--- a/plugins/jira/e2e/snapshot_tables/_tool_jira_changelogs.csv
+++ b/plugins/jira/e2e/snapshot_tables/_tool_jira_issue_changelogs.csv
@@ -1,31 +1,31 @@
connection_id,changelog_id,issue_id,author_account_id,author_display_name,author_active,created,issue_updated,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
-2,11646,10063,5ecfbd0ba04d9c0c220c18d8,yanghui,1,2020-06-17T07:39:14.729+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986053,
-2,11648,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-17T07:40:05.335+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986054,
-2,11677,10063,5ecfbd0ba04d9c0c220c18d8,yanghui,1,2020-06-17T07:46:44.006+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986055,
-2,11798,10063,5ecfbd0c2490cf0c09e2e598,Gerile Tu,1,2020-06-18T05:58:14.769+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986056,
-2,11913,10063,5ecfbd0c2490cf0c09e2e598,Gerile Tu,1,2020-06-19T01:07:20.709+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986057,
-2,11915,10063,5ecfbd0c2490cf0c09e2e598,Gerile Tu,1,2020-06-19T01:07:59.090+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986058,
-2,11935,10063,5ecfbd0c2490cf0c09e2e598,Gerile Tu,1,2020-06-19T01:31:52.567+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986059,
-2,11993,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-19T05:30:01.576+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986060,
-2,12011,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-19T06:25:41.732+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986061,
-2,12016,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-19T06:26:00.014+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986062,
-2,12058,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-19T08:37:40.933+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986063,
-2,12766,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-27T19:20:53.685+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986064,
-2,13012,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-28T19:33:53.703+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986065,
-2,13181,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-29T19:34:20.886+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986066,
-2,13187,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-29T19:34:21.216+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986067,
-2,13189,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-29T19:34:21.533+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986068,
-2,13190,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-29T19:34:21.602+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986069,
-2,13192,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-29T19:34:21.612+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986070,
-2,13193,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-29T19:34:21.632+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986071,
-2,13194,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-29T19:34:21.652+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986072,
-2,13257,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-30T07:08:13.527+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986073,
-2,15273,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-07-05T18:20:07.965+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986074,
-2,15274,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-07-05T18:20:09.481+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986075,
-2,15305,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-07-05T18:20:35.972+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986076,
-2,15310,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-07-05T18:20:36.221+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986077,
-2,15351,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-07-05T23:49:54.024+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986078,
-2,15357,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-07-05T23:49:54.265+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986079,
-2,15397,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-07-06T02:45:22.440+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986080,
-2,15400,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-07-06T02:45:22.555+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986081,
-2,15536,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-07-06T12:38:44.036+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_changelogs,986082,
+2,11646,10063,5ecfbd0ba04d9c0c220c18d8,yanghui,1,2020-06-17T07:39:14.729+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986053,
+2,11648,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-17T07:40:05.335+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986054,
+2,11677,10063,5ecfbd0ba04d9c0c220c18d8,yanghui,1,2020-06-17T07:46:44.006+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986055,
+2,11798,10063,5ecfbd0c2490cf0c09e2e598,Gerile Tu,1,2020-06-18T05:58:14.769+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986056,
+2,11913,10063,5ecfbd0c2490cf0c09e2e598,Gerile Tu,1,2020-06-19T01:07:20.709+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986057,
+2,11915,10063,5ecfbd0c2490cf0c09e2e598,Gerile Tu,1,2020-06-19T01:07:59.090+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986058,
+2,11935,10063,5ecfbd0c2490cf0c09e2e598,Gerile Tu,1,2020-06-19T01:31:52.567+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986059,
+2,11993,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-19T05:30:01.576+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986060,
+2,12011,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-19T06:25:41.732+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986061,
+2,12016,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-19T06:26:00.014+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986062,
+2,12058,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-19T08:37:40.933+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986063,
+2,12766,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-27T19:20:53.685+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986064,
+2,13012,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-28T19:33:53.703+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986065,
+2,13181,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-29T19:34:20.886+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986066,
+2,13187,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-29T19:34:21.216+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986067,
+2,13189,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-29T19:34:21.533+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986068,
+2,13190,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-29T19:34:21.602+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986069,
+2,13192,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-29T19:34:21.612+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986070,
+2,13193,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-29T19:34:21.632+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986071,
+2,13194,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-29T19:34:21.652+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986072,
+2,13257,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-06-30T07:08:13.527+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986073,
+2,15273,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-07-05T18:20:07.965+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986074,
+2,15274,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-07-05T18:20:09.481+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986075,
+2,15305,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-07-05T18:20:35.972+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986076,
+2,15310,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-07-05T18:20:36.221+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986077,
+2,15351,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-07-05T23:49:54.024+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986078,
+2,15357,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-07-05T23:49:54.265+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986079,
+2,15397,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-07-06T02:45:22.440+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986080,
+2,15400,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-07-06T02:45:22.555+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986081,
+2,15536,10063,5e9711ba34f7b90c0fbc37d3,Rankin Zheng,1,2020-07-06T12:38:44.036+00:00,2021-03-28T08:06:12.964+00:00,"{""ConnectionId"":2,""BoardId"":8}",_raw_jira_api_issue_changelogs,986082,
diff --git a/plugins/jira/e2e/snapshot_tables/changelogs.csv b/plugins/jira/e2e/snapshot_tables/changelogs.csv
deleted file mode 100644
index 9ede7325..00000000
--- a/plugins/jira/e2e/snapshot_tables/changelogs.csv
+++ /dev/null
@@ -1,31 +0,0 @@
-id,issue_id,author_id,author_name,field_id,field_name,original_from_value,original_to_value,from_value,to_value,created_date
-jira:JiraChangelogItem:2:11646:assignee,jira:JiraIssue:2:10063,jira:JiraUser:2:5ecfbd0ba04d9c0c220c18d8,yanghui,,assignee,,jira:JiraUser:2:5ecfbd0ba04d9c0c220c18d8,,,2020-06-17T07:39:14.729+00:00
-jira:JiraChangelogItem:2:11648:assignee,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,assignee,jira:JiraUser:2:5ecfbd0ba04d9c0c220c18d8,jira:JiraUser:2:5ecfbd0c2490cf0c09e2e598,,,2020-06-17T07:40:05.335+00:00
-jira:JiraChangelogItem:2:11677:summary,jira:JiraIssue:2:10063,jira:JiraUser:2:5ecfbd0ba04d9c0c220c18d8,yanghui,,summary,[Industry Metrics],[Industry Metrics],,,2020-06-17T07:46:44.006+00:00
-jira:JiraChangelogItem:2:11798:summary,jira:JiraIssue:2:10063,jira:JiraUser:2:5ecfbd0c2490cf0c09e2e598,Gerile Tu,,summary,[Industry Metrics],[Industry Metrics] ,,,2020-06-18T05:58:14.769+00:00
-jira:JiraChangelogItem:2:11913:Component,jira:JiraIssue:2:10063,jira:JiraUser:2:5ecfbd0c2490cf0c09e2e598,Gerile Tu,,Component,,Industry Metrics,,,2020-06-19T01:07:20.709+00:00
-jira:JiraChangelogItem:2:11915:Component,jira:JiraIssue:2:10063,jira:JiraUser:2:5ecfbd0c2490cf0c09e2e598,Gerile Tu,,Component,,Charts,,,2020-06-19T01:07:59.090+00:00
-jira:JiraChangelogItem:2:11935:Component,jira:JiraIssue:2:10063,jira:JiraUser:2:5ecfbd0c2490cf0c09e2e598,Gerile Tu,,Component,Charts,,,,2020-06-19T01:31:52.567+00:00
-jira:JiraChangelogItem:2:11993:Rank,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,Rank,,Ranked higher,,,2020-06-19T05:30:01.576+00:00
-jira:JiraChangelogItem:2:12011:Epic Link,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,Epic Link,,EE-22,,,2020-06-19T06:25:41.732+00:00
-jira:JiraChangelogItem:2:12016:summary,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,summary,[Industry Metrics] ,,,,2020-06-19T06:26:00.014+00:00
-jira:JiraChangelogItem:2:12058:Rank,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,Rank,,Ranked higher,,,2020-06-19T08:37:40.933+00:00
-jira:JiraChangelogItem:2:12766:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add industry unittest (Web Link)""",,,2020-06-27T19:20:53.685+00:00
-jira:JiraChangelogItem:2:13012:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add IndustryQuery (getEfficiencyMetric) (Web Link)""",,,2020-06-28T19:33:53.703+00:00
-jira:JiraChangelogItem:2:13181:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add IndustryQuery.test.ts (Web Link)""",,,2020-06-29T19:34:20.886+00:00
-jira:JiraChangelogItem:2:13187:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectEfficiency (which has a developer bug) (Web Link)""",,,2020-06-29T19:34:21.216+00:00
-jira:JiraChangelogItem:2:13189:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add IndustryQuery (getEfficiencyMetric) (Web Link)""",,,2020-06-29T19:34:21.533+00:00
-jira:JiraChangelogItem:2:13190:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add Industry model (Web Link)""",,,2020-06-29T19:34:21.602+00:00
-jira:JiraChangelogItem:2:13192:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 rename (Web Link)""",,,2020-06-29T19:34:21.612+00:00
-jira:JiraChangelogItem:2:13193:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add industry unittest (Web Link)""",,,2020-06-29T19:34:21.632+00:00
-jira:JiraChangelogItem:2:13194:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add getQualityMetric (Web Link)""",,,2020-06-29T19:34:21.652+00:00
-jira:JiraChangelogItem:2:13257:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web Link)""",,,2020-06-30T07:08:13.527+00:00
-jira:JiraChangelogItem:2:15273:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web Link)""","This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web Link)""",,,2020-07-05T18:20:07.965+00:00
-jira:JiraChangelogItem:2:15274:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectEfficiency (which has a developer bug) (Web Link)""","This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectEfficiency (which has a developer bug) (Web Link)""",,,2020-07-05T18:20:09.481+00:00
-jira:JiraChangelogItem:2:15305:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add group industy data (Web Link)""",,,2020-07-05T18:20:35.972+00:00
-jira:JiraChangelogItem:2:15310:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 fix group industry data's bug (Web Link)""",,,2020-07-05T18:20:36.221+00:00
-jira:JiraChangelogItem:2:15351:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web Link)""","This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web Link)""",,,2020-07-05T23:49:54.024+00:00
-jira:JiraChangelogItem:2:15357:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 fix group industry data's bug (Web Link)""","This issue links to ""Commit - #EE-160 fix group industry data's bug (Web Link)""",,,2020-07-05T23:49:54.265+00:00
-jira:JiraChangelogItem:2:15397:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web Link)""","This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web Link)""",,,2020-07-06T02:45:22.440+00:00
-jira:JiraChangelogItem:2:15400:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 fix group industry data's bug (Web Link)""","This issue links to ""Commit - #EE-160 fix group industry data's bug (Web Link)""",,,2020-07-06T02:45:22.555+00:00
-jira:JiraChangelogItem:2:15536:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web Link)""","This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web Link)""",,,2020-07-06T12:38:44.036+00:00
diff --git a/plugins/jira/e2e/snapshot_tables/issue_changelogs.csv b/plugins/jira/e2e/snapshot_tables/issue_changelogs.csv
new file mode 100644
index 00000000..c2b50162
--- /dev/null
+++ b/plugins/jira/e2e/snapshot_tables/issue_changelogs.csv
@@ -0,0 +1,31 @@
+id,issue_id,author_id,author_name,field_id,field_name,original_from_value,original_to_value,from_value,to_value,created_date
+jira:JiraIssueChangelogItems:2:11646:assignee,jira:JiraIssue:2:10063,jira:JiraAccount:2:5ecfbd0ba04d9c0c220c18d8,yanghui,,assignee,,jira:JiraAccount:2:5ecfbd0ba04d9c0c220c18d8,,,2020-06-17T07:39:14.729+00:00
+jira:JiraIssueChangelogItems:2:11648:assignee,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,assignee,jira:JiraAccount:2:5ecfbd0ba04d9c0c220c18d8,jira:JiraAccount:2:5ecfbd0c2490cf0c09e2e598,,,2020-06-17T07:40:05.335+00:00
+jira:JiraIssueChangelogItems:2:11677:summary,jira:JiraIssue:2:10063,jira:JiraAccount:2:5ecfbd0ba04d9c0c220c18d8,yanghui,,summary,[Industry Metrics],[Industry Metrics],,,2020-06-17T07:46:44.006+00:00
+jira:JiraIssueChangelogItems:2:11798:summary,jira:JiraIssue:2:10063,jira:JiraAccount:2:5ecfbd0c2490cf0c09e2e598,Gerile Tu,,summary,[Industry Metrics],[Industry Metrics] ,,,2020-06-18T05:58:14.769+00:00
+jira:JiraIssueChangelogItems:2:11913:Component,jira:JiraIssue:2:10063,jira:JiraAccount:2:5ecfbd0c2490cf0c09e2e598,Gerile Tu,,Component,,Industry Metrics,,,2020-06-19T01:07:20.709+00:00
+jira:JiraIssueChangelogItems:2:11915:Component,jira:JiraIssue:2:10063,jira:JiraAccount:2:5ecfbd0c2490cf0c09e2e598,Gerile Tu,,Component,,Charts,,,2020-06-19T01:07:59.090+00:00
+jira:JiraIssueChangelogItems:2:11935:Component,jira:JiraIssue:2:10063,jira:JiraAccount:2:5ecfbd0c2490cf0c09e2e598,Gerile Tu,,Component,Charts,,,,2020-06-19T01:31:52.567+00:00
+jira:JiraIssueChangelogItems:2:11993:Rank,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,Rank,,Ranked higher,,,2020-06-19T05:30:01.576+00:00
+jira:JiraIssueChangelogItems:2:12011:Epic Link,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,Epic Link,,EE-22,,,2020-06-19T06:25:41.732+00:00
+jira:JiraIssueChangelogItems:2:12016:summary,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,summary,[Industry Metrics] ,,,,2020-06-19T06:26:00.014+00:00
+jira:JiraIssueChangelogItems:2:12058:Rank,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,Rank,,Ranked higher,,,2020-06-19T08:37:40.933+00:00
+jira:JiraIssueChangelogItems:2:12766:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add industry unittest (Web Link)""",,,2020-06-27T19:20:53.685+00:00
+jira:JiraIssueChangelogItems:2:13012:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add IndustryQuery (getEfficiencyMetric) (Web Link)""",,,2020-06-28T19:33:53.703+00:00
+jira:JiraIssueChangelogItems:2:13181:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add IndustryQuery.test.ts (Web Link)""",,,2020-06-29T19:34:20.886+00:00
+jira:JiraIssueChangelogItems:2:13187:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectEfficiency (which has a developer bug) (Web Link)""",,,2020-06-29T19:34:21.216+00:00
+jira:JiraIssueChangelogItems:2:13189:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add IndustryQuery (getEfficiencyMetric) (Web Link)""",,,2020-06-29T19:34:21.533+00:00
+jira:JiraIssueChangelogItems:2:13190:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add Industry model (Web Link)""",,,2020-06-29T19:34:21.602+00:00
+jira:JiraIssueChangelogItems:2:13192:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 rename (Web Link)""",,,2020-06-29T19:34:21.612+00:00
+jira:JiraIssueChangelogItems:2:13193:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add industry unittest (Web Link)""",,,2020-06-29T19:34:21.632+00:00
+jira:JiraIssueChangelogItems:2:13194:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add getQualityMetric (Web Link)""",,,2020-06-29T19:34:21.652+00:00
+jira:JiraIssueChangelogItems:2:13257:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web Link)""",,,2020-06-30T07:08:13.527+00:00
+jira:JiraIssueChangelogItems:2:15273:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web Link)""","This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web Link)""",,,2020-07-05T18:20:07.965+00:00
+jira:JiraIssueChangelogItems:2:15274:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectEfficiency (which has a developer bug) (Web Link)""","This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectEfficiency (which has a developer bug) (Web Link)""",,,2020-07-05T18:20:09.481+00:00
+jira:JiraIssueChangelogItems:2:15305:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 add group industy data (Web Link)""",,,2020-07-05T18:20:35.972+00:00
+jira:JiraIssueChangelogItems:2:15310:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,,"This issue links to ""Commit - #EE-160 fix group industry data's bug (Web Link)""",,,2020-07-05T18:20:36.221+00:00
+jira:JiraIssueChangelogItems:2:15351:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web Link)""","This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web Link)""",,,2020-07-05T23:49:54.024+00:00
+jira:JiraIssueChangelogItems:2:15357:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 fix group industry data's bug (Web Link)""","This issue links to ""Commit - #EE-160 fix group industry data's bug (Web Link)""",,,2020-07-05T23:49:54.265+00:00
+jira:JiraIssueChangelogItems:2:15397:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web Link)""","This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web Link)""",,,2020-07-06T02:45:22.440+00:00
+jira:JiraIssueChangelogItems:2:15400:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 fix group industry data's bug (Web Link)""","This issue links to ""Commit - #EE-160 fix group industry data's bug (Web Link)""",,,2020-07-06T02:45:22.555+00:00
+jira:JiraIssueChangelogItems:2:15536:RemoteIssueLink,jira:JiraIssue:2:10063,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,,RemoteIssueLink,"This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web Link)""","This issue links to ""Commit - #EE-160 add IndustryController.getIndustryProjectQuality (Web Link)""",,,2020-07-06T12:38:44.036+00:00
diff --git a/plugins/jira/e2e/snapshot_tables/issues.csv b/plugins/jira/e2e/snapshot_tables/issues.csv
index 8c6d48d5..a9bd2f7e 100644
--- a/plugins/jira/e2e/snapshot_tables/issues.csv
+++ b/plugins/jira/e2e/snapshot_tables/issues.csv
@@ -1,31 +1,31 @@
id,url,icon_url,issue_key,title,description,epic_key,type,status,original_status,story_point,resolution_date,created_date,updated_date,lead_time_minutes,parent_issue_id,priority,original_estimate_minutes,time_spent_minutes,time_remaining_minutes,creator_id,creator_name,assignee_id,assignee_name,severity,component
-jira:JiraIssue:2:10063,https://merico.atlassian.net/browse/EE-1,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,EE-1,四个排序图:测试/注释覆盖度、复用度、模块性,,,故事,DONE,已完成,-1,2020-06-19T06:31:18.495+00:00,2020-06-12T00:13:13.360+00:00,2021-03-28T08:06:08.713+00:00,10458,,Medium,0,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
-jira:JiraIssue:2:10064,https://merico.atlassian.net/browse/EE-2,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,EE-2,问题堆叠分布排序图,,,故事,DONE,已完成,0,2020-06-23T10:20:58.999+00:00,2020-06-12T00:15:36.123+00:00,2021-03-28T08:05:55.016+00:00,16445,,Medium,0,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
-jira:JiraIssue:2:10065,https://merico.atlassian.net/browse/EE-3,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,EE-3,问题积压图率,,,故事,DONE,已完成,0,2020-06-23T10:21:11.996+00:00,2020-06-12T00:15:41.600+00:00,2021-03-28T08:05:55.061+00:00,16445,,Medium,0,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
-jira:JiraIssue:2:10066,https://merico.atlassian.net/browse/EE-4,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,EE-4,问题分布的帕累托图,,,故事,DONE,已完成,0,2020-06-23T10:21:23.562+00:00,2020-06-12T00:15:46.144+00:00,2021-03-28T08:06:09.535+00:00,16445,,Medium,0,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
-jira:JiraIssue:2:10067,https://merico.atlassian.net/browse/EE-5,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium,EE-5,通用技术任务,,,任务,DONE,已完成,0,2020-06-18T04:06:00.747+00:00,2020-06-12T00:16:44.157+00:00,2021-03-28T08:05:54.622+00:00,8869,,Medium,0,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
-jira:JiraIssue:2:10068,https://merico.atlassian.net/browse/EE-6,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,EE-6,变异系数、生产率的四象限图,,,故事,DONE,已完成,0,2020-06-16T11:56:14.433+00:00,2020-06-12T00:17:26.986+00:00,2021-03-28T08:05:56.750+00:00,6458,,Medium,0,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0c2490cf0c09e2e598,Gerile Tu,,
-jira:JiraIssue:2:10070,https://merico.atlassian.net/browse/EE-8,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium,EE-8,多团队支持,,,任务,DONE,已完成,0,2020-07-08T17:11:45.201+00:00,2020-06-12T00:18:58.050+00:00,2021-03-28T08:05:54.576+00:00,38452,,Medium,0,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0ba04d9c0c220c18d8,yanghui,,
-jira:JiraIssue:2:10071,https://merico.atlassian.net/browse/EE-9,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium,EE-9,Common backend 拆分,,,任务,DONE,已完成,0,2020-07-08T17:12:05.663+00:00,2020-06-12T00:19:17.336+00:00,2021-03-28T08:06:20.165+00:00,38452,,Medium,1680,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0ba04d9c0c220c18d8,yanghui,,
-jira:JiraIssue:2:10072,https://merico.atlassian.net/browse/EE-10,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium,EE-10,部署SaaS版本,,,任务,DONE,已完成,0,2020-07-08T17:11:55.247+00:00,2020-06-12T00:19:24.637+00:00,2021-03-28T08:05:54.472+00:00,38452,,Medium,0,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0ba04d9c0c220c18d8,yanghui,,
-jira:JiraIssue:2:10076,https://merico.atlassian.net/browse/EE-14,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium,EE-14,调整文件夹结构,,,任务,DONE,已完成,0,2020-06-15T08:59:51.304+00:00,2020-06-12T00:24:25.922+00:00,2021-03-28T08:05:56.152+00:00,4835,,Medium,240,600,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0a47d31e0c2a15fd87,yuxiang,,
-jira:JiraIssue:2:10077,https://merico.atlassian.net/browse/EE-15,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium,EE-15,路由权限控制,,,任务,DONE,已完成,0,2020-06-15T09:00:26.956+00:00,2020-06-12T00:24:39.624+00:00,2021-03-28T08:06:01.995+00:00,4835,,Medium,240,480,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0a47d31e0c2a15fd87,yuxiang,,
-jira:JiraIssue:2:10078,https://merico.atlassian.net/browse/EE-16,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium,EE-16,优化前端 webpack 开发阶段构建速度,,,任务,DONE,已完成,0,2020-06-15T09:01:44.159+00:00,2020-06-12T00:24:49.017+00:00,2021-03-28T08:05:55.863+00:00,4836,,Medium,0,60,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0a47d31e0c2a15fd87,yuxiang,,
-jira:JiraIssue:2:10079,https://merico.atlassian.net/browse/EE-17,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium,EE-17,新的错误处理机制,,,任务,DONE,已完成,0,2020-07-22T07:25:29.104+00:00,2020-06-12T00:24:56.048+00:00,2021-03-28T08:05:54.426+00:00,58020,,Medium,360,120,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0a47d31e0c2a15fd87,yuxiang,,
-jira:JiraIssue:2:10081,https://merico.atlassian.net/browse/EE-19,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,EE-19,LDAP需要支持TLS和证书,,,故事,DONE,已完成,0,2020-06-18T08:34:11.117+00:00,2020-06-12T00:28:00.241+00:00,2021-03-28T08:05:57.326+00:00,9126,,Medium,0,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0aaa47a00c1997ea8e,chao.cheng,,
-jira:JiraIssue:2:10082,https://merico.atlassian.net/browse/EE-20,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,EE-20,团队首页垂直化,,,故事,DONE,已完成,0,2020-06-17T07:25:54.370+00:00,2020-06-12T00:29:43.677+00:00,2021-08-06T06:14:54.647+00:00,7616,,Medium,0,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0984083c0c12e5af8f,lin.hao,,
-jira:JiraIssue:2:10085,https://merico.atlassian.net/browse/EE-23,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10303?size=medium,EE-23,批量删除事故,,,缺陷,DONE,已完成,0,2020-06-15T09:07:56.798+00:00,2020-06-12T00:33:57.204+00:00,2021-03-28T08:05:57.095+00:00,4833,,Medium,0,60,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0a47d31e0c2a15fd87,yuxiang,,
-jira:JiraIssue:2:10086,https://merico.atlassian.net/browse/EE-24,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,EE-24,LDAP支持自定义的证书上传,,,故事,DONE,已完成,0,2020-06-12T07:17:28.659+00:00,2020-06-12T00:35:15.489+00:00,2021-03-28T08:05:55.819+00:00,402,,Medium,0,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0aaa47a00c1997ea8e,chao.cheng,,
-jira:JiraIssue:2:10087,https://merico.atlassian.net/browse/EE-25,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-25,组件封装及Demo,,,子任务,DONE,已完成,0,2020-06-18T04:02:22.350+00:00,2020-06-12T00:40:54.210+00:00,2021-03-28T08:05:57.189+00:00,8841,jira:JiraIssue:2:10063,Medium,240,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
-jira:JiraIssue:2:10088,https://merico.atlassian.net/browse/EE-26,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-26,定接口,,,子任务,DONE,已完成,0,2020-06-15T09:06:51.438+00:00,2020-06-12T00:41:01.683+00:00,2021-03-28T08:05:55.208+00:00,4825,jira:JiraIssue:2:10063,Medium,0,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0a47d31e0c2a15fd87,yuxiang,,
-jira:JiraIssue:2:10089,https://merico.atlassian.net/browse/EE-27,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-27,提供后端接口,,,子任务,DONE,已完成,0,2020-06-19T06:31:31.662+00:00,2020-06-12T00:41:16.622+00:00,2021-03-28T08:05:55.498+00:00,10430,jira:JiraIssue:2:10063,Medium,660,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0ba04d9c0c220c18d8,yanghui,,
-jira:JiraIssue:2:10090,https://merico.atlassian.net/browse/EE-28,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-28,数据填充与联调,,,子任务,DONE,已完成,0,2020-06-18T04:03:04.637+00:00,2020-06-12T00:41:36.317+00:00,2021-03-28T08:06:05.443+00:00,8841,jira:JiraIssue:2:10063,Medium,360,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
-jira:JiraIssue:2:10091,https://merico.atlassian.net/browse/EE-29,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-29,组件封装及Demo,,,子任务,DONE,已完成,0,2020-06-18T04:03:30.760+00:00,2020-06-12T00:48:29.035+00:00,2021-03-28T08:05:55.731+00:00,8835,jira:JiraIssue:2:10064,Medium,360,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
-jira:JiraIssue:2:10092,https://merico.atlassian.net/browse/EE-30,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-30,定接口,,,子任务,DONE,已完成,0,2020-06-15T09:06:40.206+00:00,2020-06-12T00:48:39.803+00:00,2021-03-28T08:05:55.159+00:00,4818,jira:JiraIssue:2:10064,Medium,0,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0a47d31e0c2a15fd87,yuxiang,,
-jira:JiraIssue:2:10093,https://merico.atlassian.net/browse/EE-31,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-31,后端接口,,,子任务,DONE,已完成,0,2020-06-19T07:35:31.762+00:00,2020-06-12T00:48:46.751+00:00,2021-03-28T08:05:55.544+00:00,10486,jira:JiraIssue:2:10064,Medium,120,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0ba04d9c0c220c18d8,yanghui,,
-jira:JiraIssue:2:10094,https://merico.atlassian.net/browse/EE-32,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-32,数据填充与联调,,,子任务,DONE,已完成,0,2020-06-18T04:03:48.818+00:00,2020-06-12T00:48:53.279+00:00,2021-03-28T08:05:55.592+00:00,8834,jira:JiraIssue:2:10064,Medium,360,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
-jira:JiraIssue:2:10095,https://merico.atlassian.net/browse/EE-33,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-33,准备测试用例,,,子任务,DONE,已完成,0,2020-06-19T06:32:19.340+00:00,2020-06-12T00:50:45.674+00:00,2021-03-28T08:05:55.253+00:00,10421,jira:JiraIssue:2:10063,Medium,0,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0984083c0c12e5af8f,lin.hao,,
-jira:JiraIssue:2:10096,https://merico.atlassian.net/browse/EE-34,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-34, 组件封装及Demo,,,子任务,DONE,已完成,0,2020-06-18T04:04:05.951+00:00,2020-06-12T00:51:57.807+00:00,2021-03-28T08:05:57.232+00:00,8832,jira:JiraIssue:2:10065,Medium,240,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
-jira:JiraIssue:2:10097,https://merico.atlassian.net/browse/EE-35,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-35,定接口,,,子任务,DONE,已完成,0,2020-06-15T09:06:30.942+00:00,2020-06-12T00:52:04.767+00:00,2021-03-28T08:05:55.353+00:00,4814,jira:JiraIssue:2:10065,Medium,0,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0a47d31e0c2a15fd87,yuxiang,,
-jira:JiraIssue:2:10098,https://merico.atlassian.net/browse/EE-36,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-36,后端接口,,,子任务,DONE,已完成,0,2020-06-19T07:35:44.696+00:00,2020-06-12T00:52:12.678+00:00,2021-03-28T08:05:55.685+00:00,10483,jira:JiraIssue:2:10065,Medium,120,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0ba04d9c0c220c18d8,yanghui,,
-jira:JiraIssue:2:10099,https://merico.atlassian.net/browse/EE-37,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-37,数据填充与联调 ,,,子任务,DONE,已完成,0,2020-06-18T04:04:31.261+00:00,2020-06-12T00:52:23.456+00:00,2021-03-28T08:05:55.638+00:00,8832,jira:JiraIssue:2:10065,Medium,0,0,0,jira:JiraUser:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraUser:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
+jira:JiraIssue:2:10063,https://merico.atlassian.net/browse/EE-1,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,EE-1,四个排序图:测试/注释覆盖度、复用度、模块性,,,故事,DONE,已完成,-1,2020-06-19T06:31:18.495+00:00,2020-06-12T00:13:13.360+00:00,2021-03-28T08:06:08.713+00:00,10458,,Medium,0,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
+jira:JiraIssue:2:10064,https://merico.atlassian.net/browse/EE-2,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,EE-2,问题堆叠分布排序图,,,故事,DONE,已完成,0,2020-06-23T10:20:58.999+00:00,2020-06-12T00:15:36.123+00:00,2021-03-28T08:05:55.016+00:00,16445,,Medium,0,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
+jira:JiraIssue:2:10065,https://merico.atlassian.net/browse/EE-3,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,EE-3,问题积压图率,,,故事,DONE,已完成,0,2020-06-23T10:21:11.996+00:00,2020-06-12T00:15:41.600+00:00,2021-03-28T08:05:55.061+00:00,16445,,Medium,0,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
+jira:JiraIssue:2:10066,https://merico.atlassian.net/browse/EE-4,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,EE-4,问题分布的帕累托图,,,故事,DONE,已完成,0,2020-06-23T10:21:23.562+00:00,2020-06-12T00:15:46.144+00:00,2021-03-28T08:06:09.535+00:00,16445,,Medium,0,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
+jira:JiraIssue:2:10067,https://merico.atlassian.net/browse/EE-5,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium,EE-5,通用技术任务,,,任务,DONE,已完成,0,2020-06-18T04:06:00.747+00:00,2020-06-12T00:16:44.157+00:00,2021-03-28T08:05:54.622+00:00,8869,,Medium,0,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
+jira:JiraIssue:2:10068,https://merico.atlassian.net/browse/EE-6,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,EE-6,变异系数、生产率的四象限图,,,故事,DONE,已完成,0,2020-06-16T11:56:14.433+00:00,2020-06-12T00:17:26.986+00:00,2021-03-28T08:05:56.750+00:00,6458,,Medium,0,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0c2490cf0c09e2e598,Gerile Tu,,
+jira:JiraIssue:2:10070,https://merico.atlassian.net/browse/EE-8,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium,EE-8,多团队支持,,,任务,DONE,已完成,0,2020-07-08T17:11:45.201+00:00,2020-06-12T00:18:58.050+00:00,2021-03-28T08:05:54.576+00:00,38452,,Medium,0,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0ba04d9c0c220c18d8,yanghui,,
+jira:JiraIssue:2:10071,https://merico.atlassian.net/browse/EE-9,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium,EE-9,Common backend 拆分,,,任务,DONE,已完成,0,2020-07-08T17:12:05.663+00:00,2020-06-12T00:19:17.336+00:00,2021-03-28T08:06:20.165+00:00,38452,,Medium,1680,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0ba04d9c0c220c18d8,yanghui,,
+jira:JiraIssue:2:10072,https://merico.atlassian.net/browse/EE-10,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium,EE-10,部署SaaS版本,,,任务,DONE,已完成,0,2020-07-08T17:11:55.247+00:00,2020-06-12T00:19:24.637+00:00,2021-03-28T08:05:54.472+00:00,38452,,Medium,0,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0ba04d9c0c220c18d8,yanghui,,
+jira:JiraIssue:2:10076,https://merico.atlassian.net/browse/EE-14,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium,EE-14,调整文件夹结构,,,任务,DONE,已完成,0,2020-06-15T08:59:51.304+00:00,2020-06-12T00:24:25.922+00:00,2021-03-28T08:05:56.152+00:00,4835,,Medium,240,600,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0a47d31e0c2a15fd87,yuxiang,,
+jira:JiraIssue:2:10077,https://merico.atlassian.net/browse/EE-15,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium,EE-15,路由权限控制,,,任务,DONE,已完成,0,2020-06-15T09:00:26.956+00:00,2020-06-12T00:24:39.624+00:00,2021-03-28T08:06:01.995+00:00,4835,,Medium,240,480,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0a47d31e0c2a15fd87,yuxiang,,
+jira:JiraIssue:2:10078,https://merico.atlassian.net/browse/EE-16,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium,EE-16,优化前端 webpack 开发阶段构建速度,,,任务,DONE,已完成,0,2020-06-15T09:01:44.159+00:00,2020-06-12T00:24:49.017+00:00,2021-03-28T08:05:55.863+00:00,4836,,Medium,0,60,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0a47d31e0c2a15fd87,yuxiang,,
+jira:JiraIssue:2:10079,https://merico.atlassian.net/browse/EE-17,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium,EE-17,新的错误处理机制,,,任务,DONE,已完成,0,2020-07-22T07:25:29.104+00:00,2020-06-12T00:24:56.048+00:00,2021-03-28T08:05:54.426+00:00,58020,,Medium,360,120,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0a47d31e0c2a15fd87,yuxiang,,
+jira:JiraIssue:2:10081,https://merico.atlassian.net/browse/EE-19,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,EE-19,LDAP需要支持TLS和证书,,,故事,DONE,已完成,0,2020-06-18T08:34:11.117+00:00,2020-06-12T00:28:00.241+00:00,2021-03-28T08:05:57.326+00:00,9126,,Medium,0,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0aaa47a00c1997ea8e,chao.cheng,,
+jira:JiraIssue:2:10082,https://merico.atlassian.net/browse/EE-20,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,EE-20,团队首页垂直化,,,故事,DONE,已完成,0,2020-06-17T07:25:54.370+00:00,2020-06-12T00:29:43.677+00:00,2021-08-06T06:14:54.647+00:00,7616,,Medium,0,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0984083c0c12e5af8f,lin.hao,,
+jira:JiraIssue:2:10085,https://merico.atlassian.net/browse/EE-23,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10303?size=medium,EE-23,批量删除事故,,,缺陷,DONE,已完成,0,2020-06-15T09:07:56.798+00:00,2020-06-12T00:33:57.204+00:00,2021-03-28T08:05:57.095+00:00,4833,,Medium,0,60,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0a47d31e0c2a15fd87,yuxiang,,
+jira:JiraIssue:2:10086,https://merico.atlassian.net/browse/EE-24,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium,EE-24,LDAP支持自定义的证书上传,,,故事,DONE,已完成,0,2020-06-12T07:17:28.659+00:00,2020-06-12T00:35:15.489+00:00,2021-03-28T08:05:55.819+00:00,402,,Medium,0,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0aaa47a00c1997ea8e,chao.cheng,,
+jira:JiraIssue:2:10087,https://merico.atlassian.net/browse/EE-25,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-25,组件封装及Demo,,,子任务,DONE,已完成,0,2020-06-18T04:02:22.350+00:00,2020-06-12T00:40:54.210+00:00,2021-03-28T08:05:57.189+00:00,8841,jira:JiraIssue:2:10063,Medium,240,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
+jira:JiraIssue:2:10088,https://merico.atlassian.net/browse/EE-26,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-26,定接口,,,子任务,DONE,已完成,0,2020-06-15T09:06:51.438+00:00,2020-06-12T00:41:01.683+00:00,2021-03-28T08:05:55.208+00:00,4825,jira:JiraIssue:2:10063,Medium,0,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0a47d31e0c2a15fd87,yuxiang,,
+jira:JiraIssue:2:10089,https://merico.atlassian.net/browse/EE-27,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-27,提供后端接口,,,子任务,DONE,已完成,0,2020-06-19T06:31:31.662+00:00,2020-06-12T00:41:16.622+00:00,2021-03-28T08:05:55.498+00:00,10430,jira:JiraIssue:2:10063,Medium,660,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0ba04d9c0c220c18d8,yanghui,,
+jira:JiraIssue:2:10090,https://merico.atlassian.net/browse/EE-28,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-28,数据填充与联调,,,子任务,DONE,已完成,0,2020-06-18T04:03:04.637+00:00,2020-06-12T00:41:36.317+00:00,2021-03-28T08:06:05.443+00:00,8841,jira:JiraIssue:2:10063,Medium,360,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
+jira:JiraIssue:2:10091,https://merico.atlassian.net/browse/EE-29,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-29,组件封装及Demo,,,子任务,DONE,已完成,0,2020-06-18T04:03:30.760+00:00,2020-06-12T00:48:29.035+00:00,2021-03-28T08:05:55.731+00:00,8835,jira:JiraIssue:2:10064,Medium,360,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
+jira:JiraIssue:2:10092,https://merico.atlassian.net/browse/EE-30,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-30,定接口,,,子任务,DONE,已完成,0,2020-06-15T09:06:40.206+00:00,2020-06-12T00:48:39.803+00:00,2021-03-28T08:05:55.159+00:00,4818,jira:JiraIssue:2:10064,Medium,0,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0a47d31e0c2a15fd87,yuxiang,,
+jira:JiraIssue:2:10093,https://merico.atlassian.net/browse/EE-31,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-31,后端接口,,,子任务,DONE,已完成,0,2020-06-19T07:35:31.762+00:00,2020-06-12T00:48:46.751+00:00,2021-03-28T08:05:55.544+00:00,10486,jira:JiraIssue:2:10064,Medium,120,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0ba04d9c0c220c18d8,yanghui,,
+jira:JiraIssue:2:10094,https://merico.atlassian.net/browse/EE-32,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-32,数据填充与联调,,,子任务,DONE,已完成,0,2020-06-18T04:03:48.818+00:00,2020-06-12T00:48:53.279+00:00,2021-03-28T08:05:55.592+00:00,8834,jira:JiraIssue:2:10064,Medium,360,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
+jira:JiraIssue:2:10095,https://merico.atlassian.net/browse/EE-33,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-33,准备测试用例,,,子任务,DONE,已完成,0,2020-06-19T06:32:19.340+00:00,2020-06-12T00:50:45.674+00:00,2021-03-28T08:05:55.253+00:00,10421,jira:JiraIssue:2:10063,Medium,0,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0984083c0c12e5af8f,lin.hao,,
+jira:JiraIssue:2:10096,https://merico.atlassian.net/browse/EE-34,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-34, 组件封装及Demo,,,子任务,DONE,已完成,0,2020-06-18T04:04:05.951+00:00,2020-06-12T00:51:57.807+00:00,2021-03-28T08:05:57.232+00:00,8832,jira:JiraIssue:2:10065,Medium,240,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
+jira:JiraIssue:2:10097,https://merico.atlassian.net/browse/EE-35,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-35,定接口,,,子任务,DONE,已完成,0,2020-06-15T09:06:30.942+00:00,2020-06-12T00:52:04.767+00:00,2021-03-28T08:05:55.353+00:00,4814,jira:JiraIssue:2:10065,Medium,0,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0a47d31e0c2a15fd87,yuxiang,,
+jira:JiraIssue:2:10098,https://merico.atlassian.net/browse/EE-36,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-36,后端接口,,,子任务,DONE,已完成,0,2020-06-19T07:35:44.696+00:00,2020-06-12T00:52:12.678+00:00,2021-03-28T08:05:55.685+00:00,10483,jira:JiraIssue:2:10065,Medium,120,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0ba04d9c0c220c18d8,yanghui,,
+jira:JiraIssue:2:10099,https://merico.atlassian.net/browse/EE-37,https://merico.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium,EE-37,数据填充与联调 ,,,子任务,DONE,已完成,0,2020-06-18T04:04:31.261+00:00,2020-06-12T00:52:23.456+00:00,2021-03-28T08:05:55.638+00:00,8832,jira:JiraIssue:2:10065,Medium,0,0,0,jira:JiraAccount:2:5e9711ba34f7b90c0fbc37d3,Rankin Zheng,jira:JiraAccount:2:5ecfbd0c730ec90c1999cadf,Dingding Zhang,,
diff --git a/plugins/jira/impl/impl.go b/plugins/jira/impl/impl.go
index 455d8ac7..a9131849 100644
--- a/plugins/jira/impl/impl.go
+++ b/plugins/jira/impl/impl.go
@@ -66,10 +66,10 @@ func (plugin Jira) SubTaskMetas() []core.SubTaskMeta {
tasks.CollectIssuesMeta,
tasks.ExtractIssuesMeta,
- tasks.CollectChangelogsMeta,
- tasks.ExtractChangelogsMeta,
+ tasks.CollectIssueChangelogsMeta,
+ tasks.ExtractIssueChangelogsMeta,
- tasks.CollectUsersMeta,
+ tasks.CollectAccountsMeta,
tasks.CollectWorklogsMeta,
tasks.ExtractWorklogsMeta,
@@ -86,7 +86,7 @@ func (plugin Jira) SubTaskMetas() []core.SubTaskMeta {
tasks.ConvertWorklogsMeta,
- tasks.ConvertChangelogsMeta,
+ tasks.ConvertIssueChangelogsMeta,
tasks.ConvertSprintsMeta,
tasks.ConvertSprintIssuesMeta,
@@ -94,8 +94,8 @@ func (plugin Jira) SubTaskMetas() []core.SubTaskMeta {
tasks.ConvertIssueCommitsMeta,
tasks.ConvertIssueRepoCommitsMeta,
- tasks.ExtractUsersMeta,
- tasks.ConvertUsersMeta,
+ tasks.ExtractAccountsMeta,
+ tasks.ConvertAccountsMeta,
}
}
diff --git a/plugins/jira/models/user.go b/plugins/jira/models/account.go
similarity index 95%
rename from plugins/jira/models/user.go
rename to plugins/jira/models/account.go
index 975ffa35..4dc95d58 100644
--- a/plugins/jira/models/user.go
+++ b/plugins/jira/models/account.go
@@ -21,7 +21,7 @@ import (
"github.com/apache/incubator-devlake/models/common"
)
-type JiraUser struct {
+type JiraAccount struct {
common.NoPKModel
// collected fields
@@ -34,6 +34,6 @@ type JiraUser struct {
Timezone string `gorm:"type:varchar(255)"`
}
-func (JiraUser) TableName() string {
+func (JiraAccount) TableName() string {
return "_tool_jira_accounts"
}
diff --git a/plugins/jira/models/changelog.go b/plugins/jira/models/issue_changelog.go
similarity index 86%
rename from plugins/jira/models/changelog.go
rename to plugins/jira/models/issue_changelog.go
index bd965056..fb627b9a 100644
--- a/plugins/jira/models/changelog.go
+++ b/plugins/jira/models/issue_changelog.go
@@ -23,7 +23,7 @@ import (
"github.com/apache/incubator-devlake/models/common"
)
-type JiraChangelog struct {
+type JiraIssueChangelogs struct {
common.NoPKModel
// collected fields
@@ -37,7 +37,7 @@ type JiraChangelog struct {
IssueUpdated *time.Time `comment:"corresponding issue.updated time, changelog might need update IFF changelog.issue_updated < issue.updated"`
}
-type JiraChangelogItem struct {
+type JiraIssueChangelogItems struct {
common.NoPKModel
// collected fields
@@ -52,10 +52,10 @@ type JiraChangelogItem struct {
ToString string
}
-func (JiraChangelog) TableName() string {
- return "_tool_jira_changelogs"
+func (JiraIssueChangelogs) TableName() string {
+ return "_tool_jira_issue_changelogs"
}
-func (JiraChangelogItem) TableName() string {
- return "_tool_jira_changelog_items"
+func (JiraIssueChangelogItems) TableName() string {
+ return "_tool_jira_issue_changelog_items"
}
diff --git a/plugins/jira/models/migrationscripts/archived/user.go b/plugins/jira/models/migrationscripts/archived/account.go
similarity index 69%
rename from plugins/jira/models/migrationscripts/archived/user.go
rename to plugins/jira/models/migrationscripts/archived/account.go
index e10a048a..4acb7316 100644
--- a/plugins/jira/models/migrationscripts/archived/user.go
+++ b/plugins/jira/models/migrationscripts/archived/account.go
@@ -19,19 +19,19 @@ package archived
import "github.com/apache/incubator-devlake/models/migrationscripts/archived"
-type JiraUser struct {
+type JiraAccount struct {
archived.NoPKModel
// collected fields
- SourceId uint64 `gorm:"primarykey"`
- AccountId string `gorm:"primaryKey;type:varchar(100)"`
- AccountType string `gorm:"type:varchar(100)"`
- Name string `gorm:"type:varchar(255)"`
- Email string `gorm:"type:varchar(255)"`
- AvatarUrl string `gorm:"type:varchar(255)"`
- Timezone string `gorm:"type:varchar(255)"`
+ ConnectionId uint64 `gorm:"primarykey"`
+ AccountId string `gorm:"primaryKey;type:varchar(100)"`
+ AccountType string `gorm:"type:varchar(100)"`
+ Name string `gorm:"type:varchar(255)"`
+ Email string `gorm:"type:varchar(255)"`
+ AvatarUrl string `gorm:"type:varchar(255)"`
+ Timezone string `gorm:"type:varchar(255)"`
}
-func (JiraUser) TableName() string {
+func (JiraAccount) TableName() string {
return "_tool_jira_accounts"
}
diff --git a/plugins/jira/models/migrationscripts/archived/board.go b/plugins/jira/models/migrationscripts/archived/board.go
index 31479df1..60120908 100644
--- a/plugins/jira/models/migrationscripts/archived/board.go
+++ b/plugins/jira/models/migrationscripts/archived/board.go
@@ -21,25 +21,14 @@ import "github.com/apache/incubator-devlake/models/migrationscripts/archived"
type JiraBoard struct {
archived.NoPKModel
- SourceId uint64 `gorm:"primaryKey"`
- BoardId uint64 `gorm:"primaryKey"`
- ProjectId uint
- Name string `gorm:"type:varchar(255)"`
- Self string `gorm:"type:varchar(255)"`
- Type string `gorm:"type:varchar(100)"`
-}
-
-type JiraBoardIssue struct {
- SourceId uint64 `gorm:"primaryKey"`
- BoardId uint64 `gorm:"primaryKey"`
- IssueId uint64 `gorm:"primaryKey"`
- archived.NoPKModel
+ ConnectionId uint64 `gorm:"primaryKey"`
+ BoardId uint64 `gorm:"primaryKey"`
+ ProjectId uint
+ Name string `gorm:"type:varchar(255)"`
+ Self string `gorm:"type:varchar(255)"`
+ Type string `gorm:"type:varchar(100)"`
}
func (JiraBoard) TableName() string {
return "_tool_jira_boards"
}
-
-func (JiraBoardIssue) TableName() string {
- return "_tool_jira_board_issues"
-}
diff --git a/plugins/jira/models/migrationscripts/archived/project.go b/plugins/jira/models/migrationscripts/archived/board_issue.go
similarity index 76%
copy from plugins/jira/models/migrationscripts/archived/project.go
copy to plugins/jira/models/migrationscripts/archived/board_issue.go
index 305ebd24..f0a6b21c 100644
--- a/plugins/jira/models/migrationscripts/archived/project.go
+++ b/plugins/jira/models/migrationscripts/archived/board_issue.go
@@ -19,14 +19,13 @@ package archived
import "github.com/apache/incubator-devlake/models/migrationscripts/archived"
-type JiraProject struct {
+type JiraBoardIssue struct {
+ ConnectionId uint64 `gorm:"primaryKey"`
+ BoardId uint64 `gorm:"primaryKey"`
+ IssueId uint64 `gorm:"primaryKey"`
archived.NoPKModel
- SourceId uint64 `gorm:"primarykey"`
- Id string `gorm:"primaryKey;type:varchar(255)"`
- Key string `gorm:"type:varchar(255)"`
- Name string `gorm:"type:varchar(255)"`
}
-func (JiraProject) TableName() string {
- return "_tool_jira_projects"
+func (JiraBoardIssue) TableName() string {
+ return "_tool_jira_board_issues"
}
diff --git a/plugins/jira/models/migrationscripts/archived/connection.go b/plugins/jira/models/migrationscripts/archived/connection.go
new file mode 100644
index 00000000..28d2d523
--- /dev/null
+++ b/plugins/jira/models/migrationscripts/archived/connection.go
@@ -0,0 +1,66 @@
+/*
+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 archived
+
+import (
+ "github.com/apache/incubator-devlake/models/migrationscripts/archived"
+)
+
+type BasicAuth struct {
+ Username string `mapstructure:"username" validate:"required" json:"username"`
+ Password string `mapstructure:"password" validate:"required" json:"password" encrypt:"yes"`
+}
+
+type BaseConnection struct {
+ Name string `gorm:"type:varchar(100);uniqueIndex" json:"name" validate:"required"`
+ archived.Model
+}
+
+type RestConnection struct {
+ BaseConnection `mapstructure:",squash"`
+ Endpoint string `mapstructure:"endpoint" validate:"required" json:"endpoint"`
+ Proxy string `mapstructure:"proxy" json:"proxy"`
+ RateLimit int `comment:"api request rate limit per hour" json:"rateLimit"`
+}
+
+type TestConnectionRequest struct {
+ Endpoint string `json:"endpoint"`
+ Proxy string `json:"proxy"`
+ BasicAuth `mapstructure:",squash"`
+}
+
+type BoardResponse struct {
+ Id int
+ Title string
+ Value string
+}
+
+type EpicResponse struct {
+ Id int
+ Title string
+ Value string
+}
+
+type JiraConnection struct {
+ RestConnection `mapstructure:",squash"`
+ BasicAuth `mapstructure:",squash"`
+}
+
+func (JiraConnection) TableName() string {
+ return "_tool_jira_connections"
+}
diff --git a/plugins/jira/models/migrationscripts/archived/connection_history.go b/plugins/jira/models/migrationscripts/archived/connection_history.go
new file mode 100644
index 00000000..603b04d4
--- /dev/null
+++ b/plugins/jira/models/migrationscripts/archived/connection_history.go
@@ -0,0 +1,56 @@
+/*
+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 archived
+
+import "time"
+
+type JiraConnectionV11 struct {
+ ID uint64 `gorm:"primaryKey" json:"id"`
+ CreatedAt time.Time `json:"createdAt"`
+ UpdatedAt time.Time `json:"updatedAt"`
+ Name string `gorm:"type:varchar(100);uniqueIndex" json:"name" validate:"required"`
+ Endpoint string `json:"endpoint" validate:"required"`
+ BasicAuthEncoded string `json:"basicAuthEncoded" validate:"required"`
+ EpicKeyField string `gorm:"type:varchar(50);" json:"epicKeyField"`
+ StoryPointField string `gorm:"type:varchar(50);" json:"storyPointField"`
+ RemotelinkCommitShaPattern string `gorm:"type:varchar(255);comment='golang regexp, the first group will be recognized as commit sha, ref https://github.com/google/re2/wiki/Syntax'" json:"remotelinkCommitShaPattern"`
+ Proxy string `json:"proxy"`
+ RateLimit int `comment:"api request rate limt per hour" json:"rateLimit"`
+}
+
+func (JiraConnectionV11) TableName() string {
+ return "_tool_jira_connections"
+}
+
+type JiraConnectionV10 struct {
+ ID uint64 `gorm:"primaryKey" json:"id"`
+ CreatedAt time.Time `json:"createdAt"`
+ UpdatedAt time.Time `json:"updatedAt"`
+ Name string `gorm:"type:varchar(100);uniqueIndex" json:"name" validate:"required"`
+ Endpoint string `json:"endpoint" validate:"required"`
+ BasicAuthEncoded string `json:"basicAuthEncoded" validate:"required"`
+ EpicKeyField string `gorm:"type:varchar(50);" json:"epicKeyField"`
+ StoryPointField string `gorm:"type:varchar(50);" json:"storyPointField"`
+ RemotelinkCommitShaPattern string `gorm:"type:varchar(255);comment='golang regexp, the first group will be recognized as commit sha, ref https://github.com/google/re2/wiki/Syntax'" json:"remotelinkCommitShaPattern"`
+ Proxy string `json:"proxy"`
+ RateLimit int `comment:"api request rate limt per hour" json:"rateLimit"`
+}
+
+func (JiraConnectionV10) TableName() string {
+ return "_tool_jira_source"
+}
diff --git a/plugins/jira/models/migrationscripts/archived/issue.go b/plugins/jira/models/migrationscripts/archived/issue.go
index fd98e396..61d4d9e3 100644
--- a/plugins/jira/models/migrationscripts/archived/issue.go
+++ b/plugins/jira/models/migrationscripts/archived/issue.go
@@ -26,11 +26,12 @@ import (
type JiraIssue struct {
// collected fields
- SourceId uint64 `gorm:"primaryKey"`
+ ConnectionId uint64 `gorm:"primaryKey"`
IssueId uint64 `gorm:"primarykey"`
ProjectId uint64
Self string `gorm:"type:varchar(255)"`
- Key string `gorm:"type:varchar(255)"`
+ IconURL string `gorm:"type:varchar(255);column:icon_url"`
+ IssueKey string `gorm:"type:varchar(255)"`
Summary string
Type string `gorm:"type:varchar(255)"`
EpicKey string `gorm:"type:varchar(255)"`
@@ -57,29 +58,13 @@ type JiraIssue struct {
Updated time.Time `gorm:"index"`
SpentMinutes int64
LeadTimeMinutes uint
- StdStoryPoint uint
+ StdStoryPoint int64
StdType string `gorm:"type:varchar(255)"`
StdStatus string `gorm:"type:varchar(255)"`
AllFields datatypes.JSONMap
-
- // internal status tracking
- ChangelogUpdated *time.Time
- RemotelinkUpdated *time.Time
- archived.NoPKModel
-}
-
-type JiraIssueCommit struct {
archived.NoPKModel
- SourceId uint64 `gorm:"primaryKey"`
- IssueId uint64 `gorm:"primaryKey"`
- CommitSha string `gorm:"primaryKey;type:varchar(40)"`
- CommitUrl string `gorm:"type:varchar(255)"`
}
func (JiraIssue) TableName() string {
return "_tool_jira_issues"
}
-
-func (JiraIssueCommit) TableName() string {
- return "_tool_jira_issue_commits"
-}
diff --git a/plugins/jira/models/migrationscripts/archived/changelog.go b/plugins/jira/models/migrationscripts/archived/issue_changelog.go
similarity index 61%
rename from plugins/jira/models/migrationscripts/archived/changelog.go
rename to plugins/jira/models/migrationscripts/archived/issue_changelog.go
index 4b87297b..4fa043d1 100644
--- a/plugins/jira/models/migrationscripts/archived/changelog.go
+++ b/plugins/jira/models/migrationscripts/archived/issue_changelog.go
@@ -23,38 +23,39 @@ import (
"github.com/apache/incubator-devlake/models/migrationscripts/archived"
)
-type JiraChangelog struct {
+type JiraIssueChangelogs struct {
archived.NoPKModel
// collected fields
- SourceId uint64 `gorm:"primaryKey"`
+ ConnectionId uint64 `gorm:"primaryKey"`
ChangelogId uint64 `gorm:"primarykey"`
IssueId uint64 `gorm:"index"`
AuthorAccountId string `gorm:"type:varchar(255)"`
AuthorDisplayName string `gorm:"type:varchar(255)"`
AuthorActive bool
- Created time.Time `gorm:"index"`
+ Created time.Time `gorm:"index"`
+ IssueUpdated *time.Time `comment:"corresponding issue.updated time, changelog might need update IFF changelog.issue_updated < issue.updated"`
}
-type JiraChangelogItem struct {
+type JiraIssueChangelogItems struct {
archived.NoPKModel
// collected fields
- SourceId uint64 `gorm:"primaryKey"`
- ChangelogId uint64 `gorm:"primaryKey"`
- Field string `gorm:"primaryKey"`
- FieldType string
- FieldId string
- From string
- FromString string
- To string
- ToString string
+ ConnectionId uint64 `gorm:"primaryKey"`
+ ChangelogId uint64 `gorm:"primaryKey"`
+ Field string `gorm:"primaryKey"`
+ FieldType string
+ FieldId string
+ FromValue string
+ FromString string
+ ToValue string
+ ToString string
}
-func (JiraChangelog) TableName() string {
- return "_tool_jira_changelogs"
+func (JiraIssueChangelogs) TableName() string {
+ return "_tool_jira_issue_changelogs"
}
-func (JiraChangelogItem) TableName() string {
- return "_tool_jira_changelog_items"
+func (JiraIssueChangelogItems) TableName() string {
+ return "_tool_jira_issue_changelog_items"
}
diff --git a/plugins/jira/models/migrationscripts/archived/remotelink.go b/plugins/jira/models/migrationscripts/archived/issue_commit.go
similarity index 69%
copy from plugins/jira/models/migrationscripts/archived/remotelink.go
copy to plugins/jira/models/migrationscripts/archived/issue_commit.go
index 7dde5e72..51f3ee76 100644
--- a/plugins/jira/models/migrationscripts/archived/remotelink.go
+++ b/plugins/jira/models/migrationscripts/archived/issue_commit.go
@@ -19,20 +19,16 @@ package archived
import (
"github.com/apache/incubator-devlake/models/migrationscripts/archived"
- "gorm.io/datatypes"
)
-type JiraRemotelink struct {
+type JiraIssueCommit struct {
archived.NoPKModel
- SourceId uint64 `gorm:"primaryKey"`
- RemotelinkId uint64 `gorm:"primarykey"`
- IssueId uint64 `gorm:"index"`
- RawJson datatypes.JSON
- Self string `gorm:"type:varchar(255)"`
- Title string
- Url string `gorm:"type:varchar(255)"`
+ ConnectionId uint64 `gorm:"primaryKey"`
+ IssueId uint64 `gorm:"primaryKey"`
+ CommitSha string `gorm:"primaryKey;type:varchar(40)"`
+ CommitUrl string `gorm:"type:varchar(255)"`
}
-func (JiraRemotelink) TableName() string {
- return "_tool_jira_remotelinks"
+func (JiraIssueCommit) TableName() string {
+ return "_tool_jira_issue_commits"
}
diff --git a/plugins/jira/models/migrationscripts/updateSchemas20220616.go b/plugins/jira/models/migrationscripts/archived/issue_label.go
similarity index 69%
rename from plugins/jira/models/migrationscripts/updateSchemas20220616.go
rename to plugins/jira/models/migrationscripts/archived/issue_label.go
index a02f7fda..1c666d3a 100644
--- a/plugins/jira/models/migrationscripts/updateSchemas20220616.go
+++ b/plugins/jira/models/migrationscripts/archived/issue_label.go
@@ -15,38 +15,22 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-package migrationscripts
+package archived
import (
- "context"
"github.com/apache/incubator-devlake/models/migrationscripts/archived"
-
- "gorm.io/gorm"
)
-type JiraIssueLabel0616 struct {
+// Please note that Issue Labels can also apply to Pull Requests.
+// Pull Requests are considered Issues in GitHub.
+
+type JiraIssueLabel struct {
ConnectionId uint64 `gorm:"primaryKey;autoIncrement:false"`
IssueId uint64 `gorm:"primaryKey;autoIncrement:false"`
LabelName string `gorm:"primaryKey;type:varchar(255)"`
archived.NoPKModel
}
-func (JiraIssueLabel0616) TableName() string {
+func (JiraIssueLabel) TableName() string {
return "_tool_jira_issue_labels"
}
-
-type UpdateSchemas20220616 struct{}
-
-func (*UpdateSchemas20220616) Up(ctx context.Context, db *gorm.DB) error {
-
- err := db.Migrator().AutoMigrate(JiraIssueLabel0616{})
- return err
-}
-
-func (*UpdateSchemas20220616) Version() uint64 {
- return 20220616154646
-}
-
-func (*UpdateSchemas20220616) Name() string {
- return "add jira issue labels"
-}
diff --git a/plugins/jira/models/migrationscripts/archived/project.go b/plugins/jira/models/migrationscripts/archived/project.go
index 305ebd24..de16c6c1 100644
--- a/plugins/jira/models/migrationscripts/archived/project.go
+++ b/plugins/jira/models/migrationscripts/archived/project.go
@@ -21,10 +21,12 @@ import "github.com/apache/incubator-devlake/models/migrationscripts/archived"
type JiraProject struct {
archived.NoPKModel
- SourceId uint64 `gorm:"primarykey"`
- Id string `gorm:"primaryKey;type:varchar(255)"`
- Key string `gorm:"type:varchar(255)"`
- Name string `gorm:"type:varchar(255)"`
+
+ // collected fields
+ ConnectionId uint64 `gorm:"primarykey"`
+ Id string `gorm:"primaryKey;type:varchar(255)"`
+ ProjectKey string `gorm:"type:varchar(255)"`
+ Name string `gorm:"type:varchar(255)"`
}
func (JiraProject) TableName() string {
diff --git a/plugins/jira/models/migrationscripts/archived/remotelink.go b/plugins/jira/models/migrationscripts/archived/remotelink.go
index 7dde5e72..c0ab385a 100644
--- a/plugins/jira/models/migrationscripts/archived/remotelink.go
+++ b/plugins/jira/models/migrationscripts/archived/remotelink.go
@@ -18,19 +18,24 @@ limitations under the License.
package archived
import (
+ "time"
+
"github.com/apache/incubator-devlake/models/migrationscripts/archived"
"gorm.io/datatypes"
)
type JiraRemotelink struct {
archived.NoPKModel
- SourceId uint64 `gorm:"primaryKey"`
+
+ // collected fields
+ ConnectionId uint64 `gorm:"primaryKey"`
RemotelinkId uint64 `gorm:"primarykey"`
IssueId uint64 `gorm:"index"`
RawJson datatypes.JSON
Self string `gorm:"type:varchar(255)"`
Title string
Url string `gorm:"type:varchar(255)"`
+ IssueUpdated *time.Time
}
func (JiraRemotelink) TableName() string {
diff --git a/plugins/jira/models/migrationscripts/archived/source.go b/plugins/jira/models/migrationscripts/archived/source.go
deleted file mode 100644
index e941e701..00000000
--- a/plugins/jira/models/migrationscripts/archived/source.go
+++ /dev/null
@@ -1,57 +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 archived
-
-import "github.com/apache/incubator-devlake/models/migrationscripts/archived"
-
-type JiraSource struct {
- archived.Model
- Name string `gorm:"type:varchar(100);uniqueIndex" json:"name" validate:"required"`
- Endpoint string `json:"endpoint" validate:"required"`
- BasicAuthEncoded string `json:"basicAuthEncoded" validate:"required"`
- EpicKeyField string `gorm:"type:varchar(50);" json:"epicKeyField"`
- StoryPointField string `gorm:"type:varchar(50);" json:"storyPointField"`
- RemotelinkCommitShaPattern string `gorm:"type:varchar(255);comment='golang regexp, the first group will be recognized as commit sha, ref https://github.com/google/re2/wiki/Syntax'" json:"remotelinkCommitShaPattern"`
- Proxy string `json:"proxy"`
- RateLimit int `comment:"api request rate limt per second"`
-}
-
-type JiraIssueTypeMapping struct {
- SourceID uint64 `gorm:"primaryKey" json:"jiraSourceId" validate:"required"`
- UserType string `gorm:"type:varchar(50);primaryKey" json:"userType" validate:"required"`
- StandardType string `gorm:"type:varchar(50)" json:"standardType" validate:"required"`
-}
-
-type JiraIssueStatusMapping struct {
- SourceID uint64 `gorm:"primaryKey" json:"jiraSourceId" validate:"required"`
- UserType string `gorm:"type:varchar(50);primaryKey" json:"userType" validate:"required"`
- UserStatus string `gorm:"type:varchar(50);primaryKey" json:"userStatus" validate:"required"`
- StandardStatus string `gorm:"type:varchar(50)" json:"standardStatus" validate:"required"`
-}
-
-func (JiraSource) TableName() string {
- return "_tool_jira_sources"
-}
-
-func (JiraIssueTypeMapping) TableName() string {
- return "_tool_jira_issue_type_mappings"
-}
-
-func (JiraIssueStatusMapping) TableName() string {
- return "_tool_jira_issue_status_mappings"
-}
diff --git a/plugins/jira/models/migrationscripts/archived/sprint.go b/plugins/jira/models/migrationscripts/archived/sprint.go
index dd1f87a5..4ca8fe86 100644
--- a/plugins/jira/models/migrationscripts/archived/sprint.go
+++ b/plugins/jira/models/migrationscripts/archived/sprint.go
@@ -24,7 +24,7 @@ import (
)
type JiraSprint struct {
- SourceId uint64 `gorm:"primaryKey"`
+ ConnectionId uint64 `gorm:"primaryKey"`
SprintId uint64 `gorm:"primaryKey"`
Self string `gorm:"type:varchar(255)"`
State string `gorm:"type:varchar(255)"`
@@ -38,14 +38,14 @@ type JiraSprint struct {
type JiraBoardSprint struct {
archived.NoPKModel
- SourceId uint64 `gorm:"primaryKey"`
- BoardId uint64 `gorm:"primaryKey"`
- SprintId uint64 `gorm:"primaryKey"`
+ ConnectionId uint64 `gorm:"primaryKey"`
+ BoardId uint64 `gorm:"primaryKey"`
+ SprintId uint64 `gorm:"primaryKey"`
}
type JiraSprintIssue struct {
archived.NoPKModel
- SourceId uint64 `gorm:"primaryKey"`
+ ConnectionId uint64 `gorm:"primaryKey"`
SprintId uint64 `gorm:"primaryKey"`
IssueId uint64 `gorm:"primaryKey"`
ResolutionDate *time.Time
diff --git a/plugins/jira/models/migrationscripts/updateSchemas20220614.go b/plugins/jira/models/migrationscripts/archived/status.go
similarity index 75%
rename from plugins/jira/models/migrationscripts/updateSchemas20220614.go
rename to plugins/jira/models/migrationscripts/archived/status.go
index 7d64d376..20ae5e92 100644
--- a/plugins/jira/models/migrationscripts/updateSchemas20220614.go
+++ b/plugins/jira/models/migrationscripts/archived/status.go
@@ -15,13 +15,10 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-package migrationscripts
+package archived
import (
- "context"
-
"github.com/apache/incubator-devlake/models/migrationscripts/archived"
- "gorm.io/gorm"
)
type JiraStatus struct {
@@ -36,19 +33,3 @@ type JiraStatus struct {
func (JiraStatus) TableName() string {
return "_tool_jira_statuses"
}
-
-type UpdateSchemas20220614 struct{}
-
-func (*UpdateSchemas20220614) Up(ctx context.Context, db *gorm.DB) error {
- return db.Migrator().AutoMigrate(
- &JiraStatus{},
- )
-}
-
-func (*UpdateSchemas20220614) Version() uint64 {
- return 20220614112900
-}
-
-func (*UpdateSchemas20220614) Name() string {
- return "add jira status"
-}
diff --git a/plugins/jira/models/migrationscripts/archived/worklog.go b/plugins/jira/models/migrationscripts/archived/worklog.go
index 5e131d0d..ff31cff5 100644
--- a/plugins/jira/models/migrationscripts/archived/worklog.go
+++ b/plugins/jira/models/migrationscripts/archived/worklog.go
@@ -25,7 +25,7 @@ import (
type JiraWorklog struct {
archived.NoPKModel
- SourceId uint64 `gorm:"primaryKey"`
+ ConnectionId uint64 `gorm:"primaryKey"`
IssueId uint64 `gorm:"primarykey"`
WorklogId string `gorm:"primarykey;type:varchar(255)"`
AuthorId string `gorm:"type:varchar(255)"`
@@ -34,6 +34,7 @@ type JiraWorklog struct {
TimeSpentSeconds int
Updated time.Time
Started time.Time
+ IssueUpdated *time.Time
}
func (JiraWorklog) TableName() string {
diff --git a/plugins/jira/models/migrationscripts/init_schema.go b/plugins/jira/models/migrationscripts/init_schema.go
index 93f1fc53..5af83d2a 100644
--- a/plugins/jira/models/migrationscripts/init_schema.go
+++ b/plugins/jira/models/migrationscripts/init_schema.go
@@ -19,7 +19,11 @@ package migrationscripts
import (
"context"
+ "encoding/base64"
+ "strings"
+ "github.com/apache/incubator-devlake/config"
+ "github.com/apache/incubator-devlake/plugins/core"
"github.com/apache/incubator-devlake/plugins/jira/models/migrationscripts/archived"
"gorm.io/gorm"
)
@@ -27,28 +31,150 @@ import (
type InitSchemas struct{}
func (*InitSchemas) Up(ctx context.Context, db *gorm.DB) error {
- return db.Migrator().AutoMigrate(
+
+ err := db.Migrator().DropTable(
+ // history table
+ "_raw_jira_api_users",
+ "_raw_jira_api_boards",
+ "_raw_jira_api_changelogs",
+ "_raw_jira_api_issues",
+ "_raw_jira_api_projects",
+ "_raw_jira_api_remotelinks",
+ "_raw_jira_api_sprints",
+ "_raw_jira_api_status",
+ "_raw_jira_api_worklogs",
+ "_tool_jira_accounts",
+ "_tool_jira_issue_type_mappings",
+ "_tool_jira_issue_status_mappings",
+ "_tool_jira_changelogs",
+ "_tool_jira_changelog_items",
&archived.JiraProject{},
- &archived.JiraUser{},
&archived.JiraIssue{},
&archived.JiraBoard{},
&archived.JiraBoardIssue{},
- &archived.JiraChangelog{},
- &archived.JiraChangelogItem{},
&archived.JiraRemotelink{},
&archived.JiraIssueCommit{},
- &archived.JiraSource{},
- &archived.JiraIssueTypeMapping{},
- &archived.JiraIssueStatusMapping{},
&archived.JiraSprint{},
&archived.JiraBoardSprint{},
&archived.JiraSprintIssue{},
&archived.JiraWorklog{},
)
+ if err != nil {
+ return err
+ }
+
+ // get connection history data
+ var result *gorm.DB
+ m := db.Migrator()
+
+ if m.HasTable(&archived.JiraConnectionV11{}) {
+ var jiraConns []archived.JiraConnectionV11
+ result = db.Find(&jiraConns)
+
+ if result.Error == nil {
+ err := db.Migrator().DropTable(&archived.JiraConnectionV11{})
+ if err != nil {
+ return err
+ }
+ err = db.Migrator().AutoMigrate(&archived.JiraConnection{})
+ if err != nil {
+ return err
+ }
+
+ for _, v := range jiraConns {
+ conn := &archived.JiraConnection{}
+ conn.ID = v.ID
+ conn.Name = v.Name
+ conn.Endpoint = v.Endpoint
+ conn.Proxy = v.Proxy
+ conn.RateLimit = v.RateLimit
+
+ c := config.GetConfig()
+ encKey := c.GetString("ENCODE_KEY")
+ auth, err := core.Decrypt(encKey, v.BasicAuthEncoded)
+ if err != nil {
+ return err
+ }
+ pk, err := base64.StdEncoding.DecodeString(auth)
+ if err != nil {
+ return err
+ }
+ originInfo := strings.Split(string(pk), ":")
+ if len(originInfo) == 2 {
+ conn.Username = originInfo[0]
+ conn.Password = originInfo[1]
+ // create
+ db.Create(&conn)
+ }
+ }
+ } else if m.HasTable(&archived.JiraConnectionV10{}) {
+ var jiraConns []archived.JiraConnectionV10
+ result = db.Find(&jiraConns)
+
+ if result.Error == nil {
+ err := db.Migrator().DropTable(&archived.JiraConnectionV10{})
+ if err != nil {
+ return err
+ }
+ err = db.Migrator().AutoMigrate(&archived.JiraConnection{})
+ if err != nil {
+ return err
+ }
+
+ for _, v := range jiraConns {
+ conn := &archived.JiraConnection{}
+ conn.ID = v.ID
+ conn.Name = v.Name
+ conn.Endpoint = v.Endpoint
+ conn.Proxy = v.Proxy
+ conn.RateLimit = v.RateLimit
+
+ c := config.GetConfig()
+ encKey := c.GetString("ENCODE_KEY")
+ auth, err := core.Decrypt(encKey, v.BasicAuthEncoded)
+ if err != nil {
+ return err
+ }
+ pk, err := base64.StdEncoding.DecodeString(auth)
+ if err != nil {
+ return err
+ }
+ originInfo := strings.Split(string(pk), ":")
+ if len(originInfo) == 2 {
+ conn.Username = originInfo[0]
+ conn.Password = originInfo[1]
+ // create
+ db.Create(&conn)
+ }
+ }
+ }
+ } else {
+ return result.Error
+ }
+ }
+
+ return db.Migrator().AutoMigrate(
+ &archived.JiraAccount{},
+ &archived.JiraBoardIssue{},
+ &archived.JiraBoard{},
+ &archived.JiraIssueChangelogItems{},
+ &archived.JiraIssueChangelogs{},
+ //&archived.JiraConnection{},
+ &archived.JiraIssueCommit{},
+ &archived.JiraIssueLabel{},
+ &archived.JiraIssue{},
+ &archived.JiraProject{},
+ &archived.JiraRemotelink{},
+ &archived.JiraSprint{},
+ &archived.JiraBoardSprint{},
+ &archived.JiraSprintIssue{},
+ &archived.JiraStatus{},
+ &archived.JiraWorklog{},
+ )
}
func (*InitSchemas) Version() uint64 {
- return 20220407201138
+ return 20220707201138
}
func (*InitSchemas) Name() string {
diff --git a/plugins/jira/models/migrationscripts/register.go b/plugins/jira/models/migrationscripts/register.go
index 81df9841..06d924d0 100644
--- a/plugins/jira/models/migrationscripts/register.go
+++ b/plugins/jira/models/migrationscripts/register.go
@@ -25,18 +25,5 @@ import (
func All() []migration.Script {
return []migration.Script{
new(InitSchemas),
- new(UpdateSchemas20220505),
- new(UpdateSchemas20220507),
- new(UpdateSchemas20220518),
- new(UpdateSchemas20220525),
- new(UpdateSchemas20220526),
- new(UpdateSchemas20220527),
- new(UpdateSchemas20220601),
- new(UpdateSchemas20220614),
- new(UpdateSchemas20220615),
- new(UpdateSchemas20220616),
- new(UpdateSchemas20220620),
- new(UpdateSchemas20220624),
- new(UpdateSchemas20220630),
}
}
diff --git a/plugins/jira/models/migrationscripts/updateSchemas20220505.go b/plugins/jira/models/migrationscripts/updateSchemas20220505.go
deleted file mode 100644
index ff4a6c81..00000000
--- a/plugins/jira/models/migrationscripts/updateSchemas20220505.go
+++ /dev/null
@@ -1,124 +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 migrationscripts
-
-import (
- "context"
- "github.com/apache/incubator-devlake/models/common"
- "github.com/apache/incubator-devlake/plugins/jira/models/migrationscripts/archived"
-
- "gorm.io/gorm"
-)
-
-type JiraConnection20220505 struct {
- common.Model
- Name string `gorm:"type:varchar(100);uniqueIndex" json:"name" validate:"required"`
- Endpoint string `json:"endpoint" validate:"required"`
- BasicAuthEncoded string `json:"basicAuthEncoded" validate:"required"`
- EpicKeyField string `gorm:"type:varchar(50);" json:"epicKeyField"`
- StoryPointField string `gorm:"type:varchar(50);" json:"storyPointField"`
- RemotelinkCommitShaPattern string `gorm:"type:varchar(255);comment='golang regexp, the first group will be recognized as commit sha, ref https://github.com/google/re2/wiki/Syntax'" json:"remotelinkCommitShaPattern"`
- Proxy string `json:"proxy"`
- RateLimit int `comment:"api request rate limt per hour" json:"rateLimit"`
-}
-
-func (JiraConnection20220505) TableName() string {
- return "_tool_jira_connections"
-}
-
-type UpdateSchemas20220505 struct{}
-
-func (*UpdateSchemas20220505) Up(ctx context.Context, db *gorm.DB) error {
- err := db.Migrator().RenameTable(archived.JiraSource{}, JiraConnection20220505{})
- if err != nil {
- return err
- }
- err = db.Migrator().RenameColumn(archived.JiraBoard{}, "source_id", "connection_id")
- if err != nil {
- return err
- }
- err = db.Migrator().RenameColumn(archived.JiraProject{}, "source_id", "connection_id")
- if err != nil {
- return err
- }
- err = db.Migrator().RenameColumn(archived.JiraUser{}, "source_id", "connection_id")
- if err != nil {
- return err
- }
- err = db.Migrator().RenameColumn(archived.JiraIssue{}, "source_id", "connection_id")
- if err != nil {
- return err
- }
- err = db.Migrator().RenameColumn(archived.JiraBoardIssue{}, "source_id", "connection_id")
- if err != nil {
- return err
- }
- err = db.Migrator().RenameColumn(archived.JiraChangelog{}, "source_id", "connection_id")
- if err != nil {
- return err
- }
- err = db.Migrator().RenameColumn(archived.JiraChangelogItem{}, "source_id", "connection_id")
- if err != nil {
- return err
- }
- err = db.Migrator().RenameColumn(archived.JiraRemotelink{}, "source_id", "connection_id")
- if err != nil {
- return err
- }
- err = db.Migrator().RenameColumn(archived.JiraIssueCommit{}, "source_id", "connection_id")
- if err != nil {
- return err
- }
- err = db.Migrator().RenameColumn(archived.JiraIssueTypeMapping{}, "source_id", "connection_id")
- if err != nil {
- return err
- }
- err = db.Migrator().RenameColumn(archived.JiraIssueStatusMapping{}, "source_id", "connection_id")
- if err != nil {
- return err
- }
- err = db.Migrator().RenameColumn(archived.JiraSprint{}, "source_id", "connection_id")
- if err != nil {
- return err
- }
- err = db.Migrator().RenameColumn(archived.JiraBoardSprint{}, "source_id", "connection_id")
- if err != nil {
- return err
- }
- err = db.Migrator().RenameColumn(archived.JiraSprintIssue{}, "source_id", "connection_id")
- if err != nil {
- return err
- }
- err = db.Migrator().RenameColumn(archived.JiraWorklog{}, "source_id", "connection_id")
- if err != nil {
- return err
- }
- return nil
-}
-
-func (*UpdateSchemas20220505) Version() uint64 {
- return 20220505212344
-}
-
-func (*UpdateSchemas20220505) Owner() string {
- return "Jira"
-}
-
-func (*UpdateSchemas20220505) Name() string {
- return "Rename source to connection "
-}
diff --git a/plugins/jira/models/migrationscripts/updateSchemas20220507.go b/plugins/jira/models/migrationscripts/updateSchemas20220507.go
deleted file mode 100644
index 0f2bf59e..00000000
--- a/plugins/jira/models/migrationscripts/updateSchemas20220507.go
+++ /dev/null
@@ -1,94 +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 migrationscripts
-
-import (
- "context"
- "time"
-
- "github.com/apache/incubator-devlake/models/migrationscripts/archived"
- "gorm.io/datatypes"
- "gorm.io/gorm"
-)
-
-type JiraIssue20220507 struct {
- // collected fields
- SourceId uint64 `gorm:"primaryKey"`
- IssueId uint64 `gorm:"primarykey"`
- ProjectId uint64
- Self string `gorm:"type:varchar(255)"`
- IconURL string `gorm:"type:varchar(255);column:icon_url"`
- Key string `gorm:"type:varchar(255)"`
- Summary string
- Type string `gorm:"type:varchar(255)"`
- EpicKey string `gorm:"type:varchar(255)"`
- StatusName string `gorm:"type:varchar(255)"`
- StatusKey string `gorm:"type:varchar(255)"`
- StoryPoint float64
- OriginalEstimateMinutes int64 // user input?
- AggregateEstimateMinutes int64 // sum up of all subtasks?
- RemainingEstimateMinutes int64 // could it be negative value?
- CreatorAccountId string `gorm:"type:varchar(255)"`
- CreatorAccountType string `gorm:"type:varchar(255)"`
- CreatorDisplayName string `gorm:"type:varchar(255)"`
- AssigneeAccountId string `gorm:"type:varchar(255);comment:latest assignee"`
- AssigneeAccountType string `gorm:"type:varchar(255)"`
- AssigneeDisplayName string `gorm:"type:varchar(255)"`
- PriorityId uint64
- PriorityName string `gorm:"type:varchar(255)"`
- ParentId uint64
- ParentKey string `gorm:"type:varchar(255)"`
- SprintId uint64 // latest sprint, issue might cross multiple sprints, would be addressed by #514
- SprintName string `gorm:"type:varchar(255)"`
- ResolutionDate *time.Time
- Created time.Time
- Updated time.Time `gorm:"index"`
- SpentMinutes int64
- LeadTimeMinutes uint
- StdStoryPoint uint
- StdType string `gorm:"type:varchar(255)"`
- StdStatus string `gorm:"type:varchar(255)"`
- AllFields datatypes.JSONMap
-
- // internal status tracking
- ChangelogUpdated *time.Time
- RemotelinkUpdated *time.Time
- archived.NoPKModel
-}
-
-func (JiraIssue20220507) TableName() string {
- return "_tool_jira_issues"
-}
-
-type UpdateSchemas20220507 struct{}
-
-func (*UpdateSchemas20220507) Up(ctx context.Context, db *gorm.DB) error {
- err := db.Migrator().AddColumn(&JiraIssue20220507{}, "icon_url")
- if err != nil {
- return err
- }
- return nil
-}
-
-func (*UpdateSchemas20220507) Version() uint64 {
- return 20220507154646
-}
-
-func (*UpdateSchemas20220507) Name() string {
- return "Add icon_url column to JiraIssue"
-}
diff --git a/plugins/jira/models/migrationscripts/updateSchemas20220525.go b/plugins/jira/models/migrationscripts/updateSchemas20220525.go
deleted file mode 100644
index d3a52509..00000000
--- a/plugins/jira/models/migrationscripts/updateSchemas20220525.go
+++ /dev/null
@@ -1,61 +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 migrationscripts
-
-import (
- "context"
-
- "github.com/apache/incubator-devlake/models/migrationscripts/archived"
- jiraArchived "github.com/apache/incubator-devlake/plugins/jira/models/migrationscripts/archived"
-
- "gorm.io/gorm"
-)
-
-type JiraProject20220525 struct {
- archived.NoPKModel
-
- // collected fields
- ConnectionId uint64 `gorm:"primarykey"`
- Id string `gorm:"primaryKey;type:varchar(255)"`
- ProjectKey string `gorm:"type:varchar(255)"`
- Name string `gorm:"type:varchar(255)"`
-}
-
-func (JiraProject20220525) TableName() string {
- return "_tool_jira_projects"
-}
-
-type UpdateSchemas20220525 struct{}
-
-func (*UpdateSchemas20220525) Up(ctx context.Context, db *gorm.DB) error {
-
- err := db.Migrator().RenameColumn(jiraArchived.JiraProject{}, "key", "project_key")
- if err != nil {
- return err
- }
-
- return nil
-}
-
-func (*UpdateSchemas20220525) Version() uint64 {
- return 20220525154646
-}
-
-func (*UpdateSchemas20220525) Name() string {
- return "update `key` columns to `project_key` at _tool_jira_projects"
-}
diff --git a/plugins/jira/models/migrationscripts/updateSchemas20220526.go b/plugins/jira/models/migrationscripts/updateSchemas20220526.go
deleted file mode 100644
index b7bb634d..00000000
--- a/plugins/jira/models/migrationscripts/updateSchemas20220526.go
+++ /dev/null
@@ -1,99 +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 migrationscripts
-
-import (
- "context"
- "time"
-
- "github.com/apache/incubator-devlake/models/migrationscripts/archived"
- jiraArchived "github.com/apache/incubator-devlake/plugins/jira/models/migrationscripts/archived"
-
- "gorm.io/datatypes"
- "gorm.io/gorm"
-)
-
-type JiraIssue20220526 struct {
- // collected fields
- ConnectionId uint64 `gorm:"primaryKey"`
- IssueId uint64 `gorm:"primarykey"`
- ProjectId uint64
- Self string `gorm:"type:varchar(255)"`
- IconURL string `gorm:"type:varchar(255);column:icon_url"`
- IssueKey string `gorm:"type:varchar(255)"`
- Summary string
- Type string `gorm:"type:varchar(255)"`
- EpicKey string `gorm:"type:varchar(255)"`
- StatusName string `gorm:"type:varchar(255)"`
- StatusKey string `gorm:"type:varchar(255)"`
- StoryPoint float64
- OriginalEstimateMinutes int64 // user input?
- AggregateEstimateMinutes int64 // sum up of all subtasks?
- RemainingEstimateMinutes int64 // could it be negative value?
- CreatorAccountId string `gorm:"type:varchar(255)"`
- CreatorAccountType string `gorm:"type:varchar(255)"`
- CreatorDisplayName string `gorm:"type:varchar(255)"`
- AssigneeAccountId string `gorm:"type:varchar(255);comment:latest assignee"`
- AssigneeAccountType string `gorm:"type:varchar(255)"`
- AssigneeDisplayName string `gorm:"type:varchar(255)"`
- PriorityId uint64
- PriorityName string `gorm:"type:varchar(255)"`
- ParentId uint64
- ParentKey string `gorm:"type:varchar(255)"`
- SprintId uint64 // latest sprint, issue might cross multiple sprints, would be addressed by #514
- SprintName string `gorm:"type:varchar(255)"`
- ResolutionDate *time.Time
- Created time.Time
- Updated time.Time `gorm:"index"`
- SpentMinutes int64
- LeadTimeMinutes uint
- StdStoryPoint uint
- StdType string `gorm:"type:varchar(255)"`
- StdStatus string `gorm:"type:varchar(255)"`
- AllFields datatypes.JSONMap
-
- // internal status tracking
- ChangelogUpdated *time.Time
- RemotelinkUpdated *time.Time
- WorklogUpdated *time.Time
- archived.NoPKModel
-}
-
-func (JiraIssue20220526) TableName() string {
- return "_tool_jira_issues"
-}
-
-type UpdateSchemas20220526 struct{}
-
-func (*UpdateSchemas20220526) Up(ctx context.Context, db *gorm.DB) error {
-
- err := db.Migrator().RenameColumn(jiraArchived.JiraIssue{}, "key", "issue_key")
- if err != nil {
- return err
- }
-
- return nil
-}
-
-func (*UpdateSchemas20220526) Version() uint64 {
- return 20220526154646
-}
-
-func (*UpdateSchemas20220526) Name() string {
- return "update `key` columns to `issue_key` at _tool_jira_issues"
-}
diff --git a/plugins/jira/models/migrationscripts/updateSchemas20220527.go b/plugins/jira/models/migrationscripts/updateSchemas20220527.go
deleted file mode 100644
index ab9d2a27..00000000
--- a/plugins/jira/models/migrationscripts/updateSchemas20220527.go
+++ /dev/null
@@ -1,68 +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 migrationscripts
-
-import (
- "context"
-
- "github.com/apache/incubator-devlake/models/migrationscripts/archived"
- jiraArchived "github.com/apache/incubator-devlake/plugins/jira/models/migrationscripts/archived"
- "gorm.io/gorm"
-)
-
-type JiraChangelogItem20220527 struct {
- archived.NoPKModel
-
- // collected fields
- SourceId uint64 `gorm:"primaryKey"`
- ChangelogId uint64 `gorm:"primaryKey"`
- Field string `gorm:"primaryKey"`
- FieldType string
- FieldId string
- FromValue string
- FromString string
- ToValue string
- ToString string
-}
-
-func (JiraChangelogItem20220527) TableName() string {
- return "_tool_jira_changelog_items"
-}
-
-type UpdateSchemas20220527 struct{}
-
-func (*UpdateSchemas20220527) Up(ctx context.Context, db *gorm.DB) error {
-
- err := db.Migrator().RenameColumn(jiraArchived.JiraChangelogItem{}, "from", "from_value")
- if err != nil {
- return err
- }
- err = db.Migrator().RenameColumn(jiraArchived.JiraChangelogItem{}, "to", "to_value")
- if err != nil {
- return err
- }
- return nil
-}
-
-func (*UpdateSchemas20220527) Version() uint64 {
- return 20220527154646
-}
-
-func (*UpdateSchemas20220527) Name() string {
- return "update `from` and `to` columns to `from_value` and `to_value` at _tool_jira_changelog_items"
-}
diff --git a/plugins/jira/models/migrationscripts/updateSchemas20220601.go b/plugins/jira/models/migrationscripts/updateSchemas20220601.go
deleted file mode 100644
index 7a7bb7b5..00000000
--- a/plugins/jira/models/migrationscripts/updateSchemas20220601.go
+++ /dev/null
@@ -1,132 +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 migrationscripts
-
-import (
- "context"
- "encoding/base64"
- "strings"
-
- "github.com/apache/incubator-devlake/plugins/core"
- "github.com/apache/incubator-devlake/plugins/helper"
- "gorm.io/gorm"
-)
-
-type JiraConnection20220601 struct {
- helper.RestConnection
- helper.BasicAuth
- EpicKeyField string `gorm:"type:varchar(50);" json:"epicKeyField"`
- StoryPointField string `gorm:"type:varchar(50);" json:"storyPointField"`
- RemotelinkCommitShaPattern string `gorm:"type:varchar(255);comment='golang regexp, the first group will be recognized as commit sha, ref https://github.com/google/re2/wiki/Syntax'" json:"remotelinkCommitShaPattern"`
-}
-
-func (JiraConnection20220601) TableName() string {
- return "_tool_jira_connections"
-}
-
-type UpdateSchemas20220601 struct {
- config core.ConfigGetter
- logger core.Logger
-}
-
-func (u *UpdateSchemas20220601) SetConfigGetter(getter core.ConfigGetter) {
- u.config = getter
-}
-
-func (u *UpdateSchemas20220601) SetLogger(logger core.Logger) {
- u.logger = logger
-}
-
-func (u *UpdateSchemas20220601) Up(ctx context.Context, db *gorm.DB) error {
- var err error
- if !db.Migrator().HasColumn(&JiraConnection20220505{}, "password") {
- err = db.Migrator().AddColumn(&JiraConnection20220601{}, "password")
- if err != nil {
- return err
- }
- }
-
- if !db.Migrator().HasColumn(&JiraConnection20220505{}, "username") {
- err = db.Migrator().AddColumn(&JiraConnection20220601{}, "username")
- if err != nil {
- return err
- }
- }
-
- if db.Migrator().HasColumn(&JiraConnection20220505{}, "basic_auth_encoded") {
- connections := make([]*JiraConnection20220505, 0)
- err = db.Find(&connections).Error
- if err != nil {
- return err
- }
- encKey := u.config.GetString(core.EncodeKeyEnvStr)
- for _, connection := range connections {
- basicAuthEncoded, err := core.Decrypt(encKey, connection.BasicAuthEncoded)
- if err != nil {
- return err
- }
- basicAuth, err := base64.StdEncoding.DecodeString(basicAuthEncoded)
- if err != nil {
- return err
- }
- strList := strings.Split(string(basicAuth), ":")
- if len(strList) > 1 {
- encPass, err := core.Encrypt(encKey, strList[1])
- if err != nil {
- return err
- }
- newConnection := JiraConnection20220601{
- RestConnection: helper.RestConnection{
- BaseConnection: helper.BaseConnection{
- Name: connection.Name,
- Model: connection.Model,
- },
- Endpoint: connection.Endpoint,
- Proxy: connection.Proxy,
- RateLimit: connection.RateLimit,
- },
- BasicAuth: helper.BasicAuth{
- Username: strList[0],
- Password: encPass,
- },
- EpicKeyField: connection.EpicKeyField,
- StoryPointField: connection.StoryPointField,
- RemotelinkCommitShaPattern: connection.RemotelinkCommitShaPattern,
- }
- err = db.Save(newConnection).Error
- if err != nil {
- return err
- }
- }
- }
- err = db.Migrator().DropColumn(&JiraConnection20220505{}, "basic_auth_encoded")
- if err != nil {
- return err
- }
- }
-
- return nil
-}
-
-func (*UpdateSchemas20220601) Version() uint64 {
- return 20220601154646
-}
-
-func (*UpdateSchemas20220601) Name() string {
- return "change basic_auth to username/password"
-}
diff --git a/plugins/jira/models/migrationscripts/updateSchemas20220615.go b/plugins/jira/models/migrationscripts/updateSchemas20220615.go
deleted file mode 100644
index f527cdde..00000000
--- a/plugins/jira/models/migrationscripts/updateSchemas20220615.go
+++ /dev/null
@@ -1,64 +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 migrationscripts
-
-import (
- "context"
- "time"
-
- "gorm.io/gorm"
-)
-
-type UpdateSchemas20220615 struct {
-}
-
-type JiraIssue20220615 struct{}
-
-func (JiraIssue20220615) TableName() string {
- return "_tool_jira_issues"
-}
-
-type JiraChangelog20220615 struct {
- IssueUpdated *time.Time
-}
-
-func (JiraChangelog20220615) TableName() string {
- return "_tool_jira_changelogs"
-}
-
-func (*UpdateSchemas20220615) Up(ctx context.Context, db *gorm.DB) error {
- var err error
- err = db.Migrator().DropColumn(&JiraIssue20220615{}, "changelog_updated")
- if err != nil {
- return err
- }
- err = db.Migrator().AutoMigrate(&JiraChangelog20220615{})
- if err != nil {
- return err
- }
-
- return nil
-}
-
-func (*UpdateSchemas20220615) Version() uint64 {
- return 20220601154646
-}
-
-func (*UpdateSchemas20220615) Name() string {
- return "replace issues.changelog_updated with changelogs.issue_updated"
-}
diff --git a/plugins/jira/models/migrationscripts/updateSchemas20220620.go b/plugins/jira/models/migrationscripts/updateSchemas20220620.go
deleted file mode 100644
index 70fc52fc..00000000
--- a/plugins/jira/models/migrationscripts/updateSchemas20220620.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 migrationscripts
-
-import (
- "context"
- "gorm.io/gorm"
- "time"
-)
-
-type UpdateSchemas20220620 struct {
-}
-
-type JiraIssue20220620 struct{}
-
-func (JiraIssue20220620) TableName() string {
- return "_tool_jira_issues"
-}
-
-type JiraWorklog20220620 struct {
- IssueUpdated *time.Time
-}
-
-func (JiraWorklog20220620) TableName() string {
- return "_tool_jira_worklogs"
-}
-
-type JiraRemotelink20220620 struct {
- IssueUpdated *time.Time
-}
-
-func (JiraRemotelink20220620) TableName() string {
- return "_tool_jira_remotelinks"
-}
-
-func (*UpdateSchemas20220620) Up(ctx context.Context, db *gorm.DB) error {
- var err error
- err = db.Migrator().DropColumn(&JiraIssue20220620{}, "worklog_updated")
- if err != nil {
- return err
- }
- err = db.Migrator().DropColumn(&JiraIssue20220620{}, "remotelink_updated")
- if err != nil {
- return err
- }
- err = db.Migrator().AutoMigrate(&JiraWorklog20220620{}, &JiraRemotelink20220620{})
- if err != nil {
- return err
- }
-
- return nil
-}
-
-func (*UpdateSchemas20220620) Version() uint64 {
- return 20220620101111
-}
-
-func (*UpdateSchemas20220620) Name() string {
- return "add column issue_updated to _tool_jira_worklogs and _tool_jira_remotelinks"
-}
diff --git a/plugins/jira/models/migrationscripts/updateSchemas20220624.go b/plugins/jira/models/migrationscripts/updateSchemas20220624.go
deleted file mode 100644
index 5dc389fa..00000000
--- a/plugins/jira/models/migrationscripts/updateSchemas20220624.go
+++ /dev/null
@@ -1,57 +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 migrationscripts
-
-import (
- "context"
-
- "gorm.io/gorm"
-)
-
-type JiraConnection20220624 struct {
- EpicKeyField string `gorm:"type:varchar(50);" json:"epicKeyField"`
- StoryPointField string `gorm:"type:varchar(50);" json:"storyPointField"`
- RemotelinkCommitShaPattern string `gorm:"type:varchar(255);comment='golang regexp, the first group will be recognized as commit sha, ref https://github.com/google/re2/wiki/Syntax'" json:"remotelinkCommitShaPattern"`
-}
-
-func (JiraConnection20220624) TableName() string {
- return "_tool_jira_connections"
-}
-
-type UpdateSchemas20220624 struct {
-}
-
-func (u *UpdateSchemas20220624) Up(ctx context.Context, db *gorm.DB) error {
- err := db.Migrator().DropColumn(&JiraConnection20220624{}, "epic_key_field")
- if err != nil {
- return err
- }
- err = db.Migrator().DropColumn(&JiraConnection20220624{}, "story_point_field")
- if err != nil {
- return err
- }
- return db.Migrator().DropColumn(&JiraConnection20220624{}, "remotelink_commit_sha_pattern")
-}
-
-func (*UpdateSchemas20220624) Version() uint64 {
- return 20220624102636
-}
-
-func (*UpdateSchemas20220624) Name() string {
- return "remove epic_key_field, story_point_field, remotelink_commit_sha_pattern"
-}
diff --git a/plugins/jira/models/migrationscripts/updateSchemas20220630.go b/plugins/jira/models/migrationscripts/updateSchemas20220630.go
deleted file mode 100644
index 5e9132d1..00000000
--- a/plugins/jira/models/migrationscripts/updateSchemas20220630.go
+++ /dev/null
@@ -1,60 +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 migrationscripts
-
-import (
- "context"
-
- "gorm.io/gorm"
-)
-
-type JiraIssue20220630 struct {
- StdStoryPoint int64
- TmpStdStoryPoint uint
-}
-
-func (JiraIssue20220630) TableName() string {
- return "_tool_jira_issues"
-}
-
-type UpdateSchemas20220630 struct {
-}
-
-func (u *UpdateSchemas20220630) Up(ctx context.Context, db *gorm.DB) error {
- err := db.Migrator().RenameColumn(&JiraIssue20220630{}, "std_story_point", "tmp_std_story_point")
- if err != nil {
- return err
- }
- err = db.Migrator().AddColumn(&JiraIssue20220630{}, "std_story_point")
- if err != nil {
- return err
- }
- err = db.Model(&JiraIssue20220630{}).Where("1 = 1").UpdateColumn("std_story_point", gorm.Expr("tmp_std_story_point")).Error
- if err != nil {
- return err
- }
- return db.Migrator().DropColumn(&JiraIssue20220630{}, "tmp_std_story_point")
-}
-
-func (*UpdateSchemas20220630) Version() uint64 {
- return 20220630130656
-}
-
-func (*UpdateSchemas20220630) Name() string {
- return "alter std_story_point from unsigned to signed"
-}
diff --git a/plugins/jira/models/migrationscripts/update_schemas20220518.go b/plugins/jira/models/migrationscripts/update_schemas20220518.go
deleted file mode 100644
index 9d8401c9..00000000
--- a/plugins/jira/models/migrationscripts/update_schemas20220518.go
+++ /dev/null
@@ -1,96 +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 migrationscripts
-
-import (
- "context"
- "time"
-
- "gorm.io/datatypes"
- "gorm.io/gorm"
-
- "github.com/apache/incubator-devlake/models/migrationscripts/archived"
-)
-
-type JiraIssue20220518 struct {
- // collected fields
- SourceId uint64 `gorm:"primaryKey"`
- IssueId uint64 `gorm:"primarykey"`
- ProjectId uint64
- Self string `gorm:"type:varchar(255)"`
- IconURL string `gorm:"type:varchar(255);column:icon_url"`
- Key string `gorm:"type:varchar(255)"`
- Summary string
- Type string `gorm:"type:varchar(255)"`
- EpicKey string `gorm:"type:varchar(255)"`
- StatusName string `gorm:"type:varchar(255)"`
- StatusKey string `gorm:"type:varchar(255)"`
- StoryPoint float64
- OriginalEstimateMinutes int64 // user input?
- AggregateEstimateMinutes int64 // sum up of all subtasks?
- RemainingEstimateMinutes int64 // could it be negative value?
- CreatorAccountId string `gorm:"type:varchar(255)"`
- CreatorAccountType string `gorm:"type:varchar(255)"`
- CreatorDisplayName string `gorm:"type:varchar(255)"`
- AssigneeAccountId string `gorm:"type:varchar(255);comment:latest assignee"`
- AssigneeAccountType string `gorm:"type:varchar(255)"`
- AssigneeDisplayName string `gorm:"type:varchar(255)"`
- PriorityId uint64
- PriorityName string `gorm:"type:varchar(255)"`
- ParentId uint64
- ParentKey string `gorm:"type:varchar(255)"`
- SprintId uint64 // latest sprint, issue might cross multiple sprints, would be addressed by #514
- SprintName string `gorm:"type:varchar(255)"`
- ResolutionDate *time.Time
- Created time.Time
- Updated time.Time `gorm:"index"`
- SpentMinutes int64
- LeadTimeMinutes uint
- StdStoryPoint uint
- StdType string `gorm:"type:varchar(255)"`
- StdStatus string `gorm:"type:varchar(255)"`
- AllFields datatypes.JSONMap
-
- // internal status tracking
- ChangelogUpdated *time.Time
- RemotelinkUpdated *time.Time
- WorklogUpdated *time.Time
- archived.NoPKModel
-}
-
-func (JiraIssue20220518) TableName() string {
- return "_tool_jira_issues"
-}
-
-type UpdateSchemas20220518 struct{}
-
-func (*UpdateSchemas20220518) Up(ctx context.Context, db *gorm.DB) error {
- err := db.Migrator().AddColumn(&JiraIssue20220518{}, "worklog_updated")
- if err != nil {
- return err
- }
- return nil
-}
-
-func (*UpdateSchemas20220518) Version() uint64 {
- return 20220518132510
-}
-
-func (*UpdateSchemas20220518) Name() string {
- return "Add worklog_updated column to JiraIssue"
-}
diff --git a/plugins/jira/tasks/user_collector.go b/plugins/jira/tasks/account_collector.go
similarity index 86%
rename from plugins/jira/tasks/user_collector.go
rename to plugins/jira/tasks/account_collector.go
index 6ccf5664..20340a54 100644
--- a/plugins/jira/tasks/user_collector.go
+++ b/plugins/jira/tasks/account_collector.go
@@ -31,19 +31,19 @@ import (
const RAW_USERS_TABLE = "jira_api_users"
-var CollectUsersMeta = core.SubTaskMeta{
- Name: "collectUsers",
- EntryPoint: CollectUsers,
+var CollectAccountsMeta = core.SubTaskMeta{
+ Name: "collectAccounts",
+ EntryPoint: CollectAccounts,
EnabledByDefault: true,
- Description: "collect Jira users",
+ Description: "collect Jira accounts",
DomainTypes: []string{core.DOMAIN_TYPE_CROSS},
}
-func CollectUsers(taskCtx core.SubTaskContext) error {
+func CollectAccounts(taskCtx core.SubTaskContext) error {
data := taskCtx.GetData().(*JiraTaskData)
db := taskCtx.GetDal()
logger := taskCtx.GetLogger()
- logger.Info("collect user")
+ logger.Info("collect account")
cursor, err := db.Cursor(
Select("account_id"),
From("_tool_jira_accounts"),
@@ -52,7 +52,7 @@ func CollectUsers(taskCtx core.SubTaskContext) error {
if err != nil {
return err
}
- iterator, err := helper.NewDalCursorIterator(db, cursor, reflect.TypeOf(models.JiraUser{}))
+ iterator, err := helper.NewDalCursorIterator(db, cursor, reflect.TypeOf(models.JiraAccount{}))
if err != nil {
return err
}
@@ -73,7 +73,7 @@ func CollectUsers(taskCtx core.SubTaskContext) error {
Input: iterator,
UrlTemplate: "api/2/user",
Query: func(reqData *helper.RequestData) (url.Values, error) {
- user := reqData.Input.(*models.JiraUser)
+ user := reqData.Input.(*models.JiraAccount)
query := url.Values{}
query.Set(queryKey, user.AccountId)
return query, nil
@@ -88,7 +88,7 @@ func CollectUsers(taskCtx core.SubTaskContext) error {
},
})
if err != nil {
- logger.Error("collect user error:", err)
+ logger.Error("collect account error:", err)
return err
}
diff --git a/plugins/jira/tasks/user_convertor.go b/plugins/jira/tasks/account_convertor.go
similarity index 77%
rename from plugins/jira/tasks/user_convertor.go
rename to plugins/jira/tasks/account_convertor.go
index c20aba8f..650d7270 100644
--- a/plugins/jira/tasks/user_convertor.go
+++ b/plugins/jira/tasks/account_convertor.go
@@ -18,6 +18,8 @@ limitations under the License.
package tasks
import (
+ "reflect"
+
"github.com/apache/incubator-devlake/models/domainlayer"
"github.com/apache/incubator-devlake/models/domainlayer/crossdomain"
"github.com/apache/incubator-devlake/models/domainlayer/didgen"
@@ -25,27 +27,26 @@ import (
"github.com/apache/incubator-devlake/plugins/core/dal"
"github.com/apache/incubator-devlake/plugins/helper"
"github.com/apache/incubator-devlake/plugins/jira/models"
- "reflect"
)
-var ConvertUsersMeta = core.SubTaskMeta{
- Name: "convertUsers",
- EntryPoint: ConvertUsers,
+var ConvertAccountsMeta = core.SubTaskMeta{
+ Name: "convertAccounts",
+ EntryPoint: ConvertAccounts,
EnabledByDefault: true,
- Description: "convert Jira users",
+ Description: "convert Jira accounts",
DomainTypes: []string{core.DOMAIN_TYPE_CROSS},
}
-func ConvertUsers(taskCtx core.SubTaskContext) error {
+func ConvertAccounts(taskCtx core.SubTaskContext) error {
data := taskCtx.GetData().(*JiraTaskData)
connectionId := data.Options.ConnectionId
boardId := data.Options.BoardId
logger := taskCtx.GetLogger()
db := taskCtx.GetDal()
- logger.Info("convert user")
+ logger.Info("convert account")
clauses := []dal.Clause{
dal.Select("*"),
- dal.From(&models.JiraUser{}),
+ dal.From(&models.JiraAccount{}),
dal.Where("connection_id = ?", connectionId),
}
cursor, err := db.Cursor(clauses...)
@@ -54,7 +55,7 @@ func ConvertUsers(taskCtx core.SubTaskContext) error {
}
defer cursor.Close()
- userIdGen := didgen.NewDomainIdGenerator(&models.JiraUser{})
+ accountIdGen := didgen.NewDomainIdGenerator(&models.JiraAccount{})
converter, err := helper.NewDataConverter(helper.DataConverterArgs{
RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
Ctx: taskCtx,
@@ -64,17 +65,17 @@ func ConvertUsers(taskCtx core.SubTaskContext) error {
},
Table: RAW_USERS_TABLE,
},
- InputRowType: reflect.TypeOf(models.JiraUser{}),
+ InputRowType: reflect.TypeOf(models.JiraAccount{}),
Input: cursor,
Convert: func(inputRow interface{}) ([]interface{}, error) {
- jiraUser := inputRow.(*models.JiraUser)
+ jiraAccount := inputRow.(*models.JiraAccount)
u := &crossdomain.Account{
DomainEntity: domainlayer.DomainEntity{
- Id: userIdGen.Generate(connectionId, jiraUser.AccountId),
+ Id: accountIdGen.Generate(connectionId, jiraAccount.AccountId),
},
- UserName: jiraUser.Name,
- Email: jiraUser.Email,
- AvatarUrl: jiraUser.AvatarUrl,
+ UserName: jiraAccount.Name,
+ Email: jiraAccount.Email,
+ AvatarUrl: jiraAccount.AvatarUrl,
}
return []interface{}{u}, nil
},
diff --git a/plugins/jira/tasks/user_extractor.go b/plugins/jira/tasks/account_extractor.go
similarity index 87%
rename from plugins/jira/tasks/user_extractor.go
rename to plugins/jira/tasks/account_extractor.go
index 2d5c855f..9ff3b917 100644
--- a/plugins/jira/tasks/user_extractor.go
+++ b/plugins/jira/tasks/account_extractor.go
@@ -25,17 +25,17 @@ import (
"github.com/apache/incubator-devlake/plugins/jira/tasks/apiv2models"
)
-var _ core.SubTaskEntryPoint = ExtractUsers
+var _ core.SubTaskEntryPoint = ExtractAccounts
-var ExtractUsersMeta = core.SubTaskMeta{
- Name: "extractUsers",
- EntryPoint: ExtractUsers,
+var ExtractAccountsMeta = core.SubTaskMeta{
+ Name: "extractAccounts",
+ EntryPoint: ExtractAccounts,
EnabledByDefault: true,
Description: "extract Jira users",
DomainTypes: []string{core.DOMAIN_TYPE_CROSS},
}
-func ExtractUsers(taskCtx core.SubTaskContext) error {
+func ExtractAccounts(taskCtx core.SubTaskContext) error {
data := taskCtx.GetData().(*JiraTaskData)
extractor, err := helper.NewApiExtractor(helper.ApiExtractorArgs{
RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
@@ -47,7 +47,7 @@ func ExtractUsers(taskCtx core.SubTaskContext) error {
Table: RAW_USERS_TABLE,
},
Extract: func(row *helper.RawData) ([]interface{}, error) {
- var user apiv2models.User
+ var user apiv2models.Account
err := json.Unmarshal(row.Data, &user)
if err != nil {
return nil, err
diff --git a/plugins/jira/tasks/apiv2models/changelog.go b/plugins/jira/tasks/apiv2models/changelog.go
index 3d12212a..e77a6293 100644
--- a/plugins/jira/tasks/apiv2models/changelog.go
+++ b/plugins/jira/tasks/apiv2models/changelog.go
@@ -18,20 +18,21 @@ limitations under the License.
package apiv2models
import (
+ "time"
+
"github.com/apache/incubator-devlake/plugins/helper"
"github.com/apache/incubator-devlake/plugins/jira/models"
- "time"
)
type Changelog struct {
ID uint64 `json:"id,string"`
- Author User `json:"author"`
+ Author Account `json:"author"`
Created helper.Iso8601Time `json:"created"`
Items []ChangelogItem `json:"items"`
}
-func (c Changelog) ToToolLayer(connectionId, issueId uint64, issueUpdated *time.Time) (*models.JiraChangelog, *models.JiraUser) {
- return &models.JiraChangelog{
+func (c Changelog) ToToolLayer(connectionId, issueId uint64, issueUpdated *time.Time) (*models.JiraIssueChangelogs, *models.JiraAccount) {
+ return &models.JiraIssueChangelogs{
ConnectionId: connectionId,
ChangelogId: c.ID,
IssueId: issueId,
@@ -52,8 +53,8 @@ type ChangelogItem struct {
ToString string `json:"toString"`
}
-func (c ChangelogItem) ToToolLayer(connectionId, changelogId uint64) *models.JiraChangelogItem {
- return &models.JiraChangelogItem{
+func (c ChangelogItem) ToToolLayer(connectionId, changelogId uint64) *models.JiraIssueChangelogItems {
+ return &models.JiraIssueChangelogItems{
ConnectionId: connectionId,
ChangelogId: changelogId,
Field: c.Field,
@@ -65,16 +66,16 @@ func (c ChangelogItem) ToToolLayer(connectionId, changelogId uint64) *models.Jir
}
}
-func (c ChangelogItem) ExtractUser(connectionId uint64) []*models.JiraUser {
+func (c ChangelogItem) ExtractUser(connectionId uint64) []*models.JiraAccount {
if c.Field != "assignee" {
return nil
}
- var result []*models.JiraUser
+ var result []*models.JiraAccount
if c.FromValue != "" {
- result = append(result, &models.JiraUser{ConnectionId: connectionId, AccountId: c.FromValue})
+ result = append(result, &models.JiraAccount{ConnectionId: connectionId, AccountId: c.FromValue})
}
if c.ToValue != "" {
- result = append(result, &models.JiraUser{ConnectionId: connectionId, AccountId: c.ToValue})
+ result = append(result, &models.JiraAccount{ConnectionId: connectionId, AccountId: c.ToValue})
}
return result
}
diff --git a/plugins/jira/tasks/apiv2models/issue.go b/plugins/jira/tasks/apiv2models/issue.go
index 52dd60c6..7cad3635 100644
--- a/plugins/jira/tasks/apiv2models/issue.go
+++ b/plugins/jira/tasks/apiv2models/issue.go
@@ -19,9 +19,10 @@ package apiv2models
import (
"encoding/json"
- "gorm.io/datatypes"
"time"
+ "gorm.io/datatypes"
+
"github.com/apache/incubator-devlake/plugins/helper"
"github.com/apache/incubator-devlake/plugins/jira/models"
)
@@ -96,7 +97,7 @@ type Issue struct {
Aggregatetimeoriginalestimate interface{} `json:"aggregatetimeoriginalestimate"`
Versions []interface{} `json:"versions"`
Issuelinks []interface{} `json:"issuelinks"`
- Assignee *User `json:"assignee"`
+ Assignee *Account `json:"assignee"`
Updated helper.Iso8601Time `json:"updated"`
Status struct {
Self string `json:"self"`
@@ -123,9 +124,9 @@ type Issue struct {
Archiveddate interface{} `json:"archiveddate"`
Aggregatetimeestimate *int64 `json:"aggregatetimeestimate"`
Summary string `json:"summary"`
- Creator User `json:"creator"`
+ Creator Account `json:"creator"`
Subtasks []interface{} `json:"subtasks"`
- Reporter User `json:"reporter"`
+ Reporter Account `json:"reporter"`
Aggregateprogress struct {
Progress int `json:"progress"`
Total int `json:"total"`
@@ -224,12 +225,12 @@ func (i *Issue) SetAllFields(raw datatypes.JSON) error {
return nil
}
-func (i Issue) ExtractEntities(connectionId uint64) ([]uint64, *models.JiraIssue, []*models.JiraWorklog, []*models.JiraChangelog, []*models.JiraChangelogItem, []*models.JiraUser) {
+func (i Issue) ExtractEntities(connectionId uint64) ([]uint64, *models.JiraIssue, []*models.JiraWorklog, []*models.JiraIssueChangelogs, []*models.JiraIssueChangelogItems, []*models.JiraAccount) {
issue := i.toToolLayer(connectionId)
var worklogs []*models.JiraWorklog
- var changelogs []*models.JiraChangelog
- var changelogItems []*models.JiraChangelogItem
- var users []*models.JiraUser
+ var changelogs []*models.JiraIssueChangelogs
+ var changelogItems []*models.JiraIssueChangelogItems
+ var users []*models.JiraAccount
var sprints []uint64
if i.Fields.Worklog != nil {
diff --git a/plugins/jira/tasks/apiv2models/user.go b/plugins/jira/tasks/apiv2models/user.go
index 46970535..cecdf085 100644
--- a/plugins/jira/tasks/apiv2models/user.go
+++ b/plugins/jira/tasks/apiv2models/user.go
@@ -19,7 +19,7 @@ package apiv2models
import "github.com/apache/incubator-devlake/plugins/jira/models"
-type User struct {
+type Account struct {
Self string `json:"self"`
Key string `json:"key"`
Name string `json:"name"`
@@ -39,7 +39,7 @@ type User struct {
Locale string `json:"locale"`
}
-func (u *User) getAccountId() string {
+func (u *Account) getAccountId() string {
if u == nil {
return ""
}
@@ -49,8 +49,8 @@ func (u *User) getAccountId() string {
return u.EmailAddress
}
-func (u *User) ToToolLayer(connectionId uint64) *models.JiraUser {
- return &models.JiraUser{
+func (u *Account) ToToolLayer(connectionId uint64) *models.JiraAccount {
+ return &models.JiraAccount{
ConnectionId: connectionId,
AccountId: u.getAccountId(),
AccountType: u.AccountType,
diff --git a/plugins/jira/tasks/apiv2models/user_test.go b/plugins/jira/tasks/apiv2models/user_test.go
index 1e4c5bbd..73af35fd 100644
--- a/plugins/jira/tasks/apiv2models/user_test.go
+++ b/plugins/jira/tasks/apiv2models/user_test.go
@@ -59,7 +59,7 @@ func TestUser_getAccountId(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- u := &User{
+ u := &Account{
Self: tt.fields.Self,
Key: tt.fields.Key,
Name: tt.fields.Name,
diff --git a/plugins/jira/tasks/apiv2models/worklog.go b/plugins/jira/tasks/apiv2models/worklog.go
index db8cddac..d3f5aaff 100644
--- a/plugins/jira/tasks/apiv2models/worklog.go
+++ b/plugins/jira/tasks/apiv2models/worklog.go
@@ -18,16 +18,17 @@ limitations under the License.
package apiv2models
import (
- "github.com/apache/incubator-devlake/plugins/helper"
"time"
+ "github.com/apache/incubator-devlake/plugins/helper"
+
"github.com/apache/incubator-devlake/plugins/jira/models"
)
type Worklog struct {
Self string `json:"self"`
- Author *User `json:"author"`
- UpdateAuthor *User `json:"updateAuthor"`
+ Author *Account `json:"author"`
+ UpdateAuthor *Account `json:"updateAuthor"`
Comment string `json:"comment"`
Created string `json:"created"`
Updated helper.Iso8601Time `json:"updated"`
diff --git a/plugins/jira/tasks/changelog_collector.go b/plugins/jira/tasks/issue_changelog_collector.go
similarity index 88%
rename from plugins/jira/tasks/changelog_collector.go
rename to plugins/jira/tasks/issue_changelog_collector.go
index bcfb38db..fe169d89 100644
--- a/plugins/jira/tasks/changelog_collector.go
+++ b/plugins/jira/tasks/issue_changelog_collector.go
@@ -31,19 +31,19 @@ import (
"github.com/apache/incubator-devlake/plugins/jira/tasks/apiv2models"
)
-var _ core.SubTaskEntryPoint = CollectChangelogs
+var _ core.SubTaskEntryPoint = CollectIssueChangelogs
-const RAW_CHANGELOG_TABLE = "jira_api_changelogs"
+const RAW_CHANGELOG_TABLE = "jira_api_issue_changelogs"
-var CollectChangelogsMeta = core.SubTaskMeta{
- Name: "collectChangelogs",
- EntryPoint: CollectChangelogs,
+var CollectIssueChangelogsMeta = core.SubTaskMeta{
+ Name: "collectIssueChangelogs",
+ EntryPoint: CollectIssueChangelogs,
EnabledByDefault: true,
- Description: "collect Jira change logs",
+ Description: "collect Jira Issue change logs",
DomainTypes: []string{core.DOMAIN_TYPE_TICKET},
}
-func CollectChangelogs(taskCtx core.SubTaskContext) error {
+func CollectIssueChangelogs(taskCtx core.SubTaskContext) error {
data := taskCtx.GetData().(*JiraTaskData)
if data.JiraServerInfo.DeploymentType == models.DeploymentServer {
return nil
@@ -56,7 +56,7 @@ func CollectChangelogs(taskCtx core.SubTaskContext) error {
dal.Select("i.issue_id, i.updated AS update_time"),
dal.From("_tool_jira_board_issues bi"),
dal.Join("LEFT JOIN _tool_jira_issues i ON (bi.connection_id = i.connection_id AND bi.issue_id = i.issue_id)"),
- dal.Join("LEFT JOIN _tool_jira_changelogs c ON (c.connection_id = i.connection_id AND c.issue_id = i.issue_id)"),
+ dal.Join("LEFT JOIN _tool_jira_issue_changelogs c ON (c.connection_id = i.connection_id AND c.issue_id = i.issue_id)"),
dal.Where(`i.updated > i.created AND bi.connection_id = ? AND bi.board_id = ? `, data.Options.ConnectionId, data.Options.BoardId),
dal.Groupby("i.issue_id, i.updated"),
dal.Having("i.updated > max(c.issue_updated) OR max(c.issue_updated) IS NULL"),
diff --git a/plugins/jira/tasks/changelog_convertor.go b/plugins/jira/tasks/issue_changelog_convertor.go
similarity index 73%
rename from plugins/jira/tasks/changelog_convertor.go
rename to plugins/jira/tasks/issue_changelog_convertor.go
index bbcbf8bb..0b70eada 100644
--- a/plugins/jira/tasks/changelog_convertor.go
+++ b/plugins/jira/tasks/issue_changelog_convertor.go
@@ -18,12 +18,13 @@ limitations under the License.
package tasks
import (
- "github.com/apache/incubator-devlake/plugins/core/dal"
"reflect"
"strconv"
"strings"
"time"
+ "github.com/apache/incubator-devlake/plugins/core/dal"
+
"github.com/apache/incubator-devlake/models/domainlayer"
"github.com/apache/incubator-devlake/models/domainlayer/didgen"
"github.com/apache/incubator-devlake/models/domainlayer/ticket"
@@ -32,23 +33,23 @@ import (
"github.com/apache/incubator-devlake/plugins/jira/models"
)
-var ConvertChangelogsMeta = core.SubTaskMeta{
- Name: "convertChangelogs",
- EntryPoint: ConvertChangelogs,
+var ConvertIssueChangelogsMeta = core.SubTaskMeta{
+ Name: "convertIssueChangelogs",
+ EntryPoint: ConvertIssueChangelogs,
EnabledByDefault: true,
- Description: "convert Jira change logs",
+ Description: "convert Jira Issue change logs",
DomainTypes: []string{core.DOMAIN_TYPE_TICKET},
}
-type ChangelogItemResult struct {
- models.JiraChangelogItem
+type IssueChangelogItemResult struct {
+ models.JiraIssueChangelogItems
IssueId uint64 `gorm:"index"`
AuthorAccountId string
AuthorDisplayName string
Created time.Time
}
-func ConvertChangelogs(taskCtx core.SubTaskContext) error {
+func ConvertIssueChangelogs(taskCtx core.SubTaskContext) error {
data := taskCtx.GetData().(*JiraTaskData)
connectionId := data.Options.ConnectionId
boardId := data.Options.BoardId
@@ -57,17 +58,17 @@ func ConvertChangelogs(taskCtx core.SubTaskContext) error {
logger.Info("covert changelog")
// select all changelogs belongs to the board
clauses := []dal.Clause{
- dal.Select("_tool_jira_changelog_items.*, _tool_jira_changelogs.issue_id, author_account_id, author_display_name, created"),
- dal.From("_tool_jira_changelog_items"),
- dal.Join(`left join _tool_jira_changelogs on (
- _tool_jira_changelogs.connection_id = _tool_jira_changelog_items.connection_id
- AND _tool_jira_changelogs.changelog_id = _tool_jira_changelog_items.changelog_id
+ dal.Select("_tool_jira_issue_changelog_items.*, _tool_jira_issue_changelogs.issue_id, author_account_id, author_display_name, created"),
+ dal.From("_tool_jira_issue_changelog_items"),
+ dal.Join(`left join _tool_jira_issue_changelogs on (
+ _tool_jira_issue_changelogs.connection_id = _tool_jira_issue_changelog_items.connection_id
+ AND _tool_jira_issue_changelogs.changelog_id = _tool_jira_issue_changelog_items.changelog_id
)`),
dal.Join(`left join _tool_jira_board_issues on (
- _tool_jira_board_issues.connection_id = _tool_jira_changelogs.connection_id
- AND _tool_jira_board_issues.issue_id = _tool_jira_changelogs.issue_id
+ _tool_jira_board_issues.connection_id = _tool_jira_issue_changelogs.connection_id
+ AND _tool_jira_board_issues.issue_id = _tool_jira_issue_changelogs.issue_id
)`),
- dal.Where("_tool_jira_changelog_items.connection_id = ? AND _tool_jira_board_issues.board_id = ?", connectionId, boardId),
+ dal.Where("_tool_jira_issue_changelog_items.connection_id = ? AND _tool_jira_board_issues.board_id = ?", connectionId, boardId),
}
cursor, err := db.Cursor(clauses...)
if err != nil {
@@ -77,8 +78,8 @@ func ConvertChangelogs(taskCtx core.SubTaskContext) error {
defer cursor.Close()
issueIdGenerator := didgen.NewDomainIdGenerator(&models.JiraIssue{})
sprintIdGenerator := didgen.NewDomainIdGenerator(&models.JiraSprint{})
- changelogIdGenerator := didgen.NewDomainIdGenerator(&models.JiraChangelogItem{})
- userIdGen := didgen.NewDomainIdGenerator(&models.JiraUser{})
+ changelogIdGenerator := didgen.NewDomainIdGenerator(&models.JiraIssueChangelogItems{})
+ accountIdGen := didgen.NewDomainIdGenerator(&models.JiraAccount{})
converter, err := helper.NewDataConverter(helper.DataConverterArgs{
RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
Ctx: taskCtx,
@@ -88,10 +89,10 @@ func ConvertChangelogs(taskCtx core.SubTaskContext) error {
},
Table: RAW_CHANGELOG_TABLE,
},
- InputRowType: reflect.TypeOf(ChangelogItemResult{}),
+ InputRowType: reflect.TypeOf(IssueChangelogItemResult{}),
Input: cursor,
Convert: func(inputRow interface{}) ([]interface{}, error) {
- row := inputRow.(*ChangelogItemResult)
+ row := inputRow.(*IssueChangelogItemResult)
changelog := &ticket.Changelog{
DomainEntity: domainlayer.DomainEntity{Id: changelogIdGenerator.Generate(
row.ConnectionId,
@@ -99,7 +100,7 @@ func ConvertChangelogs(taskCtx core.SubTaskContext) error {
row.Field,
)},
IssueId: issueIdGenerator.Generate(row.ConnectionId, row.IssueId),
- AuthorId: userIdGen.Generate(connectionId, row.AuthorAccountId),
+ AuthorId: accountIdGen.Generate(connectionId, row.AuthorAccountId),
AuthorName: row.AuthorDisplayName,
FieldId: row.FieldId,
FieldName: row.Field,
@@ -109,10 +110,10 @@ func ConvertChangelogs(taskCtx core.SubTaskContext) error {
}
if row.Field == "assignee" {
if row.ToValue != "" {
- changelog.OriginalToValue = userIdGen.Generate(connectionId, row.ToValue)
+ changelog.OriginalToValue = accountIdGen.Generate(connectionId, row.ToValue)
}
if row.FromValue != "" {
- changelog.OriginalFromValue = userIdGen.Generate(connectionId, row.FromValue)
+ changelog.OriginalFromValue = accountIdGen.Generate(connectionId, row.FromValue)
}
}
if row.Field == "Sprint" {
diff --git a/plugins/jira/tasks/changelog_extractor.go b/plugins/jira/tasks/issue_changelog_extractor.go
similarity index 89%
rename from plugins/jira/tasks/changelog_extractor.go
rename to plugins/jira/tasks/issue_changelog_extractor.go
index cadd2815..92ce64f9 100644
--- a/plugins/jira/tasks/changelog_extractor.go
+++ b/plugins/jira/tasks/issue_changelog_extractor.go
@@ -26,17 +26,17 @@ import (
"github.com/apache/incubator-devlake/plugins/jira/tasks/apiv2models"
)
-var _ core.SubTaskEntryPoint = ExtractChangelogs
+var _ core.SubTaskEntryPoint = ExtractIssueChangelogs
-var ExtractChangelogsMeta = core.SubTaskMeta{
- Name: "extractChangelogs",
- EntryPoint: ExtractChangelogs,
+var ExtractIssueChangelogsMeta = core.SubTaskMeta{
+ Name: "extractIssueChangelogs",
+ EntryPoint: ExtractIssueChangelogs,
EnabledByDefault: true,
- Description: "extract Jira change logs",
+ Description: "extract Jira Issue change logs",
DomainTypes: []string{core.DOMAIN_TYPE_TICKET},
}
-func ExtractChangelogs(taskCtx core.SubTaskContext) error {
+func ExtractIssueChangelogs(taskCtx core.SubTaskContext) error {
data := taskCtx.GetData().(*JiraTaskData)
if data.JiraServerInfo.DeploymentType == models.DeploymentServer {
return nil
diff --git a/plugins/jira/tasks/issue_convertor.go b/plugins/jira/tasks/issue_convertor.go
index d1be94d8..9eb9985f 100644
--- a/plugins/jira/tasks/issue_convertor.go
+++ b/plugins/jira/tasks/issue_convertor.go
@@ -18,11 +18,12 @@ limitations under the License.
package tasks
import (
- "github.com/apache/incubator-devlake/plugins/core/dal"
"net/url"
"path/filepath"
"reflect"
+ "github.com/apache/incubator-devlake/plugins/core/dal"
+
"github.com/apache/incubator-devlake/models/domainlayer"
"github.com/apache/incubator-devlake/models/domainlayer/didgen"
"github.com/apache/incubator-devlake/models/domainlayer/ticket"
@@ -64,7 +65,7 @@ func ConvertIssues(taskCtx core.SubTaskContext) error {
defer cursor.Close()
issueIdGen := didgen.NewDomainIdGenerator(&jiraModels.JiraIssue{})
- userIdGen := didgen.NewDomainIdGenerator(&jiraModels.JiraUser{})
+ accountIdGen := didgen.NewDomainIdGenerator(&jiraModels.JiraAccount{})
boardIdGen := didgen.NewDomainIdGenerator(&jiraModels.JiraBoard{})
boardId := boardIdGen.Generate(data.Options.ConnectionId, data.Options.BoardId)
@@ -103,13 +104,13 @@ func ConvertIssues(taskCtx core.SubTaskContext) error {
TimeSpentMinutes: jiraIssue.SpentMinutes,
}
if jiraIssue.CreatorAccountId != "" {
- issue.CreatorId = userIdGen.Generate(data.Options.ConnectionId, jiraIssue.CreatorAccountId)
+ issue.CreatorId = accountIdGen.Generate(data.Options.ConnectionId, jiraIssue.CreatorAccountId)
}
if jiraIssue.CreatorDisplayName != "" {
issue.CreatorName = jiraIssue.CreatorDisplayName
}
if jiraIssue.AssigneeAccountId != "" {
- issue.AssigneeId = userIdGen.Generate(data.Options.ConnectionId, jiraIssue.AssigneeAccountId)
+ issue.AssigneeId = accountIdGen.Generate(data.Options.ConnectionId, jiraIssue.AssigneeAccountId)
}
if jiraIssue.AssigneeDisplayName != "" {
issue.AssigneeName = jiraIssue.AssigneeDisplayName
diff --git a/plugins/jira/tasks/worklog_convertor.go b/plugins/jira/tasks/worklog_convertor.go
index ded11faa..628e99b4 100644
--- a/plugins/jira/tasks/worklog_convertor.go
+++ b/plugins/jira/tasks/worklog_convertor.go
@@ -18,9 +18,10 @@ limitations under the License.
package tasks
import (
- "github.com/apache/incubator-devlake/plugins/core/dal"
"reflect"
+ "github.com/apache/incubator-devlake/plugins/core/dal"
+
"github.com/apache/incubator-devlake/models/domainlayer"
"github.com/apache/incubator-devlake/models/domainlayer/didgen"
"github.com/apache/incubator-devlake/models/domainlayer/ticket"
@@ -59,7 +60,7 @@ func ConvertWorklogs(taskCtx core.SubTaskContext) error {
defer cursor.Close()
worklogIdGen := didgen.NewDomainIdGenerator(&models.JiraWorklog{})
- userIdGen := didgen.NewDomainIdGenerator(&models.JiraUser{})
+ accountIdGen := didgen.NewDomainIdGenerator(&models.JiraAccount{})
issueIdGen := didgen.NewDomainIdGenerator(&models.JiraIssue{})
converter, err := helper.NewDataConverter(helper.DataConverterArgs{
RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
@@ -82,7 +83,7 @@ func ConvertWorklogs(taskCtx core.SubTaskContext) error {
LoggedDate: &jiraWorklog.Updated,
}
if jiraWorklog.AuthorId != "" {
- worklog.AuthorId = userIdGen.Generate(connectionId, jiraWorklog.AuthorId)
+ worklog.AuthorId = accountIdGen.Generate(connectionId, jiraWorklog.AuthorId)
}
return []interface{}{worklog}, nil
},