@@ -18,8 +18,6 @@ limitations under the License.
1818package tasks
1919
2020import (
21- "encoding/json"
22-
2321 "github.com/apache/incubator-devlake/core/dal"
2422 "github.com/apache/incubator-devlake/core/errors"
2523 "github.com/apache/incubator-devlake/core/log"
@@ -39,12 +37,12 @@ var ExtractEpicsMeta = plugin.SubTaskMeta{
3937 DomainTypes : []string {plugin .DOMAIN_TYPE_TICKET , plugin .DOMAIN_TYPE_CROSS },
4038}
4139
42- func ExtractEpics (taskCtx plugin.SubTaskContext ) errors.Error {
43- data := taskCtx .GetData ().(* JiraTaskData )
44- db := taskCtx .GetDal ()
40+ func ExtractEpics (subtaskCtx plugin.SubTaskContext ) errors.Error {
41+ data := subtaskCtx .GetData ().(* JiraTaskData )
42+ db := subtaskCtx .GetDal ()
4543 connectionId := data .Options .ConnectionId
4644 boardId := data .Options .BoardId
47- logger := taskCtx .GetLogger ()
45+ logger := subtaskCtx .GetLogger ()
4846 logger .Info ("extract external epic Issues, connection_id=%d, board_id=%d" , connectionId , boardId )
4947 mappings , err := getTypeMappings (data , db )
5048 if err != nil {
@@ -54,21 +52,40 @@ func ExtractEpics(taskCtx plugin.SubTaskContext) errors.Error {
5452 if err != nil {
5553 return err
5654 }
57- extractor , err := api .NewApiExtractor (api.ApiExtractorArgs {
58- RawDataSubTaskArgs : api.RawDataSubTaskArgs {
59- Ctx : taskCtx ,
55+
56+ extractor , err := api .NewStatefulApiExtractor (& api.StatefulApiExtractorArgs [apiv2models.Issue ]{
57+ SubtaskCommonArgs : & api.SubtaskCommonArgs {
58+ SubTaskContext : subtaskCtx ,
59+ Table : RAW_EPIC_TABLE ,
6060 Params : JiraApiParams {
6161 ConnectionId : data .Options .ConnectionId ,
6262 BoardId : data .Options .BoardId ,
6363 },
64- Table : RAW_EPIC_TABLE ,
64+ SubtaskConfig : map [string ]any {
65+ "typeMappings" : mappings ,
66+ "storyPointField" : data .Options .ScopeConfig .StoryPointField ,
67+ },
6568 },
66- Extract : func (row * api.RawData ) ([]interface {}, errors.Error ) {
67- apiIssue := & apiv2models.Issue {}
68- err = errors .Convert (json .Unmarshal (row .Data , apiIssue ))
69- if err != nil {
70- return nil , err
69+ BeforeExtract : func (apiIssue * apiv2models.Issue , stateManager * api.SubtaskStateManager ) errors.Error {
70+ if stateManager .IsIncremental () {
71+ err := db .Delete (
72+ & models.JiraIssueLabel {},
73+ dal .Where ("connection_id = ? AND issue_id = ?" , data .Options .ConnectionId , apiIssue .ID ),
74+ )
75+ if err != nil {
76+ return err
77+ }
78+ err = db .Delete (
79+ & models.JiraIssueRelationship {},
80+ dal .Where ("connection_id = ? AND issue_id = ?" , data .Options .ConnectionId , apiIssue .ID ),
81+ )
82+ if err != nil {
83+ return err
84+ }
7185 }
86+ return nil
87+ },
88+ Extract : func (apiIssue * apiv2models.Issue , row * api.RawData ) ([]interface {}, errors.Error ) {
7289 return extractIssues (data , mappings , apiIssue , row , userFieldMap )
7390 },
7491 })
0 commit comments