- 보스 레이드 번호
- 보스 레이드 점수
- 보스 레이드 입장 시간(Date)
- 보스 레이드 종료 시간(Date)
- 클리어한 레벨
- 입장한 사용자
- 유저 번호
- 생성일
- 수정일
- 중복되지 않는 userId 생성
- 생성된 userId 응답
- 해당 유저의 보스레이드 총 점수와 참여 보스 레이드 기록 응답
-
보스레이드 현재 상태 응답
-
canEnter: 입장 가능한지
-
enteredUserId: 현재 진행중인 유저가 있다면, 해당 유저의 id
-
입장 가능 조건: 한 번에 한 명의 유저만 보스레이드 진행이 가능하다.
-
아무도 보스 레이드를 시작한 기록이 없다면 시작 가능하다.
-
시작한 기록이 있다면 마지막으로 시작한 유저가 보스레이드를 종료했거나,
시작한 시간으로부터 레이드 제한시간만큼 경과되어야 한다.
-
한 번에 한 명의 유저만 보스레이드 진행이 가능하다.
( node-redlock을 사용하여 redis lock을 걸어서 동시성 고려하도록 구현 )
-
레이드 시작이 가능하다면 중복되지 않은 raidRecordId를 생성하여
isEntered:true와 함께 응답
-
레이드 시작이 불가하다면 isEntered: false 반환
-
raidRecordId 종료 처리
-
레이드 level에 따른 score 반영
( 보스 레이드 staticData는 Redis에 캐싱하여 사용 )
-
저장된 userId와 raidRecordId가 일치하지 않는다면 예외 처리
-
시작한 시간으로부터 레이드 제한시간이 지났다면 예외 처리
-
보스레이드 totalScore 내림차순으로 랭킹 조회
-
Redis에 캐싱하여 랭킹 기능 구현
( Redis Sorted set 자료구조를 활용하여 랭킹 기능 구현 )
-
탑 랭커 리스트 반환(1위부터 10위까지)
-
나의 랭킹 반환
포스트맨 API 문서
https://documenter.getpostman.com/view/15230748/2s7Z7Wqb6x
project/
├─ src/
│ ├─ boss-raid/
│ ├─ boss-raid-history
│ ├─ rank
│ ├─ common
│ ├─ database
│ ├─ users
├─ app.controller.ts
├─ app.module.ts
├─ app.service.ts
├─ main.ts