@@ -66,6 +66,8 @@ def handle(self):
66
66
self .update_status (TaskStatus .IN_PROGRESS )
67
67
if self .node_type == GitIssueTaskNodeType .REPO :
68
68
return self .handle_repo_node ()
69
+ elif self .node_type == GitIssueTaskNodeType .ISSUE_PAGE :
70
+ return self .handle_issue_page_node ()
69
71
elif self .node_type == GitIssueTaskNodeType .ISSUE :
70
72
return self .handle_issue_node ()
71
73
else :
@@ -84,6 +86,7 @@ def handle_repo_node(self):
84
86
85
87
slice_page_index = latest_page [0 ]["page_index" ] if len (latest_page ) > 0 else 0
86
88
89
+ # The latest page might have a new issue.
87
90
if len (latest_page ) > 0 :
88
91
create_rag_git_issue_task (latest_page [0 ]).send ()
89
92
@@ -109,10 +112,45 @@ def handle_repo_node(self):
109
112
issue_task = create_rag_git_issue_task (record )
110
113
issue_task .send ()
111
114
112
- return (self .get_table ().update (
113
- {"status" : TaskStatus .COMPLETED .value })
114
- .eq ("id" , self .id )
115
- .execute ())
115
+ return self .update_status (TaskStatus .COMPLETED )
116
+
117
+ def handle_issue_page_node (self ):
118
+ repo = g .get_repo (self .repo_name )
119
+ issues = repo .get_issues (state = 'all' ).get_page (self .page_index )
120
+
121
+ task_list = list (
122
+ map (
123
+ lambda item : {
124
+ "repo_name" : self .repo_name ,
125
+ "issue_id" : item .number ,
126
+ "status" : TaskStatus .NOT_STARTED .value ,
127
+ "node_type" : GitIssueTaskNodeType .ISSUE .value ,
128
+ "from_task_id" : self .id ,
129
+ "bot_id" : self .bot_id ,
130
+ },
131
+ issues ,
132
+ ),
133
+ )
134
+ if len (task_list ) > 0 :
135
+ existing_issues = (self .get_table ()
136
+ .select ('*' )
137
+ .in_ ('issue_id' , [item ['issue_id' ] for item in task_list ])
138
+ .eq ('repo_name' , self .repo_name )
139
+ .eq ('node_type' , GitIssueTaskNodeType .ISSUE .value )
140
+ .execute ()
141
+ )
142
+
143
+ existing_issue_ids = {int (issue ['issue_id' ]) for issue in existing_issues .data }
144
+
145
+ new_task_list = [item for item in task_list if item ['issue_id' ] not in existing_issue_ids ]
146
+ if len (new_task_list ) > 0 :
147
+ result = self .get_table ().insert (new_task_list ).execute ()
148
+ for record in result .data :
149
+ issue_task = create_rag_git_issue_task (record )
150
+ issue_task .send ()
151
+
152
+ return self .update_status (TaskStatus .COMPLETED )
153
+
116
154
117
155
def handle_issue_node (self ):
118
156
issue_retrieval .add_knowledge_by_issue (
0 commit comments