2025. 5. 3. 21:58ㆍ개발/🦉 뀨업
랭킹 완성하즈아...
1 ) MySQL ranking table 정기 갱신 (하루에 한번)
2 ) refresh 버튼 눌렀을 때 MySQL ranking table - rare, basic 값 갱신
3 ) ranking 조회
Ranking Table 정기 갱신
ranking table 구조
ranking_id | handle | total | basic | rare |
int | String | float | float | float |
- basic값 갱신 : solved.ac API 사용하기
GET https://solved.ac/api/v3/user/problem_stats
parameter : handle(String)
response
[
{
"level": 0,
"total": 0,
"solved": 0,
"partial": 0,
"tried": 0
}
]
- rare값 정기 갱신
DynamoDB 정기 갱신 후에 계산
: dataCrawlingService.getSolvedStudents(pid) 사용
( 동기식 처리 필요 - 후처리 콜백 : TransactionSynchronizationManager.registerSynchronization() 사용)
Refresh 버튼 누르면 - Ranking Table 갱신
1 ) userRefresh 후 새로 푼 문제, 최초 솔브 여부 반환받기
2 ) 새로 푼 문제에 대해서
( 1 ) rare값 갱신
: dataCrawlingService.getSolvedStudents(pid) 사용
( 2 ) basic값 갱신
: problems table에서 tier 가져오기
: problems table 갱신 아직 안 됐을 경우, solved.ac API 사용 - https://solved.ac/api/v3/problem/show
1 ) 과 2-1 ) / 2-2 ) 는 비동기 처리 수행하기 : 이벤트 처리
필요한 메서드 / SQL
getEwhaRank : 교내 기여도 랭크 조회
-> selectEwhaRank() : 교내 기여도 랭크 조회 SQL
updateRankingTable : ranking table 정기 갱신 (하루 한번)
- updateBasic() : solved.ac API 사용
- updateRare() : dataCrawlingService.getSolvedStudents(pid) 사용
-> insertScores() : basic, rare, total 새로 삽입 SQL
-> deleteScore() : table 초기화 SQL
refreshScores : refresh 버튼 눌렀을 때 basic, rare, total 점수 update
- userRefresh() : 새로 푼 문제 조회
- refreshRare() : dataCrawlingService.getSolvedStudents(pid) 사용 / 더할 rare 값 계산 및 업데이트
- refreshBasic() : problems tier 조회, solved.ac API 사용 / 더할 basic 값 계산 및 업데이트
-> selectRare() : 기존 rare 값 조회
-> selectBasic() : 기존 basic 값 조회
-> refreshScores() : basic, rare, total 업데이트 SQL
'개발 > 🦉 뀨업' 카테고리의 다른 글
🦉 뀨업 - 이화 백준 사이트 리팩토링 ( 10 ) - 학생별 기여도 순위 조회 API ( 2 ) (0) | 2025.03.29 |
---|---|
🦉 뀨업 - 이화 백준 사이트 리팩토링 ( 9 ) - 학생별 기여도 순위 조회 API ( 1 ) (0) | 2025.03.13 |
🦉 뀨업 - 이화 백준 사이트 리팩토링 ( 8 ) - 03.07 회의 내용 (0) | 2025.03.07 |
🦉 뀨업 - 이화 백준 사이트 리팩토링 ( 7 ) - MyBatis 페이지네이션 (0) | 2025.03.05 |
🦉 뀨업 - 이화 백준 사이트 리팩토링 ( 6 ) - CORS가 또... (0) | 2025.03.01 |