Skip to content

Commit baf1c00

Browse files
authored
feat(analysis, communtiy): analysis 도메인 분석 결과 조회, community 기반
feat(analysis, communtiy): analysis 도메인 분석 결과 조회, community 기반
2 parents 148a706 + f8518d2 commit baf1c00

File tree

15 files changed

+193
-7
lines changed

15 files changed

+193
-7
lines changed
Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,63 @@
11
package com.backend.domain.analysis.controller;
22

3+
import com.backend.domain.analysis.dto.HistoryResponseDto;
34
import com.backend.domain.analysis.dto.request.AnalysisRequest;
5+
import com.backend.domain.analysis.entity.AnalysisResult;
6+
import com.backend.domain.analysis.entity.Score;
47
import com.backend.domain.analysis.service.AnalysisService;
8+
import com.backend.domain.repository.entity.Language;
9+
import com.backend.domain.repository.entity.Repositories;
10+
import com.backend.domain.repository.entity.RepositoryLanguage;
11+
import com.backend.domain.repository.service.RepositoryService;
512
import com.backend.global.response.ApiResponse;
613
import lombok.RequiredArgsConstructor;
714
import org.springframework.http.ResponseEntity;
8-
import org.springframework.web.bind.annotation.PostMapping;
9-
import org.springframework.web.bind.annotation.RequestBody;
10-
import org.springframework.web.bind.annotation.RequestMapping;
11-
import org.springframework.web.bind.annotation.RestController;
15+
import org.springframework.transaction.annotation.Transactional;
16+
import org.springframework.web.bind.annotation.*;
17+
18+
import java.util.ArrayList;
19+
import java.util.List;
20+
import java.util.Optional;
1221

