|
| 1 | +# Sequence Diagrams |
| 2 | + |
| 3 | + |
| 4 | +# 좋아요 등록/취소 |
| 5 | + |
| 6 | + |
| 7 | +```mermaid |
| 8 | +sequenceDiagram |
| 9 | +title 좋아요 처리 (회원 전용) |
| 10 | +actor User as 사용자 |
| 11 | +participant Auth as Auth Filter |
| 12 | +participant API as Like API |
| 13 | +participant Service as Like Service |
| 14 | +participant Repo as Like Repository |
| 15 | +participant ProdRepo as Product Repository |
| 16 | +
|
| 17 | + User->>Auth: 좋아요/취소 요청 (X-Loopers-LoginId, LoginPw) |
| 18 | + Auth->>Auth: 회원 인증 및 UserId 추출 |
| 19 | + Auth->>API: 요청 전달 (UserId, ProductId) |
| 20 | + |
| 21 | + activate API |
| 22 | + API->>Service: 좋아요/취소 로직 실행 |
| 23 | + activate Service |
| 24 | + |
| 25 | + alt 등록 요청 |
| 26 | + Service->>Repo: 기존 존재 여부 확인 |
| 27 | + Repo-->>Service: 결과 반환 |
| 28 | + alt 미존재 |
| 29 | + Service->>Repo: INSERT (Like) |
| 30 | + Service->>ProdRepo: UPDATE (likes_count + 1) |
| 31 | + Service-->>API: 성공 |
| 32 | + else 이미 존재 |
| 33 | + Service-->>API: 400 Bad Request |
| 34 | + end |
| 35 | + else 취소 요청 |
| 36 | + Service->>Repo: DELETE (Like) |
| 37 | + Note right of Service: 삭제 성공 시에만 count 감소 |
| 38 | + Service->>ProdRepo: UPDATE (likes_count - 1) |
| 39 | + Service-->>API: 성공 |
| 40 | + end |
| 41 | + |
| 42 | + deactivate Service |
| 43 | + API-->>User: 200 OK |
| 44 | + deactivate API |
| 45 | + |
| 46 | + ``` |
| 47 | + |
| 48 | + |
| 49 | + |
| 50 | + |
| 51 | +# 주문 생성(재고확인 및 차감) |
| 52 | + |
| 53 | +```mermaid |
| 54 | +
|
| 55 | +sequenceDiagram |
| 56 | +title 주문 생성 (재고 차감 및 장바구니 삭제) |
| 57 | +
|
| 58 | + actor User as 사용자 |
| 59 | + participant API as Order API |
| 60 | + participant Service as Order Service |
| 61 | + participant ProdRepo as Product Repository |
| 62 | + participant OrderRepo as Order Repository |
| 63 | + participant CartRepo as Cart Repository |
| 64 | +
|
| 65 | + User->>API: 주문 생성 요청 |
| 66 | + activate API |
| 67 | +
|
| 68 | + API->>Service: 주문 생성 트랜잭션 시작 |
| 69 | + activate Service |
| 70 | +
|
| 71 | + Service->>ProdRepo: 재고 차감 요청 |
| 72 | +
|
| 73 | + ProdRepo-->>Service: 성공 여부 반환 |
| 74 | +
|
| 75 | + alt 재고 부족 |
| 76 | + Service-->>API: 재고 부족 예외 던짐 |
| 77 | + API-->>User: 400 Bad Request (품절) |
| 78 | + else 재고 충분 및 차감 완료 |
| 79 | + Service->>OrderRepo: 주문(Order) & 상세(OrderItems) 저장 |
| 80 | + OrderRepo-->>Service: 저장 완료 |
| 81 | +
|
| 82 | + Service->>CartRepo: 장바구니 데이터 삭제 |
| 83 | + CartRepo-->>Service: 삭제 완료 |
| 84 | +
|
| 85 | + Service-->>API: 주문 성공 응답 |
| 86 | + deactivate Service |
| 87 | + API-->>User: 201 Created (주문 완료) |
| 88 | + end |
| 89 | + deactivate API |
| 90 | +``` |
| 91 | + |
| 92 | + |
| 93 | + |
| 94 | +# 주문상태 변경 |
| 95 | + |
| 96 | + |
| 97 | +```mermaid |
| 98 | + |
| 99 | + sequenceDiagram |
| 100 | + title: 주문 상태 변경 (관리자 승인 / 사용자 취소) |
| 101 | +
|
| 102 | + %% 참여자 정의 (별칭 사용) |
| 103 | + participant U as 사용자/관리자 |
| 104 | + participant API as Order API |
| 105 | + participant S as Order Service |
| 106 | + participant OR as Order Repository |
| 107 | + participant PR as Product Repository |
| 108 | +
|
| 109 | + U->>API: 상태 변경 요청 (Approve/Cancel) |
| 110 | + activate API |
| 111 | + |
| 112 | + API->>S: 주문 상태 변경 처리 |
| 113 | + activate S |
| 114 | + |
| 115 | + S->>OR: 현재 주문 정보 조회 |
| 116 | + OR-->>S: Order Entity 반환 |
| 117 | + |
| 118 | + alt 상태가 PENDING이 아닌 경우 |
| 119 | + S-->>API: 변경 불가 예외 (400) |
| 120 | + API-->>U: 실패 (이미 처리된 주문입니다) |
| 121 | + else 상태가 PENDING인 경우 |
| 122 | + alt 관리자 승인 (Approve) |
| 123 | + S->>OR: 상태를 'CONFIRMED'로 업데이트 |
| 124 | + else 사용자 취소 (Cancel) |
| 125 | + S->>PR: 재고 복구 (stock + n) |
| 126 | + S->>OR: 상태를 'CANCELLED'로 업데이트 |
| 127 | + end |
| 128 | + S-->>API: 성공 응답 |
| 129 | + deactivate S |
| 130 | + API-->>U: 200 OK (처리 완료) |
| 131 | + end |
| 132 | + deactivate API |
| 133 | +
|
| 134 | +``` |
0 commit comments