1
1
defmodule CodeCorps.GitHub.API.Repository do
2
2
@ moduledoc ~S"""
3
- Functions for working with issues on GitHub.
3
+ Functions for retrieving a GitHub repository's issues, pull requests, and
4
+ comments from the GitHub API.
4
5
"""
5
6
6
7
alias CodeCorps . {
@@ -10,22 +11,65 @@ defmodule CodeCorps.GitHub.API.Repository do
10
11
GithubRepo ,
11
12
}
12
13
14
+ @ doc ~S"""
15
+ Retrieves issues for a repository
16
+
17
+ All pages of records are retrieved.
18
+ Closed issues are included.
19
+ """
13
20
@ spec issues ( GithubRepo . t ) :: { :ok , list ( map ) } | { :error , GitHub . api_error_struct }
14
- def issues ( % GithubRepo { github_app_installation: % GithubAppInstallation { } = installation } = github_repo ) do
15
- with { :ok , access_token } <- API.Installation . get_access_token ( installation ) ,
16
- issues <- fetch_issues ( github_repo , access_token )
17
- do
18
- { :ok , issues }
21
+ def issues ( % GithubRepo {
22
+ github_app_installation: % GithubAppInstallation {
23
+ github_account_login: owner
24
+ } = installation ,
25
+ name: repo
26
+ } ) do
27
+ with { :ok , access_token } <- API.Installation . get_access_token ( installation ) do
28
+ "repos/#{ owner } /#{ repo } /issues"
29
+ |> GitHub . get_all ( % { } , [ access_token: access_token , params: [ per_page: 100 , state: "all" ] ] )
30
+ |> ( & { :ok , & 1 } ) . ( )
19
31
else
20
32
{ :error , error } -> { :error , error }
21
33
end
22
34
end
23
35
24
- defp fetch_issues ( % GithubRepo { github_app_installation: % GithubAppInstallation { github_account_login: owner } , name: repo } , access_token ) do
25
- per_page = 100
26
- path = "repos/#{ owner } /#{ repo } /issues"
27
- params = [ per_page: per_page , state: "all" ]
28
- opts = [ access_token: access_token , params: params ]
29
- GitHub . get_all ( path , % { } , opts )
36
+ @ doc ~S"""
37
+ Retrieves pull requests for a repository.
38
+
39
+ All pages of records are retrieved.
40
+ """
41
+ @ spec pulls ( GithubRepo . t ) :: { :ok , list ( map ) } | { :error , GitHub . api_error_struct }
42
+ def pulls ( % GithubRepo {
43
+ github_app_installation: % GithubAppInstallation {
44
+ github_account_login: owner
45
+ } = installation ,
46
+ name: repo
47
+ } ) do
48
+ with { :ok , access_token } <- API.Installation . get_access_token ( installation ) do
49
+ "repos/#{ owner } /#{ repo } /pulls"
50
+ |> GitHub . get_all ( % { } , [ access_token: access_token , params: [ per_page: 100 , state: "all" ] ] )
51
+ |> ( & { :ok , & 1 } ) . ( )
52
+ else
53
+ { :error , error } -> { :error , error }
54
+ end
55
+ end
56
+
57
+ @ doc ~S"""
58
+ Retrieves comments from all issues in a github repository.
59
+ """
60
+ @ spec issue_comments ( GithubRepo . t ) :: { :ok , list ( map ) } | { :error , GitHub . api_error_struct }
61
+ def issue_comments ( % GithubRepo {
62
+ github_app_installation: % GithubAppInstallation {
63
+ github_account_login: owner
64
+ } = installation ,
65
+ name: repo
66
+ } ) do
67
+ with { :ok , access_token } <- API.Installation . get_access_token ( installation ) do
68
+ "repos/#{ owner } /#{ repo } /issues/comments"
69
+ |> GitHub . get_all ( % { } , [ access_token: access_token , params: [ per_page: 100 ] ] )
70
+ |> ( & { :ok , & 1 } ) . ( )
71
+ else
72
+ { :error , error } -> { :error , error }
73
+ end
30
74
end
31
75
end
0 commit comments