[API]Ranking - gyunam-bark/nb02-how-do-i-look-team1 GitHub Wiki
사용자들이 큐레이션한 스타일 데이터를 기반으로 다양한 기준(총점, 트레디함, 개성, 실용성, 가성비)에 따라 랭킹을 계산하고 조회할 수 있는 API 입니다. 결과는 페이지네이션 형태로 리턴됩니다.
엔드포인트
- URL : /ranking
- Method : GET
- Query Parameters :
요청 형식 (Request)
응답 형식 (Response)
-
성공 시 (
200 OK
) -
실패 시 (
400 Bad Request
)
내부 동작 흐름
- rank-route.js
router.get('/', rankController.getRankingList.bind(rankController))
/rank?
경로에 GET 요청이 들어오면,RankController
의getRankingList
메서드 실행
- rank-controller.js
- 쿼리 파라미터 page, pageSize, rankBy를 처리
- rankBy 값이 유효하지 않으면 400 응답
RankService
의getRankingList
호출
- rank-service.js
style
,styleImages
,styleTags
,categories
,curations
테이블을 조회- 각 스타일의 평균 점수를 기준에 따라 계산
- total: (trendy + personality + practicality + costEffectiveness) / 4 (나머지 항목은 해당 점수만 사용)
- 점수 순으로 정렬
- 페이지네이션 처리 (slice)
- 각 스타일에 대해 필요한 필드 구성 : 썸네일 이미지, 태그 및 상의 카테고리, 뷰 수, 큐레이션 수, 등록일, 랭킹, 점수 등 포함
디렉토리 구조
참고사항
rating
이 없는 스타일은null
로 처리되며, 정렬 시 가장 하위에 위치합니다.- 상의(top) 카테고리만 클라이언트에 반환됩니다.
- 큐레이션이 없는 스타일은 랭킹 계산에서 제외되지 않고,
rating:null
로 포함됩니다. - 썸네일은 첫번째 등록된 이미지(styleImages[0]) 기준 입니다.
향후 개선 포인트
- 랭킹 캐싱 도입 (트래픽 대응)
- 정렬 기준 복수 적용 (ex. 인기순 + 실용성)
- 유저 필터 기능 (ex. 성별, 연령대 등)