#18 좌석 엔티티 테이블, 시퀀스 작성

seojin's 개발블로그·2023년 11월 14일
0

영화 사이트 제작

목록 보기
18/19

실질적인 판매 상품이 되는 영화관 좌석에 대한 테이블 설계와
API의 시퀀스 다이어그램을 작성하였다.

📌 테이블 설계


위에부터 차례로 설명을 하면

  1. 테이블의 기본키
  2. 상영일정 <- 좌석 의 참조관계를 맺는 외래키
  3. 좌석의 행
  4. 좌석의 열
  5. 좌석 가격
  6. 예매 가능 여부
  7. 판매 상태 여부

와 생성, 수정시간으로 구성을 하였다.
reserve_avail은 좌석을 선택 하였을 때 좌석을 선점하는 기능을 만들기 위해 만든 불리언 타입 애트리뷰트인데 true, false로 좌석의 선택 가불 여부를 나타내주는 역할을 한다.

soldout은 판매 상태를 나타내며 선점된 좌석들이 판매되지 않았을 때 다시 선택 가능 좌석으로 바꿔주기 위한 검증 플래그이다.

reserve_avail은 false인데 soldout이 false로 판매가 안된 상태라면
일정시간마다 실행되는 검증 메서드를 이용해서 좌석을 다시 예약 가능한 상태로 돌려주기 위한 역할을 한다.

📌 시퀀스 다이어그램

생성과 삭제는 관리자의 입장에서 작성하였고
read, update의 경우는 좌석 확인 -> 좌석 선택 -> 예매순으로
진행되는 일반적인 예매상황을 생각하고 작성하였다


1. 좌석 생성 API
소속된 상영일정 id와 row, column의 범위, 가격을 입력하면
해당 범위만큼의 좌석을 생성해주는 Api를 생각했다.
예를 들어 row = 10, column = 10이라면 100개의 좌석을 생성해주는 Api이다.


2. 좌석상태 확인 API
영화 예매시 보게되는 좌석 현황을 반환해 줄 Api이다
유저가 선택한 상영일정의 Id값을 받아 소속 좌석들을 반환해준다

3.좌석 선점 API
좌석 선택시 해당 좌석을 선점하여 다른 유저와의 중복선택으로
예매 실패가 되는 경우를 방지하고자 구현을 하기로 했다.
좌석 선택시 좌석의 Id를 전송하고 해당 좌석들의 선택가능 여부를 false로 변경해주는 역할을 한다.

4.좌석 선점해제 API
매 10분마다 선점된 좌석중 판매가 되지 않은 좌석들의 예매가능 상태를 초기화 시켜주는 역할을 한다.
유저가 좌석 선택후 결제전 취소를 한다던가 예매를 하지 않는 경우에 이용하기 위해 구현을 결정했다.
의도적이던 의도적이지 않던 취소가 발생하는 경우의 수가 매우 다양해서
취소시 즉각적인 플래그 수정이 어렵다고 생각해 타이머를 이용해 주기적으로
검증을 해주는 방향으로 API를 설계했다.

5.좌석 판매 API
좌석이 예매 되었을 경우 호출되는 API로 좌석 데이터의 soldout 여부를 true로 전환 해준다.


6. 좌석 정보 삭제 API
삭제의 경우는 메서드 하나로 구현하기 위해서 scheduleId 또는 seatId
어느것을 이용해도 삭제가 가능하도록 구현을 할 예정이다.

사용용도는 각 상영관의 형태가 다양할 수 있기 때문에
ex) 맨 뒷자리의 경우 기둥때문에 좌석이 적은 경우등
실제로는 존재하지 않는 좌석을 삭제한다거나 할 때 이용할 목적으로 구현을 결정하였고
일괄 삭제의 경우 상영 일정이 삭제될때 cascade 옵션으로 한번에 삭제가 되게 만들 예정이다.

📌 API 명세

실제 구현시, 프론트 제작시 참고하기 위해 위의 시퀀스 다이어그램을 토대로
명세를 작성하였다.



📌 후기

팀원분께서 이해하기 쉬우시도록 객체가 받는 파라미터와 리턴을 확인할 수 있도록 작성을 하였다
다행히도 그림만으로도 잘 이해를 해주셨다.

블랙박스 시퀀스 다이어그램은 본인이 실제 구현전 작성을 하기로 했다
서로 바쁜시기이기에 각자의 코드를 완벽히 이해하고 넘어가기가 힘들기 때문이다.
그래서 각 API의 표면만을 나타내고 설명을 했고
블랙박스의 경우는 따로 노션에 남겨 서로 이해가 필요할 때 참고할 수 있도록
하기로 했다.

profile
개발 공부하는 블로그

1개의 댓글

comment-user-thumbnail
2023년 11월 14일

이렇게 유용한 정보를 공유해주셔서 감사합니다.

답글 달기