diff --git a/backend/plugins/issue_trace/models/migrationscripts/2024_05_30_new_issue_table.go b/backend/plugins/issue_trace/models/migrationscripts/2024_05_30_new_issue_table.go index b85497a1e699..6c20c7bc6325 100644 --- a/backend/plugins/issue_trace/models/migrationscripts/2024_05_30_new_issue_table.go +++ b/backend/plugins/issue_trace/models/migrationscripts/2024_05_30_new_issue_table.go @@ -43,14 +43,14 @@ func (*NewIssueTable) Name() string { type IssueStatusHistory20240530 struct { archived.NoPKModel - IssueId string `gorm:"primaryKey;type:varchar(255)"` - Status string `gorm:"type:varchar(100)"` - OriginalStatus string `gorm:"primaryKey;type:varchar(255)"` - StartDate time.Time `gorm:"primaryKey"` - EndDate *time.Time `gorm:"type:timestamp"` - IsCurrentStatus bool `gorm:"type:boolean"` - IsFirstStatus bool `gorm:"type:boolean"` - StatusTimeMinutes int32 `gorm:"type:integer"` + IssueId string `gorm:"primaryKey;type:varchar(255)"` + Status string `gorm:"type:varchar(100)"` + OriginalStatus string `gorm:"primaryKey;type:varchar(255)"` + StartDate time.Time `gorm:"primaryKey"` + EndDate *time.Time + IsCurrentStatus bool `gorm:"type:boolean"` + IsFirstStatus bool `gorm:"type:boolean"` + StatusTimeMinutes int32 `gorm:"type:integer"` } func (IssueStatusHistory20240530) TableName() string { diff --git a/backend/plugins/issue_trace/tasks/issue_assignee_history_convertor.go b/backend/plugins/issue_trace/tasks/issue_assignee_history_convertor.go index 365440ebbddd..761d55a3c337 100644 --- a/backend/plugins/issue_trace/tasks/issue_assignee_history_convertor.go +++ b/backend/plugins/issue_trace/tasks/issue_assignee_history_convertor.go @@ -40,6 +40,7 @@ type AssigneeHistory struct { // AssigneeChangelog is the changelog of issue assignee type AssigneeChangelog struct { + common.RawDataOrigin IssueId string FromAssignee string // split by comma ToAssignee string // split by comma @@ -71,7 +72,8 @@ func ConvertIssueAssigneeHistory(taskCtx plugin.SubTaskContext) errors.Error { cursorForIssuesWithoutChanglog, err := db.RawCursor(` select board_issues.board_id as _raw_data_params, - 'issue_changelogs' as _raw_data_table, + issues._raw_data_table as _raw_data_table, + issues._raw_data_id as _raw_data_id, issues.id as issue_id, issues.created_date as start_date, issues.assignee_id as user_id, @@ -105,6 +107,16 @@ func ConvertIssueAssigneeHistory(taskCtx plugin.SubTaskContext) errors.Error { } row := inputRow.(*AssigneeHistory) err := batchInsertor.Add(&models.IssueAssigneeHistory{ + NoPKModel: common.NoPKModel{ + RawDataOrigin: common.RawDataOrigin{ + RawDataParams: row.RawDataParams, + RawDataTable: row.RawDataTable, + RawDataId: row.RawDataId, + RawDataRemark: row.RawDataRemark, + }, + CreatedAt: time.Now(), + UpdatedAt: time.Now(), + }, IssueId: row.IssueId, Assignee: row.UserId, StartDate: row.StartDate, @@ -128,7 +140,10 @@ func ConvertIssueAssigneeHistory(taskCtx plugin.SubTaskContext) errors.Error { } // convert issues with changelogs of assignee clauses := []dal.Clause{ - dal.Select("issue_changelogs.issue_id, " + + dal.Select("board_issues.board_id as _raw_data_params, " + + "issue_changelogs._raw_data_table as _raw_data_table, " + + "issue_changelogs._raw_data_id as _raw_data_id, " + + "issue_changelogs.issue_id, " + "issue_changelogs.original_from_value as from_assignee, " + "issue_changelogs.original_to_value as to_assignee, " + "issue_changelogs.created_date as log_created_date, " + @@ -226,6 +241,16 @@ func buildActiveAssigneeHistory(logs []AssigneeChangelog, boardId string) []*mod if assigneeHistory, ok := result[addAssignee]; !ok { result[addAssignee] = []*models.IssueAssigneeHistory{ { + NoPKModel: common.NoPKModel{ + CreatedAt: now, + UpdatedAt: now, + RawDataOrigin: common.RawDataOrigin{ + RawDataParams: row.RawDataParams, + RawDataTable: row.RawDataTable, + RawDataId: row.RawDataId, + RawDataRemark: row.RawDataRemark, + }, + }, IssueId: row.IssueId, Assignee: addAssignee, StartDate: row.LogCreatedDate, @@ -236,6 +261,16 @@ func buildActiveAssigneeHistory(logs []AssigneeChangelog, boardId string) []*mod last := len(assigneeHistory) - 1 if assigneeHistory[last].EndDate != nil && assigneeHistory[last].EndDate.Before(row.LogCreatedDate) { result[addAssignee] = append(result[addAssignee], &models.IssueAssigneeHistory{ + NoPKModel: common.NoPKModel{ + CreatedAt: now, + UpdatedAt: now, + RawDataOrigin: common.RawDataOrigin{ + RawDataParams: row.RawDataParams, + RawDataTable: row.RawDataTable, + RawDataId: row.RawDataId, + RawDataRemark: row.RawDataRemark, + }, + }, IssueId: row.IssueId, Assignee: addAssignee, StartDate: row.LogCreatedDate, diff --git a/backend/plugins/issue_trace/tasks/issue_status_history_convertor.go b/backend/plugins/issue_trace/tasks/issue_status_history_convertor.go index 625e8413cd87..ddc68f511ea9 100644 --- a/backend/plugins/issue_trace/tasks/issue_status_history_convertor.go +++ b/backend/plugins/issue_trace/tasks/issue_status_history_convertor.go @@ -31,6 +31,7 @@ import ( ) type IssueStatusWithoutChangeLog struct { + common.RawDataOrigin IssueId string Status string OriginalStatus string @@ -75,7 +76,8 @@ func ConvertIssueStatusHistory(taskCtx plugin.SubTaskContext) errors.Error { logger.Info("get issues not appeared in change logs, board %s", boardId) now := time.Now() clauses := []dal.Clause{ - dal.Select("issues.id AS issue_id, issues.status, issues.original_status, issues.created_date"), + dal.Select("issues.id AS issue_id, issues.status, issues.original_status, issues.created_date," + + "board_issues.board_id as _raw_data_params, issues._raw_data_table as _raw_data_table, issues._raw_data_id as _raw_data_id"), dal.From("issues"), dal.Join("INNER JOIN board_issues ON board_issues.issue_id = issues.id"), dal.Join("LEFT JOIN issue_changelogs ON issue_changelogs.issue_id=issues.id AND issue_changelogs.field_name='status'"), @@ -107,8 +109,9 @@ func ConvertIssueStatusHistory(taskCtx plugin.SubTaskContext) errors.Error { err = batchInserter.Add(&models.IssueStatusHistory{ NoPKModel: common.NoPKModel{ RawDataOrigin: common.RawDataOrigin{ - RawDataTable: rawTableIssueChangelogs, - RawDataParams: boardId, + RawDataTable: issue.RawDataTable, + RawDataParams: issue.RawDataParams, + RawDataId: issue.RawDataId, }, }, IssueId: issue.IssueId, @@ -137,7 +140,8 @@ func ConvertIssueStatusHistory(taskCtx plugin.SubTaskContext) errors.Error { clauses = []dal.Clause{ dal.Select("issue_changelogs.issue_id, issue_changelogs.created_date AS log_created_date, " + "issue_changelogs.to_value, issue_changelogs.original_to_value, issue_changelogs.from_value, " + - "issue_changelogs.original_from_value, issues.created_date AS issue_created_date"), + "issue_changelogs.original_from_value, issues.created_date AS issue_created_date," + + "board_issues.board_id as _raw_data_params, issue_changelogs._raw_data_table as _raw_data_table, issue_changelogs._raw_data_id as _raw_data_id"), dal.From("issue_changelogs"), dal.Join("INNER JOIN issues ON issues.id = issue_changelogs.issue_id"), dal.Join("INNER JOIN board_issues ON board_issues.issue_id = issue_changelogs.issue_id"), @@ -231,8 +235,9 @@ func buildStatusHistoryRecords(logs []*StatusChangeLogResult, boardId string) [] { NoPKModel: common.NoPKModel{ RawDataOrigin: common.RawDataOrigin{ - RawDataTable: rawTableIssueChangelogs, - RawDataParams: boardId, + RawDataTable: firstChangelog.RawDataTable, + RawDataParams: firstChangelog.RawDataParams, + RawDataId: firstChangelog.RawDataId, }, }, IssueId: firstChangelog.IssueId, @@ -252,8 +257,9 @@ func buildStatusHistoryRecords(logs []*StatusChangeLogResult, boardId string) [] result = append(result, &models.IssueStatusHistory{ NoPKModel: common.NoPKModel{ RawDataOrigin: common.RawDataOrigin{ - RawDataTable: rawTableIssueChangelogs, - RawDataParams: boardId, + RawDataTable: row.RawDataTable, + RawDataParams: row.RawDataParams, + RawDataId: row.RawDataId, }, }, IssueId: row.IssueId,