Skip to content

Commit a6f69c4

Browse files
committed
fix(repository): README 없어도 분석 가능하게 수정
1 parent abbbf2a commit a6f69c4

File tree

2 files changed

+61
-22
lines changed

2 files changed

+61
-22
lines changed

backend/src/main/java/com/backend/domain/repository/service/RepositoryService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,12 @@ public RepositoryData fetchCompleteRepositoryData(String owner, String repo, Lon
8484

8585
// 3. README 데이터 수집 및 매핑
8686
sseProgressNotifier.notify(userId, "status", "문서화 품질 분석");
87-
String readme = gitHubDataFetcher.fetchReadmeContent(owner, repo);
87+
String readme = gitHubDataFetcher.fetchReadmeContent(owner, repo).orElse("");
8888
readmeInfoMapper.mapReadmeInfo(data, readme);
8989

9090
// 4. 보안 관리 데이터 수집 및 매핑
9191
sseProgressNotifier.notify(userId, "status", "보안 구성 분석");
92-
TreeResponse tree = gitHubDataFetcher.fetchRepositoryTreeInfo(owner, repo, repoInfo.defaultBranch());
92+
TreeResponse tree = gitHubDataFetcher.fetchRepositoryTreeInfo(owner, repo, repoInfo.defaultBranch()).orElse(null);
9393
securityInfoMapper.mapSecurityInfo(data, tree);
9494

9595
// 5. 테스트 데이터 수집 및 매핑

backend/src/main/java/com/backend/domain/repository/service/fetcher/GitHubDataFetcher.java

Lines changed: 59 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@
1515

1616
import java.time.LocalDateTime;
1717
import java.time.format.DateTimeFormatter;
18+
import java.util.Collections;
1819
import java.util.List;
1920
import java.util.Map;
21+
import java.util.Optional;
2022
import 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

Comments
 (0)