click
AddToCartButton이 bookId와 quantity를 서버 액션에 넘긴다.
Server Action은 auth() 소유권을 확인하고, 예상 가능한 실패는 직렬화 가능한 결과로 반환하며, 성공 뒤 캐시를 갱신한다.
AddToCartButton이 bookId와 quantity를 서버 액션에 넘긴다.
세션이 없으면 /login으로 보내고 문자열 userId를 서버에서 꺼낸다.
잘못된 ID·수량·재고 부족은 { success: false, message }로 반환한다.
CartItem을 만들거나 수량을 증가시킨다.
cart와 books 경로에 필요한 호출을 명시해 화면을 최신화한다.
| 동작 | 서버에서 막아야 할 것 | 화면에서 보여줄 것 |
|---|---|---|
| 장바구니 추가 | 없는 책, 재고 초과, 미로그인 | CartActionResult의 성공·실패 메시지 |
| 장바구니 조회 | Mongoose 문서와 ObjectId의 Client 직접 전달 | lean() 결과를 문자열 ID·원시 값의 CartItemDto로 변환 |
| 수량 변경 | 0 이하 수량, 다른 사용자 항목 수정 | pending 상태와 실패 결과 복구 |
| 주문 생성 | 빈 장바구니, 가격/재고 불일치 | 예상 거절은 결과, 성공은 redirect |