Skip to content

Commit 3db6811

Browse files
authored
fix(repository): 사용자별 Repositories 독립적 생성 가능하도록 수정
fix(repository): 사용자별 Repositories 독립적 생성 가능하도록 수정
2 parents f11d89e + 8d3adbc commit 3db6811

File tree

5 files changed

+17
-11
lines changed

5 files changed

+17
-11
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,14 @@ public Long analyze(String githubUrl, Long userId) {
6262
}
6363

6464
Repositories savedRepository = repositoryJpaRepository
65-
.findByHtmlUrl(repositoryData.getRepositoryUrl())
65+
.findByHtmlUrlAndUserId(repositoryData.getRepositoryUrl(), userId)
6666
.orElseThrow(() -> new BusinessException(ErrorCode.GITHUB_REPO_NOT_FOUND));
6767

6868
Long repositoryId = savedRepository.getId();
6969

7070
// OpenAI API 데이터 분석 및 저장
7171
try {
72-
evaluationService.evaluateAndSave(repositoryData);
72+
evaluationService.evaluateAndSave(repositoryData, userId);
7373
lockManager.refreshLock(cacheKey);
7474
} catch (BusinessException e) {
7575
sseProgressNotifier.notify(userId, "error", "AI 평가 실패: " + e.getMessage());

backend/src/main/java/com/backend/domain/evaluation/service/EvaluationService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@ public class EvaluationService {
3737
private final ScoreRepository scoreRepository;
3838

3939
@Transactional
40-
public Long evaluateAndSave(RepositoryData data) {
40+
public Long evaluateAndSave(RepositoryData data, Long userId) {
4141
AiResult ai = callAiAndParse(data);
4242

4343
String url = data.getRepositoryUrl();
44-
Repositories repo = repositoryJpaRepository.findByHtmlUrl(url)
44+
Repositories repo = repositoryJpaRepository.findByHtmlUrlAndUserId(url, userId)
4545
.orElseThrow(() -> new BusinessException(ErrorCode.GITHUB_REPO_NOT_FOUND));
4646

4747
AnalysisResult analysis = AnalysisResult.builder()

backend/src/main/java/com/backend/domain/repository/entity/Repositories.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,15 @@
1818
import java.util.stream.Collectors;
1919

2020
@Entity
21-
@Table(name = "repositories")
21+
@Table(
22+
name = "repositories",
23+
uniqueConstraints = {
24+
@UniqueConstraint(
25+
name = "uk_html_url_user",
26+
columnNames = {"html_url", "user_id"}
27+
)
28+
}
29+
)
2230
@Getter
2331
@NoArgsConstructor(access = AccessLevel.PROTECTED)
2432
public class Repositories extends BaseEntity {

backend/src/main/java/com/backend/domain/repository/repository/RepositoryJpaRepository.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
package com.backend.domain.repository.repository;
22

3-
import com.backend.domain.repository.entity.Language;
43
import com.backend.domain.repository.entity.Repositories;
5-
import com.backend.domain.user.entity.User;
64
import org.springframework.data.jpa.repository.JpaRepository;
7-
import org.springframework.data.jpa.repository.Query;
8-
import org.springframework.data.repository.query.Param;
95
import org.springframework.stereotype.Repository;
106

117
import java.util.List;
@@ -15,6 +11,8 @@
1511
public interface RepositoryJpaRepository extends JpaRepository<Repositories, Long> {
1612
Optional<Repositories> findByHtmlUrl(String htmlUrl);
1713

14+
Optional<Repositories> findByHtmlUrlAndUserId(String htmlUrl, Long userId);
15+
1816
List<Repositories> findByUserId(Long userId);
1917

2018
List<Repositories> findByPublicRepository(boolean b);

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
@@ -125,14 +125,14 @@ public RepositoryData fetchCompleteRepositoryData(String owner, String repo, Lon
125125
}
126126

127127
/* Repository Entity를 DB에 저장하거나 기존 데이터 업데이트
128-
* 같은 htmlUrl이 존재하면 업데이트, 없으면 신규 데이터 저장 */
128+
* 같은 htmlUrl + userId 조합이 존재하면 업데이트, 없으면 신규 데이터 저장 */
129129
private Repositories saveOrUpdateRepository(RepoResponse repoInfo, String owner, String repo, Long userId) {
130130
User user = userRepository.findById(userId)
131131
.orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND));
132132

133133
Map<String, Integer> languagesData = gitHubDataFetcher.fetchLanguages(owner, repo);
134134

135-
return repositoryJpaRepository.findByHtmlUrl(repoInfo.htmlUrl())
135+
return repositoryJpaRepository.findByHtmlUrlAndUserId(repoInfo.htmlUrl(), userId)
136136
.map(existing -> {
137137
existing.updateFrom(repoInfo);
138138
existing.updateLanguagesFrom(languagesData);

0 commit comments

Comments
 (0)