func ExtractPrs()

in backend/plugins/github_graphql/tasks/pr_extractor.go [41:159]


func ExtractPrs(taskCtx plugin.SubTaskContext) errors.Error {
	data := taskCtx.GetData().(*githubTasks.GithubTaskData)
	config := data.Options.ScopeConfig
	var labelTypeRegex *regexp.Regexp
	var labelComponentRegex *regexp.Regexp
	var err errors.Error

	if config != nil && len(config.PrType) > 0 {
		labelTypeRegex, err = errors.Convert01(regexp.Compile(config.PrType))
		if err != nil {
			return errors.Default.Wrap(err, "regexp Compile prType failed")
		}
	}
	if config != nil && len(config.PrComponent) > 0 {
		labelComponentRegex, err = errors.Convert01(regexp.Compile(config.PrComponent))
		if err != nil {
			return errors.Default.Wrap(err, "regexp Compile prComponent failed")
		}
	}
	extractor, err := api.NewApiExtractor(api.ApiExtractorArgs{
		RawDataSubTaskArgs: api.RawDataSubTaskArgs{
			Ctx: taskCtx,
			Params: githubTasks.GithubApiParams{
				ConnectionId: data.Options.ConnectionId,
				Name:         data.Options.Name,
			},
			Table: RAW_PRS_TABLE,
		},
		Extract: func(row *api.RawData) ([]interface{}, errors.Error) {
			rawL := &GraphqlQueryPr{}
			err := errors.Convert(json.Unmarshal(row.Data, rawL))
			if err != nil {
				return nil, err
			}

			results := make([]interface{}, 0, 1)
			githubPr, err := convertGithubPullRequest(rawL, data.Options.ConnectionId, data.Options.GithubId)
			if err != nil {
				return nil, err
			}
			extractGraphqlPreAccount(&results, rawL.Author, data.Options.GithubId, data.Options.ConnectionId)
			for _, label := range rawL.Labels.Nodes {
				results = append(results, &models.GithubPrLabel{
					ConnectionId: data.Options.ConnectionId,
					PullId:       githubPr.GithubId,
					LabelName:    label.Name,
				})
				// if pr.Type has not been set and prType is set in .env, process the below
				if labelTypeRegex != nil && labelTypeRegex.MatchString(label.Name) {
					githubPr.Type = label.Name
				}
				// if pr.Component has not been set and prComponent is set in .env, process
				if labelComponentRegex != nil && labelComponentRegex.MatchString(label.Name) {
					githubPr.Component = label.Name

				}
			}
			results = append(results, githubPr)

			for _, apiPullRequestReview := range rawL.Reviews.Nodes {
				if apiPullRequestReview.State != "PENDING" {
					githubPrReview := &models.GithubPrReview{
						ConnectionId:   data.Options.ConnectionId,
						GithubId:       apiPullRequestReview.DatabaseId,
						Body:           apiPullRequestReview.Body,
						State:          apiPullRequestReview.State,
						CommitSha:      apiPullRequestReview.Commit.Oid,
						GithubSubmitAt: apiPullRequestReview.SubmittedAt,

						PullRequestId: githubPr.GithubId,
					}

					if apiPullRequestReview.Author != nil {
						githubPrReview.AuthorUserId = apiPullRequestReview.Author.Id
						githubPrReview.AuthorUsername = apiPullRequestReview.Author.Login
						extractGraphqlPreAccount(&results, apiPullRequestReview.Author, data.Options.GithubId, data.Options.ConnectionId)
					}

					results = append(results, githubPrReview)
				}
			}
			for _, apiReviewRequests := range rawL.ReviewRequests.Nodes {
				githubReviewRequests := &models.GithubReviewer{
					ConnectionId:  data.Options.ConnectionId,
					PullRequestId: githubPr.GithubId,
					ReviewerId:    apiReviewRequests.RequestedReviewer.User.Id,
					Username:      apiReviewRequests.RequestedReviewer.User.Login,
				}
				results = append(results, githubReviewRequests)
			}

			for _, apiPullRequestCommit := range rawL.Commits.Nodes {
				githubCommit, err := convertPullRequestCommit(apiPullRequestCommit)
				if err != nil {
					return nil, err
				}
				results = append(results, githubCommit)

				githubPullRequestCommit := &models.GithubPrCommit{
					ConnectionId:       data.Options.ConnectionId,
					CommitSha:          apiPullRequestCommit.Commit.Oid,
					PullRequestId:      githubPr.GithubId,
					CommitAuthorName:   githubCommit.AuthorName,
					CommitAuthorEmail:  githubCommit.AuthorEmail,
					CommitAuthoredDate: githubCommit.AuthoredDate,
				}
				results = append(results, githubPullRequestCommit)
				extractGraphqlPreAccount(&results, apiPullRequestCommit.Commit.Author.User, data.Options.GithubId, data.Options.ConnectionId)
			}
			return results, nil
		},
	})

	if err != nil {
		return err
	}

	return extractor.Execute()
}