Skip to content

Commit 65e0e5a

Browse files
committed
feat(analysis): AnalysisRequest DTO에 Validation 추가
1 parent b123464 commit 65e0e5a

File tree

2 files changed

+31
-14
lines changed

2 files changed

+31
-14
lines changed

backend/src/main/java/com/backend/domain/analysis/controller/AnalysisController.java

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,27 +39,33 @@ public ResponseEntity<ApiResponse<Void>> analyzeRepository(@RequestBody Analysis
3939
}
4040

4141
// GET: 사용자 히스토리 전체 목록 조회
42-
@GetMapping("/user/repository/{memberId}")
42+
@GetMapping("/{memberId}")
4343
@Transactional(readOnly = true)
4444
public ResponseEntity<List<HistoryResponseDto>> getMemberHistory(@PathVariable Long memberId){
45+
if (memberId == null) {
46+
throw new BusinessException(ErrorCode.INVALID_INPUT_VALUE);
47+
}
48+
4549
List<Repositories> repositories = repositoryService.findRepositoryByMember(memberId);
4650
List<HistoryResponseDto> historyList = new ArrayList<>();
4751

4852
for (Repositories repo : repositories) {
4953
Optional<AnalysisResult> optionalAnalysis = analysisService.findByRepositoryId(repo.getId());
5054

51-
if (optionalAnalysis.isPresent()) { // 존재하는지 확인
52-
AnalysisResult analysisResult = optionalAnalysis.get();
53-
Score score = analysisResult.getScore();
55+
if (optionalAnalysis.isEmpty()) {
56+
continue;
57+
}
5458

55-
List<String> languages = repositoryService.findLanguagesByRepisotryId(repo.getId())
56-
.stream()
57-
.map(Enum::name) // RepositoryLanguage -> Language enum
58-
.toList();
59+
AnalysisResult analysisResult = optionalAnalysis.get();
60+
Score score = analysisResult.getScore();
5961

60-
HistoryResponseDto dto = new HistoryResponseDto(repo, analysisResult, score, languages);
61-
historyList.add(dto);
62-
}
62+
List<String> languages = repositoryService.findLanguagesByRepisotryId(repo.getId())
63+
.stream()
64+
.map(Enum::name) // RepositoryLanguage -> Language enum
65+
.toList();
66+
67+
HistoryResponseDto dto = new HistoryResponseDto(repo, analysisResult, score, languages);
68+
historyList.add(dto);
6369
}
6470

6571
// 최신순 정렬
@@ -69,9 +75,12 @@ public ResponseEntity<List<HistoryResponseDto>> getMemberHistory(@PathVariable L
6975
}
7076

7177
// GET: 사용자 분석 결과 조회
72-
@GetMapping("repository/{repositoriesId}")
78+
@GetMapping("/{memberId}/{repositoriesId}")
7379
@Transactional(readOnly = true)
74-
public ResponseEntity<List<AnalysisResultResponseDto>> getAnalysisByRepositoriesId(@PathVariable("repositoriesId") Long repoId){
80+
public ResponseEntity<List<AnalysisResultResponseDto>> getAnalysisByRepositoriesId(
81+
@PathVariable("memberId") Long memberId,
82+
@PathVariable("repositoriesId") Long repoId
83+
){
7584
List<AnalysisResult> optionalResult = analysisService.getAnalysisResultList(repoId);
7685
List<AnalysisResultResponseDto> resultList = new ArrayList<>();
7786

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
11
package com.backend.domain.analysis.dto.request;
22

3-
public record AnalysisRequest(String githubUrl) {}
3+
import jakarta.validation.constraints.NotBlank;
4+
import jakarta.validation.constraints.Pattern;
5+
6+
public record AnalysisRequest(
7+
@NotBlank(message = "GitHub URL은 필수입니다")
8+
@Pattern(regexp = "^https://github\\.com/[a-zA-Z0-9._-]+/[a-zA-Z0-9._-]+/?$",
9+
message = "올바른 GitHub 저장소 URL 형식이 아닙니다")
10+
String githubUrl
11+
) {}

0 commit comments

Comments
 (0)