> ## Documentation Index
> Fetch the complete documentation index at: https://tomotek.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# US-OWN-13: Trang mua sắm chung

> Pet Owner tìm kiếm, xem ưu đãi và lựa chọn sản phẩm phù hợp cho thú cưng

Là một Pet Owner, tôi muốn truy cập vào trang mua sắm tập trung để tìm kiếm, xem các ưu đãi và lựa chọn sản phẩm phù hợp cho thú cưng của mình.

## Acceptance Criteria (AC)

| Feature | Acceptance Criteria | Ràng buộc & Ghi chú |
| :- | :- | :- |
| **1. Thanh Tìm kiếm & Lịch sử** | • **Tìm kiếm:** Nhập từ khoá (Tên SP, Tên Shop). • **Gợi ý (Suggest):** Tự động hiển thị dropdown gợi ý khi nhập $\ge$ 2 ký tự. • **Lịch sử:** Click vào ô tìm kiếm hiện 5 từ khoá gần nhất. | • Có nút `[x]` để xoá nhanh từng từ khoá lịch sử hoặc "Xoá tất cả". |
| **2. Bộ lọc nhanh (Quick Filter)** | • **Tab Loài:** \[Tất cả], \[Chó], \[Mèo], \[Khác]. • **Danh mục:** Dãy Icon tròn (Thức ăn, Đồ chơi, Y tế...). | • Khi click vào 1 nút, danh sách SP bên dưới lập tức refresh lại data. |
| **3. Bộ lọc chuyên sâu (Advanced)** | • **Vị trí (Near me):** Dùng GPS tính khoảng cách. Lọc theo bán kính (2km, 5km, Toàn thành phố). • **Khoảng giá:** Nhập tay giá Min - Max. • **Đánh giá:** Lọc theo số Sao ($\ge$ 4 sao). | • Nút "Áp dụng" và "Đặt lại" (Reset filter). |
| **4. Ưu đãi (Voucher Section)** | • Hiển thị danh sách Voucher nổi bật dạng Carousel cuộn ngang. • **Action:** Nút "Lưu". Nhấn xong đổi thành "Đã lưu". • Click thẻ để xem chi kiện áp dụng (Ví dụ: Đơn tối thiểu 200k). | • Các voucher hết hạn/hết lượt sẽ không hiển thị ở màn hình này. |
| **5. Danh sách Sản phẩm (Grid/List)** | • **Card SP:** Ảnh Thumbnail, Tên SP, Giá tiền, Đã bán. • **Thông tin Shop:** Hiện Tên Shop và số KM khoảng cách (VD: Pet World - 0.5km). | • Infinite Scroll: Cuộn đến cuối tự động load thêm 20 items. • Lazy load ảnh để tối ưu tốc độ. |

## Luồng ngoại lệ (Exception Flows) & Validations

* **Từ khoá tìm kiếm không có kết quả:**
  * **Flow:** Nhập từ khoá lạ hoặc kết hợp bộ lọc ngặt nghèo (VD: Thức ăn cho vẹt trong bán kính 1km).
  * **Error UI:** Hiển thị Illustration trạng thái Empty. Text: *"Không tìm thấy sản phẩm nào phù hợp. Vui lòng thử lại với từ khoá hoặc bộ lọc khác."* Kèm nút "Xoá bộ lọc".
* **Từ chối quyền GPS (Location denied):**
  * **Flow:** Người dùng chọn bộ lọc "Gần tôi" nhưng thiết bị chưa cấp quyền Vị trí cho ứng dụng.
  * **Error UI:** Bật Popup xin quyền Location của OS. Nếu user từ chối tiếp, hiển thị Toast: *"Tính năng lọc theo khoảng cách yêu cầu quyền truy cập vị trí. Đang hiển thị sản phẩm ngẫu nhiên."*

## Quy tắc nghiệp vụ (Business Rules)

1. **Rule 1: Sắp xếp mặc định (Default Sorting)**: Khi vừa vào trang, danh sách sản phẩm ưu tiên hiển thị theo thuật toán: Sản phẩm có lượt bán cao nhất + Sản phẩm của các Shop ở gần nhất (Nếu có GPS) + Sản phẩm đang chạy khuyến mãi.
2. **Rule 2: Kiểm duyệt trạng thái (Visibility)**: Chỉ hiển thị các sản phẩm có trạng thái `Active`, Tồn kho $> 0$, và Shop đăng bán phải đang ở trạng thái `Active` (Không bị khoá/Inactive).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.