github.com/ungtb10d/cli/v2@v2.0.0-20221110210412-98537dd9d6a1/api/queries_org.go (about) 1 package api 2 3 import ( 4 "github.com/ungtb10d/cli/v2/internal/ghrepo" 5 "github.com/shurcooL/githubv4" 6 ) 7 8 // OrganizationProjects fetches all open projects for an organization 9 func OrganizationProjects(client *Client, repo ghrepo.Interface) ([]RepoProject, error) { 10 type responseData struct { 11 Organization struct { 12 Projects struct { 13 Nodes []RepoProject 14 PageInfo struct { 15 HasNextPage bool 16 EndCursor string 17 } 18 } `graphql:"projects(states: [OPEN], first: 100, orderBy: {field: NAME, direction: ASC}, after: $endCursor)"` 19 } `graphql:"organization(login: $owner)"` 20 } 21 22 variables := map[string]interface{}{ 23 "owner": githubv4.String(repo.RepoOwner()), 24 "endCursor": (*githubv4.String)(nil), 25 } 26 27 var projects []RepoProject 28 for { 29 var query responseData 30 err := client.Query(repo.RepoHost(), "OrganizationProjectList", &query, variables) 31 if err != nil { 32 return nil, err 33 } 34 35 projects = append(projects, query.Organization.Projects.Nodes...) 36 if !query.Organization.Projects.PageInfo.HasNextPage { 37 break 38 } 39 variables["endCursor"] = githubv4.String(query.Organization.Projects.PageInfo.EndCursor) 40 } 41 42 return projects, nil 43 } 44 45 type OrgTeam struct { 46 ID string 47 Slug string 48 } 49 50 // OrganizationTeams fetches all the teams in an organization 51 func OrganizationTeams(client *Client, repo ghrepo.Interface) ([]OrgTeam, error) { 52 type responseData struct { 53 Organization struct { 54 Teams struct { 55 Nodes []OrgTeam 56 PageInfo struct { 57 HasNextPage bool 58 EndCursor string 59 } 60 } `graphql:"teams(first: 100, orderBy: {field: NAME, direction: ASC}, after: $endCursor)"` 61 } `graphql:"organization(login: $owner)"` 62 } 63 64 variables := map[string]interface{}{ 65 "owner": githubv4.String(repo.RepoOwner()), 66 "endCursor": (*githubv4.String)(nil), 67 } 68 69 var teams []OrgTeam 70 for { 71 var query responseData 72 err := client.Query(repo.RepoHost(), "OrganizationTeamList", &query, variables) 73 if err != nil { 74 return nil, err 75 } 76 77 teams = append(teams, query.Organization.Teams.Nodes...) 78 if !query.Organization.Teams.PageInfo.HasNextPage { 79 break 80 } 81 variables["endCursor"] = githubv4.String(query.Organization.Teams.PageInfo.EndCursor) 82 } 83 84 return teams, nil 85 }