# 東毅中 Cart Service - SDD ## A. Version | 版本 | 內容 | 日期 | 負責人 | | ---- | ------------------------------------- | ----- | ----- | | 1.0 | Tech Stack | 12/05 | Ateto | | 1.1 | Model Design | 12/08 | Ateto | | 1.2 | Arch Design | 12/10 | Ateto | | 1.3 | Test Cases | 12/12 | Ateto | | 1.4 | API Design | 12/14 | Ateto | | 2.0 | Upd `cart-04`, `cart-06` | 12/17 | Ateto | | 2.1 | Accecpt batch in `cart-04`, `cart-06` | 12/21 | Ateto | ## B. Tech Stack - Spring Boot (Java) - MySQL - Redis (Good to Have) - Kafka (Good to Have) ## C. Model ### 1. Cart - id: string - product: []Product - create_at: string - update_at: string ### 2. Product - product: string - product id - spec: map - key: size - quantity: int ## D. API ### 1. SaveCart - ID: `cart-01` - Description: 使用用戶 ID aka email 作為購物車 ID 創建購物車。 - Method: `POST` - URI: `/cart/api/cart-create` - Status Code: - `200` : OK - `400` : Bad Request - 參數錯誤 - `409` : Conflict - 購物車已存在 - Body - Request ```json { "id":"demo@gmail.com" } ``` - Response ```json { "id": "demo2@gmail.com", "products": [], "create_at": "2024-11-24T11:09:06.544936+08:00", "update_at": "2024-11-24T11:09:06.544936+08:00" } ``` ### 2. GetCart - ID: `cart-02` - Description: 使用用戶 ID aka email 作為購物車 ID 取得購物車資訊。 - Method: `POST` - URI: `/cart/api/cart-get` - Status Code: - `200`: OK - `400`: Bad Request - 參數錯誤 - `404`: Not Found - 購物車不存在 - Body - Request ```json { "id":"demo@gmail.com" } ``` - Response ```json { "id": "demo2@gmail.com", "products": [], "create_at": "2024-11-24T11:09:06.544936+08:00", "update_at": "2024-11-24T11:09:06.544936+08:00" } ``` ### 3. DeleteCart - ID: `cart-03` - Description: 使用用戶 ID aka email 作為購物車 ID 刪除購物車。 - Method: `Delete` - URI: `/cart/api/cart-del` - Status Code: - `200`: OK - `400`: Bad Request - 參數錯誤 - `404`: Not Found - 購物車不存在 - Body - Request ```json { "id":"demo@gmail.com" } ``` - Response ```json { "id": "demo2@gmail.com", "products": [], "create_at": "2024-11-24T11:09:06.544936+08:00", "update_at": "2024-11-24T11:09:06.544936+08:00" } ``` ### 4. UpdCartItem - ID: `cart-04` - Description - 使用用戶 ID aka email 作為購物車 ID 更新購物車商品。 - 如果購物車沒有該商品會自動新增。 - 如果該商品數量少於等於 0 則自動刪除。 - 欲新增數量若超出商品庫存則回報錯誤。 - 接受 batch request。 - Method: `PATCH` - URI: `/cart/api/item-upd` - Status Code - `200`: OK - `400`: Bad Request - 參數錯誤 - `404`: Not Found - 購物車不存在 - Body - Request ```json [ { "id": "demo@gmail.com", "product": "demo-product-id", "size": "L", "delta": 2, "remaining": 10 } ] ``` - Response ```json { "id": "demo@gmail.com", "products": [ { "product": "demo-product-id", "spec": { "L": 2 } } ], "create_at": "2024-11-23T15:49:17.644+08:00", "update_at": "2024-11-23T15:49:17.644+08:00" } ``` ### 5. ClearCart - ID: `cart-05` - Description: 清空購物車所有商品,用於 Place Order 後續動作。 - Method: `PATCH` - URI: `/cart/api/cart-clear` - Status Code - `200`: OK - `400`: Bad Request - `404`: Not Found - `500`: Internal Error - Body - Request ```json { "id": "demo@example.com" } ``` - Response ```json { "message": "result of clear request" } ``` ### 6. RemoveItem - ID: `cart-06` - Description: - 移除購物車單品 - 接受 batch request - Method: `PATCH` - URI: `/cart/api/item-remove` - Status Code - `200`: OK - `400`: Bad Request - `404`: Not Found - `500`: Internal Error - Body - Request ```json { "id": "demo@gmail.com", "items": [ "product-1", "product-2" ] } ``` - Response ```json { "message": "result of remove item request" } ```