Skip to content

Commit 5544190

Browse files
authored
Merge pull request #52 from Database-QL-team/refactor/updateScores-로직-수정
[refactor] RankingServiceImpl updateScores() 로직 수정
2 parents 9cb60d9 + d41e7a5 commit 5544190

File tree

2 files changed

+38
-21
lines changed

2 files changed

+38
-21
lines changed

src/main/java/ggyuel/ggyuup/ranking/dto/UserProblemStatsRespDTO.java

Lines changed: 0 additions & 11 deletions
This file was deleted.

src/main/java/ggyuel/ggyuup/ranking/service/RankingServiceImpl.java

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,14 @@
77
import ggyuel.ggyuup.problem.mapper.ProblemMapper;
88
import ggyuel.ggyuup.ranking.dto.RankingRespDTO;
99
import ggyuel.ggyuup.ranking.dto.UserLevelStatRespDTO;
10-
import ggyuel.ggyuup.ranking.dto.UserProblemStatsRespDTO;
1110
import ggyuel.ggyuup.ranking.mapper.RankingMapper;
1211
import lombok.RequiredArgsConstructor;
1312
import org.springframework.beans.factory.annotation.Autowired;
13+
import org.springframework.core.ParameterizedTypeReference;
14+
import org.springframework.http.HttpEntity;
15+
import org.springframework.http.HttpHeaders;
16+
import org.springframework.http.HttpMethod;
17+
import org.springframework.http.ResponseEntity;
1418
import org.springframework.scheduling.annotation.Scheduled;
1519
import org.springframework.stereotype.Service;
1620
import org.springframework.web.client.RestTemplate;
@@ -78,22 +82,37 @@ public void refreshScores(ProblemRefreshRespDTO problemRefreshRespDTO) {
7882
public float refreshBasic(String handle, List<Integer> updatedProblems) {
7983
System.out.println("refreshBasic 호출");
8084

81-
// plus해줄 basic 점수 계산
8285
float addBasic = 0;
86+
8387
for (int pid : updatedProblems) {
8488
Integer tier = problemMapper.selectTier(pid);
8589

86-
// 아직 DB 업데이트가 완료되지 못했을 경우 - solved.ac API 사용
87-
if(tier == null) {
90+
// 아직 DB 업데이트가 안 됐을 경우 solved.ac API 사용
91+
if (tier == null) {
8892
String url = UriComponentsBuilder
8993
.fromHttpUrl("https://solved.ac/api/v3/problem/show")
9094
.queryParam("problemId", pid)
9195
.toUriString();
9296

93-
Map<String, Object> response = restTemplate.getForObject(url, Map.class);
97+
HttpHeaders headers = new HttpHeaders();
98+
headers.set("x-solvedac-language", "ko");
99+
HttpEntity<String> entity = new HttpEntity<>(headers);
100+
101+
ResponseEntity<Map> responseEntity = restTemplate.exchange(
102+
url,
103+
HttpMethod.GET,
104+
entity,
105+
Map.class
106+
);
107+
108+
Map<String, Object> response = responseEntity.getBody();
94109
Object level = response.get("level");
95110

96-
tier = (Integer)level;
111+
if (level != null) {
112+
tier = (Integer) level;
113+
} else {
114+
tier = 0; // level이 없으면 0으로 처리 (필요에 따라 조정 가능)
115+
}
97116
}
98117

99118
addBasic += tier;
@@ -103,6 +122,7 @@ public float refreshBasic(String handle, List<Integer> updatedProblems) {
103122
return rankingMapper.selectBasic(handle) + addBasic;
104123
}
105124

125+
106126
// refresh 버튼 - rare 업데이트
107127
@Override
108128
public float refreshRare(String handle, List<Integer> updatedProblems) {
@@ -122,7 +142,7 @@ public float refreshRare(String handle, List<Integer> updatedProblems) {
122142

123143
// ranking table 정기 갱신(하루 한번)
124144
@Override
125-
@Scheduled(cron = "00 30 21 * * ?")
145+
@Scheduled(cron = "00 40 3 * * ?")
126146
public void updateRankingTable() {
127147
System.out.println("updateRankingTable 호출");
128148

@@ -158,17 +178,25 @@ public float updateBasic(String handle) {
158178
float insertBasic = 0;
159179

160180
String url = "https://solved.ac/api/v3/user/problem_stats?handle=" + handle;
161-
UserProblemStatsRespDTO response = restTemplate.getForObject(url, UserProblemStatsRespDTO.class);
162181

163-
List<UserLevelStatRespDTO> UserLevelStatDTOs = response.getItems();
182+
ResponseEntity<List<UserLevelStatRespDTO>> response =
183+
restTemplate.exchange(
184+
url,
185+
HttpMethod.GET,
186+
null,
187+
new ParameterizedTypeReference<List<UserLevelStatRespDTO>>() {}
188+
);
189+
190+
List<UserLevelStatRespDTO> userLevelStats = response.getBody();
164191

165-
for(UserLevelStatRespDTO userLevelStat : UserLevelStatDTOs) {
192+
for (UserLevelStatRespDTO userLevelStat : userLevelStats) {
166193
insertBasic += (userLevelStat.getLevel()) * (userLevelStat.getSolved());
167194
}
168195

169196
return insertBasic;
170197
}
171198

199+
172200
// ranking table 정기 갱신 - rare 업데이트
173201
@Override
174202
public float updateRare(String handle, Map<Integer, Float> rareScoreMap) {

0 commit comments

Comments
 (0)