From 5ef25cd138d542d8fdbf6fbd3e49257d2d101b3e Mon Sep 17 00:00:00 2001 From: Wanni Date: Thu, 13 Jun 2024 01:33:04 +0900 Subject: [PATCH] =?UTF-8?q?Document:=20=EC=A0=95=EB=B3=B4=20=EC=A0=84?= =?UTF-8?q?=EB=8B=AC=EC=9D=98=20=ED=98=BC=EB=8F=99=EC=9D=84=20=ED=94=BC?= =?UTF-8?q?=ED=95=98=EA=B8=B0=EC=9C=84=ED=95=B4=20=EB=B9=84=EC=A6=88?= =?UTF-8?q?=EB=8B=88=EC=8A=A4=20=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=EB=90=98=EC=96=B4=20=EC=9D=BC=EC=B9=98=ED=95=98=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EB=8A=94=20=EB=8B=A4=EC=9D=B4=EC=96=B4=EA=B7=B8?= =?UTF-8?q?=EB=9E=A8=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.MD | 213 +----------------------------------------------------- 1 file changed, 1 insertion(+), 212 deletions(-) diff --git a/README.MD b/README.MD index 574cdf4..1292c7f 100644 --- a/README.MD +++ b/README.MD @@ -346,216 +346,5 @@ Github Flow는 main 브랜치를 배포 가능한 상태로 유지하고, 새로 - 잔액 충전 / 조회 API - 결제 API -## 플로우 차트 -### 0. 유저 토큰 대기열 확인 -1. 클라이언트 토큰 입력 수신 -2. 토큰이 유효한지 확인 -3. 토큰이 유효하면 대기열 확인(peek) -4. 대기열 순번의 토큰과 클라이언트 토큰이 일치하는지 확인 -5. 일치하면 true 리턴 -6. 일치하지 않으면 false 리턴 - -### 1. 유저 토큰 발급 API -![tokencreate drawio](https://github.com/wanniDev/ticket/assets/81374655/daecde77-3214-4149-9bf2-598279b55fb3) - -### 2. 예약 가능 날짜 조회 API -![reservation_date_search drawio](https://github.com/wanniDev/ticket/assets/81374655/03b9cf95-6b12-4f64-9a07-584f26596919) - -### 3. 예약 가능 좌석 조회 API -![reservation_seats_search drawio](https://github.com/wanniDev/ticket/assets/81374655/48b2d329-48b8-4749-b9d1-66f0f0b24f97) - -### 4. 좌석 예약 요청 API -![reservation drawio](https://github.com/wanniDev/ticket/assets/81374655/45c31430-9b9d-4ef4-8fac-b68e2292f055) - -### 5. 잔액 충전 API -![balance_charge drawio](https://github.com/wanniDev/ticket/assets/81374655/20615ee3-111c-487c-b3a4-48656c1e9aa5) - -### 6. 잔액 조회 API -![balance_search drawio](https://github.com/wanniDev/ticket/assets/81374655/cbcc6bf8-8802-433e-80c1-942cfd0f43a0) - -### 7. 결제 API -![payment drawio](https://github.com/wanniDev/ticket/assets/81374655/1a1b9aee-dd5a-4a2a-8376-c91eab917948) - ## 시퀀스 다이어그램 -> 이 부분은 새로운 다이어그램 작성 툴에 대한 학습을 해보기위해 별도로 진행해보는 작업입니다.
-> 따라서, 아직 모든 내용이 제대로 반영된 부분은 아닐 수 있습니다. - -### 1. 유저 토큰 발급 API -```mermaid -sequenceDiagram - participant C as Client - participant A as API - participant DB as Database - C->>A: api 요청 처리 위임 - A->>DB: 사용자 조회 - DB->>DB: 사용자 식별 정보 확인 - DB-->>A: 사용자 식별 정보 결과 return - opt 사용자 식별 불가 - A-->>C: 400 Bad Request - end - A->>A: 토큰 생성 - A-->>C: api 응답 - -``` - -### 2. 예약 가능 좌석 조회 API -- 목적 : 사용자가 특정 날짜와 좌석에 대해 예약을 요청할 수 있어야 합니다. -- 핵심 요구사항 : - - 사용자는 특정 날짜를 선택하여 그 날짜에 대한 예약 가능 좌석을 확인할 수 있어야 합니다. -- 제약사항 : - - 이미 예약되었거나 임시 배정된 좌석은 예약 가능한 좌석 목록에 포함되지 않아야 합니다. -```mermaid -sequenceDiagram - participant C as Client - participant F as AOP - participant A as API - participant DB as Database - C->>A: api 요청(GET /api/concert/seat/{date}) - A->>F: 요청 헤더의 토큰 복호화 - F->>DB: 복호화된 토큰 조회 쿼리 요청 - DB->>DB: 복호화된 토큰 조회 쿼리 수행 - DB-->>F: 복호화된 토큰 조회 결과 return - alt 토큰이 만료된 경우 - F-->>C: expired token error - else 토큰 검증 실패 - F-->>C: Invalid token error - end - F->>A: api 요청 처리 위임 - A->>DB: 해당 일자 좌석 조회 쿼리 요청 - DB->>DB: 해당 일자 좌석 조회 쿼리 수행 - DB-->>A: 해당 일자 좌석 조회 결과 return - A-->>A: 해당 좌석에 예약가능한 좌석 필터링 및 오름차순 정렬 - A-->>C: 해당 일자 좌석 조회 결과 return -``` - -### 3. 좌석 예약 요청 API -- 목적 : 사용자가 특정 날짜와 좌석에 대해 예약을 요청할 수 있어야 합니다. -- 핵심 요구사항 : - - 사용자는 토큰을 사용하여 예약 요청을 해야 합니다. - - 예약이 성공적으로 요청되면, 해당 좌석은 일정 시간 동안 사용자에게 임시 배정됩니다. -- 제약사항 : - - 한 사용자가 동시에 여러 좌석을 예약할 수 없습니다. - - 임시 배정 시간 내에 결제가 완료되지 않으면, 좌석 배정이 자동으로 해제됩니다. -```mermaid -sequenceDiagram - participant C as Client - participant F as AOP - participant A as API - participant DB as Database - C->>A: api 요청(GET /api/concert/seat/{date}) - A->>F: 요청 헤더의 토큰 복호화 - F->>DB: 복호화된 토큰 조회 쿼리 요청 - DB->>DB: 복호화된 토큰 조회 쿼리 수행 - DB-->>F: 복호화된 토큰 조회 결과 return - alt 토큰이 만료된 경우 - F-->>C: expired token error - else 토큰 검증 실패 - F-->>C: Invalid token error - end - F->>A: api 요청 처리 위임 - A->>DB: 해당 일자 예약 가능한 콘서트, 좌석 조회 쿼리 요청 - DB->>DB: 해당 일자 예약 가능한 콘서트, 좌석 조회 쿼리 수행 - DB-->>A: 해당 일자 예약 가능한 콘서트, 좌석 조회 결과 return - opt 예약 가능한 콘서트 및 좌석이 없는 경우 - A-->>C: Not Found Available concert - end - A->>DB: 예약 정보 저장 쿼리 요청 - DB->>DB: 예약 정보 저장 쿼리 수행 - DB-->>A: 예약 정보 저장 결과 return - A-->>C: 예약 정보 저장 결과 return -``` -### 4. 잔액 충전 / 조회 API -#### 잔액 충전 -- 목적 : 사용자가 예약 결제를 위해 잔액을 충전할 수 있어야 합니다. -- 핵심 요구사항 : - - 사용자는 특정 금액을 지정하여 잔액을 충전할 수 있습니다. -- 제약사항 : - - 충전 금액은 양수여야 합니다. -```mermaid -sequenceDiagram - participant C as Client - participant F as AOP - participant A as API - participant DB as Database - C->>A: api 요청 - A->>F: 요청 헤더의 토큰 복호화 - F->>DB: 복호화된 토큰 조회 쿼리 요청 - DB->>DB: 복호화된 토큰 조회 쿼리 수행 - DB-->>F: 복호화된 토큰 조회 결과 return - alt 토큰이 만료된 경우 - F-->>C: expired token error - else 토큰 검증 실패 - F-->>C: Invalid token error - end - F->>A: api 요청 처리 위임 - A->>DB: 사용자 잔액 조회 쿼리 요청 - DB->>DB: 사용자 잔액 조회 쿼리 수행 - DB-->>A: 사용자 잔액 조회 결과 return - A->>DB: 사용자 잔액 업데이트 쿼리 요청 - DB->>DB: 사용자 잔액 업데이트 쿼리 수행 - DB-->>A: 사용자 잔액 업데이트 결과 return - A-->>C: 사용자 잔액 업데이트 결과 return -``` - -#### 잔액 조회 -- 목적 : 사용자가 자신의 현재 잔액을 조회할 수 있어야 합니다. -- 핵심 요구사항 : - - 사용자는 자신의 잔액 정보를 언제든지 조회할 수 있어야 합니다. -- 제약사항: - - 조회는 사용자 본인의 잔액에 한정됩니다. -```mermaid -sequenceDiagram - participant C as Client - participant F as AOP - participant A as API - participant DB as Database - C->>A: api 요청 - A->>F: 요청 헤더의 토큰 복호화 - F->>DB: 복호화된 토큰 조회 쿼리 요청 - DB->>DB: 복호화된 토큰 조회 쿼리 수행 - DB-->>F: 복호화된 토큰 조회 결과 return - alt 토큰이 만료된 경우 - F-->>C: expired token error - else 토큰 검증 실패 - F-->>C: Invalid token error - end - F->>A: api 요청 처리 위임 - A->>DB: 사용자 잔액 조회 쿼리 요청 - DB->>DB: 사용자 잔액 조회 쿼리 수행 - DB-->>A: 사용자 잔액 조회 결과 return - A-->>C: 사용자 잔액 조회 결과 return -``` - -### 5. 결제 API -> 해당 API는 PG 사에서 제공하는 결제 모달창 UI를 통해 결제 정보를 입력한 이후에 호출되는 API입니다.
-> 이번 프로젝트에서는 예약과 대기열등 핵심 비즈니스 로직 구현에 집중하기 위해 PG 연동은 생략하였습니다.
-```mermaid -sequenceDiagram - participant C as Client - participant F as AOP - participant Q as 대기열 - participant A as API - participant PG as PaymentGateway - participant DB as Database - - C->>F: api 요청 - F->>DB: 토큰 검증 - opt 토큰 소유자와 요청한 사용자가 다를 경우 - F-->>C: 잘못된 토큰 오류 - end - A->>DB: 결제 정보 검증 - opt 결제 정보 불일치 - A-->>C: 400 Bad Request - end - A->>PG: 결제 승인 요청 - PG-->>A: 결제 승인 결과 수신 - A->>DB: 결제 승인 결과(결제 내역) 저장 -``` -- 목적: 사용자가 좌석 예약에 대해 결제를 완료할 수 있어야 합니다. -- 핵심 요구사항: - - 사용자는 잔액을 이용하여 예약한 좌석에 대한 결제를 진행할 수 있어야 합니다. - - 결제가 성공하면, 예약이 확정되고 해당 좌석은 사용자에게 배정됩니다. -- 제약사항: - - 사용자의 잔액은 결제 금액 이상이어야 합니다. - - 결제 요청은 유효한 예약 정보에 대해서만 가능해야 합니다. - +> 리팩토링 및 고도화 과정이후 시퀀스 다이어그램 재작성 중 \ No newline at end of file