Listing Parent-Child
Khái niệm
Quan hệ cha-con cho phép một listing lớn (listing cha) được chia thành nhiều listing nhỏ hơn (listing con).
Ví dụ: Căn hộ 3 phòng ngủ (cha) → Phòng ngủ 1, Phòng ngủ 2, Phòng ngủ 3 (con)
Điều này cho phép:
- Cho thuê nguyên căn hoặc từng phòng lẻ linh hoạt
- Quản lý inventory tự động
- Tối ưu doanh thu
Quy tắc
- Chỉ hỗ trợ 1 cấp (không có cha → con → cháu)
- Listing cha và con phải thuộc cùng một Team
- Listing cha và con phải có cùng vị trí
- Tổng sức chứa của các con ≤ sức chứa của cha
Logic Availability
| Hành động | Kết quả |
|---|---|
| Đặt listing cha | Block tất cả listing con |
| Đặt listing con | Chỉ block listing cha (các con khác vẫn khả dụng) |
| Hủy listing cha | Giải phóng tất cả listing con |
| Hủy listing con | Giải phóng listing cha |
Kiểm tra khả dụng:
- Listing cha: khả dụng khi tất cả listing con đều trống
- Listing con: khả dụng khi chính nó trống
API
Tạo listing con
POST /api/v1/listings
Authorization: Bearer <token>
X-Team-ID: <team_id>
{
"listing_type_category": "CHILD",
"parent_listing_id": "uuid-cua-listing-cha",
...
}
Lấy danh sách listing con
GET /api/v1/listings/{listing_id}/children
Lấy listing cha
GET /api/v1/listings/{listing_id}/parent
Validation
| Lỗi | Mô tả |
|---|---|
PARENT_LISTING_NOT_FOUND | Listing cha không tồn tại |
INVALID_PARENT_LISTING | Listing được chỉ định không phải là listing cha hợp lệ |
CAPACITY_EXCEEDED | Tổng sức chứa con vượt quá cha |
CHILD_LISTING_HAS_BOOKINGS | Không thể thay đổi quan hệ khi đã có booking |
INDIVIDUAL_RENTAL_NOT_ALLOWED | Listing cha không cho phép đặt phòng lẻ |
UI/UX
- Khi tạo listing: chọn loại INDEPENDENT / PARENT / CHILD ở bước đầu tiên
- Trang chi tiết listing cha: hiển thị danh sách các phòng con
- Trang chi tiết listing con: hiển thị badge "Listing Con" và link đến listing cha