1322
@RestController
1423
@RequiredArgsConstructor
1524
@RequestMapping("/api/analysis")
1625
public class AnalysisController {
1726
private final AnalysisService analysisService;
27+
private final RepositoryService repositoryService;
1828

1929
@PostMapping
2030
public ResponseEntity<ApiResponse<Void>> analyzeRepository(@RequestBody AnalysisRequest request) {
2131
analysisService.analyze(request.githubUrl());
2232
return ResponseEntity.ok(ApiResponse.success());
2333
}
34+
35+
@GetMapping("/user/{memberId}")
36+
@Transactional(readOnly = true)
37+
public ResponseEntity<List<HistoryResponseDto>> getMemberHistory(@PathVariable Long memberId){
38+
List<Repositories> repositories = repositoryService.findRepositoryByMember(memberId);
39+
List<HistoryResponseDto> historyList = new ArrayList<>();
40+
41+
for (Repositories repo : repositories) {
42+
Optional<AnalysisResult> optionalAnalysis = analysisService.findAnalysisResultByRepositoryId(repo.getId());
43+
44+
if (optionalAnalysis.isPresent()) { // 존재하는지 확인
45+
AnalysisResult analysisResult = optionalAnalysis.get();
46+
Score score = analysisResult.getScore();
47+
48+
List<String> languages = repositoryService.findLanguagesByRepisotryId(repo.getId())
49+
.stream()
50+
.map(Enum::name) // RepositoryLanguage -> Language enum
51+
.toList();
52+
53+
HistoryResponseDto dto = new HistoryResponseDto(repo, analysisResult, score, languages);
54+
historyList.add(dto);
55+
}
56+
}
57+
58+
// 최신순 정렬
59+
historyList.sort((a, b) -> b.createDate().compareTo(a.createDate()));
60+
61+
return ResponseEntity.ok(historyList);
62+
}
2463
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.backend.domain.analysis.dto;
2+
3+
import com.backend.domain.analysis.entity.AnalysisResult;
4+
import com.backend.domain.analysis.entity.Score;
5+
import com.backend.domain.repository.entity.Repositories;
6+
import com.backend.domain.repository.entity.RepositoryLanguage;
7+
8+
import java.time.LocalDateTime;
9+
import java.util.List;
10+
11+
public record HistoryResponseDto(
12+
String repositoryName,
13+
LocalDateTime createDate,
14+
List<String> languages,
15+
int totalScore,
16+
boolean publicStatus
17+
) {
18+
public HistoryResponseDto(Repositories repositories, AnalysisResult analysisResult, Score score, List<String> languages){
19+
this(
20+
repositories.getName(),
21+
analysisResult.getCreateDate(),
22+
languages,
23+
score.getTotalScore(),
24+
repositories.isPublicRepository()
25+
);
26+
}
27+
}

backend/src/main/java/com/backend/domain/analysis/entity/Score.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,10 @@ public class Score {
3434

3535
@Column(nullable = false)
3636
private int cicdScore;
37+
38+
// 종합 점수
39+
@Transient
40+
public int getTotalScore() {
41+
return readmeScore + testScore + commitScore + cicdScore;
42+
}
3743
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.backend.domain.analysis.repository;
2+
3+
import com.backend.domain.analysis.entity.AnalysisResult;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
import java.util.List;
8+
import java.util.Optional;
9+
10+
@Repository
11+
public interface AnalysisResultRepository extends JpaRepository <AnalysisResult, Long>{
12+
Optional<AnalysisResult> findByRepositories_Id(Long repositoryId);
13+
}

backend/src/main/java/com/backend/domain/analysis/repository/dummy

Whitespace-only changes.

backend/src/main/java/com/backend/domain/analysis/service/AnalysisService.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
package com.backend.domain.analysis.service;
22

3+
import com.backend.domain.analysis.entity.AnalysisResult;
4+
import com.backend.domain.analysis.repository.AnalysisResultRepository;
35
import com.backend.domain.repository.service.RepositoryService;
46
import com.backend.global.exception.BusinessException;
57
import com.backend.global.exception.ErrorCode;
68
import lombok.RequiredArgsConstructor;
79
import org.springframework.stereotype.Service;
810
import org.springframework.transaction.annotation.Transactional;
911

12+
import java.util.Optional;
13+
1014
@Service
1115
@RequiredArgsConstructor
1216
public class AnalysisService {
1317
private final RepositoryService repositoryService;
18+
private final AnalysisResultRepository analysisResultRepository;
1419

1520
@Transactional
1621
public void analyze(String githubUrl) {
@@ -29,4 +34,9 @@ public void analyze(String githubUrl) {
2934
// GitHub API 호출
3035
repositoryService.fetchAndSaveRepository(owner, repo);
3136
}
37+
38+
// AnalysisRresult에서 repository id로 분석 결과 찾기
39+
public Optional<AnalysisResult> findAnalysisResultByRepositoryId (Long RepositoryId){
40+
return analysisResultRepository.findByRepositories_Id(RepositoryId);
41+
}
3242
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.backend.domain.community.dto;
2+
3+
public class CommunityResponseDto {
4+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.backend.domain.community.entity;
2+
3+
import com.backend.domain.analysis.entity.AnalysisResult;
4+
import com.backend.global.entity.BaseEntity;
5+
import jakarta.persistence.*;
6+
import lombok.Getter;
7+
8+
@Entity
9+
@Getter
10+
public class Comment extends BaseEntity {
11+
// 댓글 id
12+
@Id
13+
@GeneratedValue(strategy = GenerationType.IDENTITY)
14+
private Long id;
15+
16+
// 분석결과 id
17+
@ManyToOne(optional= false)
18+
@JoinColumn(name = "analysis_result_id", nullable = false)
19+
private AnalysisResult analysisResultId;
20+
21+
// 회원 id
22+
@Column(name = "member_id", nullable = false)
23+
private Long memberId;
24+
25+
// 댓글 내용
26+
@Column(columnDefinition = "TEXT", nullable = false)
27+
private String comment;
28+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.backend.domain.community.repository;
2+
3+
import com.backend.domain.community.entity.Comment;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
@Repository
8+
public interface CommentRepository extends JpaRepository<Comment, Long> {
9+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.backend.domain.community.service;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import org.springframework.stereotype.Service;
5+
import org.springframework.transaction.annotation.Transactional;
6+
7+
8+
@Service
9+
@RequiredArgsConstructor
10+
@Transactional(readOnly = true)
11+
public class CommunityService {
12+
}

0 commit comments

Comments
 (0)