1515
1616import java .time .LocalDateTime ;
1717import java .time .format .DateTimeFormatter ;
18+ import java .util .Collections ;
1819import java .util .List ;
1920import java .util .Map ;
21+ import java .util .Optional ;
2022import java .util .stream .Collectors ;
2123
2224@ Slf4j
@@ -48,8 +50,16 @@ public RepoResponse fetchRepositoryInfo(String owner, String repoName) {
4850 maxAttempts = 2 ,
4951 backoff = @ Backoff (delay = 1000 )
5052 )
51- public String fetchReadmeContent (String owner , String repoName ) {
52- return gitHubApiClient .getRaw ("/repos/{owner}/{repo}/readme" , owner , repoName );
53+ public Optional <String > fetchReadmeContent (String owner , String repoName ) {
54+ try {
55+ String content = gitHubApiClient .getRaw ("/repos/{owner}/{repo}/readme" , owner , repoName );
56+ return Optional .ofNullable (content );
57+ } catch (BusinessException e ) {
58+ if (e .getErrorCode () == ErrorCode .GITHUB_REPO_NOT_FOUND ) {
59+ return Optional .empty ();
60+ }
61+ throw e ;
62+ }
5363 }
5464
5565 @ Retryable (
@@ -76,10 +86,19 @@ public List<CommitResponse> fetchCommitInfo(String owner, String repoName, Strin
7686 maxAttempts = 2 ,
7787 backoff = @ Backoff (delay = 1000 )
7888 )
79- public TreeResponse fetchRepositoryTreeInfo (String owner , String repoName , String defaultBranch ) {
80- return gitHubApiClient .get (
81- "/repos/{owner}/{repo}/git/trees/{sha}?recursive=1" , TreeResponse .class , owner , repoName , defaultBranch
82- );
89+ public Optional <TreeResponse > fetchRepositoryTreeInfo (String owner , String repoName , String defaultBranch ) {
90+ try {
91+ TreeResponse tree = gitHubApiClient .get (
92+ "/repos/{owner}/{repo}/git/trees/{sha}?recursive=1" ,
93+ TreeResponse .class , owner , repoName , defaultBranch
94+ );
95+ return Optional .ofNullable (tree );
96+ } catch (BusinessException e ) {
97+ if (e .getErrorCode () == ErrorCode .GITHUB_REPO_NOT_FOUND ) {
98+ return Optional .empty ();
99+ }
100+ throw e ;
101+ }
83102 }
84103
85104 @ Retryable (
@@ -92,14 +111,24 @@ public TreeResponse fetchRepositoryTreeInfo(String owner, String repoName, Strin
92111 backoff = @ Backoff (delay = 1000 )
93112 )
94113 public List <IssueResponse > fetchIssueInfo (String owner , String repoName ) {
95- List <IssueResponse > allIssues = gitHubApiClient .getList (
96- "/repos/{owner}/{repo}/issues?state=all&per_page=100" , IssueResponse .class , owner , repoName );
97-
98- LocalDateTime sixMonthsAgo = getSixMonthsAgo ();
99- return allIssues .stream ()
100- .filter (IssueResponse ::isPureIssue )
101- .filter (issue -> parseGitHubDate (issue .created_at ()).isAfter (sixMonthsAgo ))
102- .collect (Collectors .toList ());
114+ try {
115+ List <IssueResponse > allIssues = gitHubApiClient .getList (
116+ "/repos/{owner}/{repo}/issues?state=all&per_page=100" ,
117+ IssueResponse .class , owner , repoName
118+ );
119+
120+ LocalDateTime sixMonthsAgo = getSixMonthsAgo ();
121+ return allIssues .stream ()
122+ .filter (IssueResponse ::isPureIssue )
123+ .filter (issue -> parseGitHubDate (issue .created_at ()).isAfter (sixMonthsAgo ))
124+ .collect (Collectors .toList ());
125+
126+ } catch (BusinessException e ) {
127+ if (e .getErrorCode () == ErrorCode .GITHUB_REPO_NOT_FOUND ) {
128+ return Collections .emptyList ();
129+ }
130+ throw e ;
131+ }
103132 }
104133
105134 @ Retryable (
@@ -112,13 +141,23 @@ public List<IssueResponse> fetchIssueInfo(String owner, String repoName) {
112141 backoff = @ Backoff (delay = 1000 )
113142 )
114143 public List <PullRequestResponse > fetchPullRequestInfo (String owner , String repoName ) {
115- List <PullRequestResponse > allPullRequests = gitHubApiClient .getList (
116- "/repos/{owner}/{repo}/pulls?state=all&per_page=100" , PullRequestResponse .class , owner , repoName );
144+ try {
145+ List <PullRequestResponse > allPullRequests = gitHubApiClient .getList (
146+ "/repos/{owner}/{repo}/pulls?state=all&per_page=100" ,
147+ PullRequestResponse .class , owner , repoName
148+ );
149+
150+ LocalDateTime sixMonthsAgo = getSixMonthsAgo ();
151+ return allPullRequests .stream ()
152+ .filter (pr -> parseGitHubDate (pr .created_at ()).isAfter (sixMonthsAgo ))
153+ .collect (Collectors .toList ());
117154
118- LocalDateTime sixMonthsAgo = getSixMonthsAgo ();
119- return allPullRequests .stream ()
120- .filter (pr -> parseGitHubDate (pr .created_at ()).isAfter (sixMonthsAgo ))
121- .collect (Collectors .toList ());
155+ } catch (BusinessException e ) {
156+ if (e .getErrorCode () == ErrorCode .GITHUB_REPO_NOT_FOUND ) {
157+ return Collections .emptyList ();
158+ }
159+ throw e ;
160+ }
122161 }
123162
124163 @ Retryable (
0 commit comments