- 사용자에게 토큰을 발급하면 중복발급인지 먼저 체크
- 사용자가 최대 최대 액티브 토큰이 현재 액티브된 토큰 보다 적고 웨이팅 토큰이 없을때 사용자는 active 큐에 저장되고 token의 상태를 Active로 해서 저장 이때 TTL은 10분을 준다.
- 반대일경우 Waiting 큐에 추가하고 토큰의 상태를 Wating으로 만듬. 그리고 해당 토큰은 별도의 TTL없이 기다림( 물론 TTL 줄수는 있는데, 혹시 몰라 안줬습니다.)
- 스케줄러가 액티브 큐에 있는 목록들을 가져와서 토큰value를 통해 토큰이 살아있는지 확인합니다.TTL이 만료되었으면 제거하기 위해
- 토큰이 없다면 액티브 큐에서 해당 토큰을 제거해주고 액티브 큐로 넣어주면서 토큰의 상태값은 Active로 만들어주고 TTL은 10분을 부여합니다.
- 위 처럼 토큰이 발급 되면 토큰 밸류와 상태를 반환합니다.
- 별도의 대기열 상태도 조회가능합니다.
- 토큰값을 통해 예약 가능한 좌석을 조회합니다.
- 토큰 값을 통해서 좌석을 예약을 요청합니다. (이때 낙관적 락을 통해 버전관리가 되어 좌석이 잠기면 예약이 불가능합니다.)
- 예약상태값이 RESERVING 일때, 결제가 성공됩니다.
- 결제가 완료 되면 토큰을 만료시킵니다.
- 예약 스케줄러가 돌면서 예약 중인 예약은 5분뒤 만료 처리를 합니다.
-
좌석 역시 스케줄러가 돌면서 예약 가능한 좌석으로 변경하고
예약될시 RESERVED로 처리합니다.