Skip to content

Commit

Permalink
Document: 정보 전달의 혼동을 피하기위해 비즈니스 로직 변경되어 일치하지 않는 다이어그램 삭제
Browse files Browse the repository at this point in the history
  • Loading branch information
wanniDev committed Jun 12, 2024
1 parent 4e98b14 commit 5ef25cd
Showing 1 changed file with 1 addition and 212 deletions.
213 changes: 1 addition & 212 deletions README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -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)

## 시퀀스 다이어그램
> 이 부분은 새로운 다이어그램 작성 툴에 대한 학습을 해보기위해 별도로 진행해보는 작업입니다. </br>
> 따라서, 아직 모든 내용이 제대로 반영된 부분은 아닐 수 있습니다.
### 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입니다.</br>
> 이번 프로젝트에서는 예약과 대기열등 핵심 비즈니스 로직 구현에 집중하기 위해 PG 연동은 생략하였습니다. </br>
```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: 결제 승인 결과(결제 내역) 저장
```
- 목적: 사용자가 좌석 예약에 대해 결제를 완료할 수 있어야 합니다.
- 핵심 요구사항:
- 사용자는 잔액을 이용하여 예약한 좌석에 대한 결제를 진행할 수 있어야 합니다.
- 결제가 성공하면, 예약이 확정되고 해당 좌석은 사용자에게 배정됩니다.
- 제약사항:
- 사용자의 잔액은 결제 금액 이상이어야 합니다.
- 결제 요청은 유효한 예약 정보에 대해서만 가능해야 합니다.

> 리팩토링 및 고도화 과정이후 시퀀스 다이어그램 재작성 중

0 comments on commit 5ef25cd

Please sign in to comment.