aboutsummaryrefslogblamecommitdiffstats
path: root/bridge/github/import.go
blob: 0e6b03d29790138dcc0c06835bff342d9a75bdb7 (plain) (tree)



























































































































                                                                                                                         
package github

import (
	"context"
	"fmt"

	"github.com/MichaelMure/git-bug/bridge/core"
	"github.com/MichaelMure/git-bug/cache"
	"github.com/shurcooL/githubv4"
)

type githubImporter struct{}

func (*githubImporter) ImportAll(repo *cache.RepoCache, conf core.Configuration) error {
	client := buildClient(conf)

	type Event struct {
		CreatedAt githubv4.DateTime
		Actor     struct {
			Login     githubv4.String
			AvatarUrl githubv4.String
		}
	}

	var q struct {
		Repository struct {
			Issues struct {
				Nodes []struct {
					Title    string
					Timeline struct {
						Nodes []struct {
							Typename githubv4.String `graphql:"__typename"`

							// Issue
							IssueComment struct {
								Author struct {
									Login     githubv4.String
									AvatarUrl githubv4.String
								}
								BodyText  githubv4.String
								CreatedAt githubv4.DateTime

								// TODO: edition
							} `graphql:"... on IssueComment"`

							// Label
							LabeledEvent struct {
								Event
								Label struct {
									Color githubv4.String
									Name  githubv4.String
								}
							} `graphql:"... on LabeledEvent"`
							UnlabeledEvent struct {
								Event
								Label struct {
									Color githubv4.String
									Name  githubv4.String
								}
							} `graphql:"... on UnlabeledEvent"`

							// Status
							ClosedEvent struct {
								Event
							} `graphql:"... on  ClosedEvent"`
							ReopenedEvent struct {
								Event
							} `graphql:"... on  ReopenedEvent"`

							// Title
							RenamedTitleEvent struct {
								Event
								CurrentTitle  githubv4.String
								PreviousTitle githubv4.String
							} `graphql:"... on RenamedTitleEvent"`
						}
						PageInfo struct {
							EndCursor   githubv4.String
							HasNextPage bool
						}
					} `graphql:"timeline(first: $timelineFirst, after: $timelineAfter)"`
				}
				PageInfo struct {
					EndCursor   githubv4.String
					HasNextPage bool
				}
			} `graphql:"issues(first: $issueFirst, after: $issueAfter)"`
		} `graphql:"repository(owner: $owner, name: $name)"`
	}

	variables := map[string]interface{}{
		"owner":         githubv4.String(conf[keyUser]),
		"name":          githubv4.String(conf[keyProject]),
		"issueFirst":    githubv4.Int(1),
		"issueAfter":    (*githubv4.String)(nil),
		"timelineFirst": githubv4.Int(10),
		"timelineAfter": (*githubv4.String)(nil),
	}

	for {
		err := client.Query(context.TODO(), &q, variables)
		if err != nil {
			return err
		}

		for _, event := range q.Repository.Issues.Nodes[0].Timeline.Nodes {
			fmt.Println(event)
		}

		if !q.Repository.Issues.Nodes[0].Timeline.PageInfo.HasNextPage {
			break
		}
		variables["timelineAfter"] = githubv4.NewString(q.Repository.Issues.Nodes[0].Timeline.PageInfo.EndCursor)
	}

	return nil
}

func (*githubImporter) Import(repo *cache.RepoCache, conf core.Configuration, id string) error {
	fmt.Println(conf)
	fmt.Println("IMPORT")

	return nil
}