Skip to content

Commit 3f88f73

Browse files
committed
feat: report 리스트 반환값 추가
1 parent 09330a1 commit 3f88f73

File tree

3 files changed

+59
-9
lines changed

3 files changed

+59
-9
lines changed

src/main/java/com/example/gitfitbe/dto/report/ReportListResponse.java

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.example.gitfitbe.entity.Report;
44
import com.example.gitfitbe.entity.ReportStatus;
5+
import com.fasterxml.jackson.databind.JsonNode;
6+
import com.fasterxml.jackson.databind.ObjectMapper;
57
import lombok.AllArgsConstructor;
68
import lombok.Builder;
79
import lombok.Data;
@@ -17,16 +19,45 @@ public class ReportListResponse {
1719
private Long reportId;
1820
private String repositoryName;
1921
private String repositoryFullName;
22+
private String language;
23+
private Integer overallScore;
2024
private ReportStatus status;
2125
private Integer progress;
2226
private LocalDateTime createdAt;
2327
private LocalDateTime completedAt;
2428

29+
private static final ObjectMapper objectMapper = new ObjectMapper();
30+
2531
public static ReportListResponse from(Report report) {
32+
String repoName = report.getRepositoryName();
33+
String repoFullName = report.getRepositoryFullName();
34+
String language = report.getMainLanguage();
35+
Integer overallScore = 0;
36+
37+
// result JSON에서 추가 정보 추출 (COMPLETED 상태인 경우)
38+
if (report.getResult() != null && report.getStatus() == ReportStatus.COMPLETED) {
39+
try {
40+
JsonNode root = objectMapper.readTree(report.getResult());
41+
42+
// DB에 저장된 값이 없으면 JSON에서 추출
43+
if (repoName == null || repoName.isEmpty()) {
44+
repoName = root.path("repoName").asText("Unknown");
45+
}
46+
if (language == null || language.isEmpty()) {
47+
language = root.path("language").asText("Unknown");
48+
}
49+
overallScore = root.path("overallScore").asInt(0);
50+
} catch (Exception e) {
51+
// JSON 파싱 실패 시 기본값 유지
52+
}
53+
}
54+
2655
return ReportListResponse.builder()
2756
.reportId(report.getId())
28-
// .repositoryName(report.getRepositoryName())
29-
// .repositoryFullName(report.getRepositoryFullName())
57+
.repositoryName(repoName != null ? repoName : "Unknown Repository")
58+
.repositoryFullName(repoFullName)
59+
.language(language != null ? language : "Unknown")
60+
.overallScore(overallScore)
3061
.status(report.getStatus())
3162
.progress(report.getProgress())
3263
.createdAt(report.getCreatedAt())

src/main/java/com/example/gitfitbe/entity/Report.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,15 @@ public class Report {
4040
@Column(columnDefinition = "LONGTEXT")
4141
private String result; // AI 서버의 종합 분석 결과 (JSON)
4242

43+
@Column(name = "repository_name")
44+
private String repositoryName; // 레포지토리 이름 (예: gitfit-spring)
45+
46+
@Column(name = "repository_full_name")
47+
private String repositoryFullName; // 레포지토리 전체 이름 (예: owner/gitfit-spring)
48+
49+
@Column(name = "main_language")
50+
private String mainLanguage; // 주 사용 언어
51+
4352
@Column(columnDefinition = "TEXT")
4453
private String errorMessage; // 실패 시 오류 메시지
4554

src/main/java/com/example/gitfitbe/service/ReportService.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,22 @@ public ReportCreateResponse generateReport(Long userId, List<Long> repositoryIds
3636
throw new IllegalArgumentException("At least one repository must be selected");
3737
}
3838

39-
// 선택된 레포지토리들의 fullName 추출
40-
List<String> repositoryFullNames = repositoryService
41-
.getRepositoriesByIds(repositoryIds)
42-
.stream()
39+
// 선택된 레포지토리들 조회
40+
List<Repository> repositories = repositoryService.getRepositoriesByIds(repositoryIds);
41+
42+
// fullName 추출
43+
List<String> repositoryFullNames = repositories.stream()
4344
.map(Repository::getFullName)
4445
.collect(Collectors.toList());
4546

46-
// Report 생성 (userId만 연결)
47-
Report report = createReport(userId);
47+
// 첫 번째 레포지토리 정보로 Report 생성
48+
Repository firstRepo = repositories.get(0);
49+
String repoName = firstRepo.getName();
50+
String repoFullName = firstRepo.getFullName();
51+
String mainLanguage = firstRepo.getLanguage();
52+
53+
// Report 생성 (레포지토리 정보 포함)
54+
Report report = createReport(userId, repoName, repoFullName, mainLanguage);
4855

4956
// ✅ 여기서는 Report만 생성하고 반환
5057
// AI 호출은 컨트롤러나 별도 컴포넌트에서 처리
@@ -124,12 +131,15 @@ public void deleteReport(Long reportId, Long userId) {
124131
* Report 생성 (내부 사용)
125132
*/
126133
@Transactional
127-
Report createReport(Long userId) {
134+
Report createReport(Long userId, String repositoryName, String repositoryFullName, String mainLanguage) {
128135
// JPA 프록시 사용 (DB 조회 없음)
129136
User userProxy = userRepository.getReferenceById(userId);
130137

131138
Report report = Report.builder()
132139
.user(userProxy)
140+
.repositoryName(repositoryName)
141+
.repositoryFullName(repositoryFullName)
142+
.mainLanguage(mainLanguage)
133143
.status(ReportStatus.PENDING)
134144
.progress(0)
135145
.build();

0 commit comments

Comments
 (0)