dosubot[bot] commented on issue #7969:
URL: 
https://github.com/apache/incubator-devlake/issues/7969#issuecomment-2312882757

   <!-- Greeting -->
   Hello @peakwinter! I'm here to help you with any bugs, questions, or 
contribution requests you have. I'll assist you while you wait for a human 
maintainer.
   
   <!-- Answer -->
   To address the issue where the GitHub GraphQL collector fails on transferred 
issues, you can modify the collector to ignore these issues and delete them 
from the dataset. Here's how you can do it:
   
   1. **Modify the `ResponseParser` function in the `CollectIssues` function**:
      Add a check for the `StateReason` field in the `GraphqlQueryIssue` 
struct. If the `StateReason` is "transferred", skip adding the issue to the 
dataset.
   
      ```go
      ResponseParser: func(queryWrapper any) (messages []json.RawMessage, err 
errors.Error) {
          query := queryWrapper.(*GraphqlQueryIssueWrapper)
          issues := query.Repository.IssueList.Issues
          for _, rawL := range issues {
              if rawL.StateReason == "transferred" {
                  // Skip issues that have been transferred
                  continue
              }
              if since != nil && since.After(rawL.UpdatedAt) {
                  return messages, api.ErrFinishCollect
              }
              messages = append(messages, errors.Must1(json.Marshal(rawL)))
          }
          return
      },
      ```
   
   2. **Ensure the `StateReason` field is included in the GraphQL query**:
      The `GraphqlQueryIssue` struct already includes the `StateReason` field, 
so no changes are needed there.
   
      ```go
      type GraphqlQueryIssue struct {
          DatabaseId   int
          Number       int
          State        string
          StateReason  string
          Title        string
          Body         string
          Author       *GraphqlInlineAccountQuery
          Url          string
          ClosedAt     *time.Time
          CreatedAt    time.Time
          UpdatedAt    time.Time
          AssigneeList struct {
              Assignees []GraphqlInlineAccountQuery `graphql:"nodes"`
          } `graphql:"assignees(first: 100)"`
          Milestone *struct {
              Number int
          } `json:"milestone"`
          Labels struct {
              Nodes []struct {
                  Id   string
                  Name string
              }
          } `graphql:"labels(first: 100)"`
      }
      ```
   
   With these changes, the collector will ignore issues that have been 
transferred to another repository and will not include them in the dataset 
<sup>[[1]](https://github.com/apache/incubator-devlake/blob/main/backend/plugins/github_graphql/tasks/issue_collector.go)</sup>.
   
   
   <!-- Dosu Comment Footer -->
   *To continue talking to [Dosu](https://dosu.dev), mention @dosu.*
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@devlake.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to