update
This commit is contained in:
@@ -1,72 +1,72 @@
|
||||
# Review System
|
||||
|
||||
## Chức năng 1: ReviewPage – Trang người dùng đánh giá phòng
|
||||
## Function 1: ReviewPage – User Room Review Page
|
||||
|
||||
### Mục tiêu
|
||||
Cho phép người dùng viết đánh giá cho những phòng họ đã đặt thành công.
|
||||
### Objective
|
||||
Allow users to write reviews for rooms they have successfully booked.
|
||||
|
||||
#### Nhiệm vụ chi tiết
|
||||
#### Detailed Tasks
|
||||
1. Route: /reviews
|
||||
2. Gọi API:
|
||||
2. API Calls:
|
||||
```
|
||||
GET /api/bookings/me → Lấy danh sách phòng người dùng đã đặt.
|
||||
POST /api/reviews → Gửi đánh giá.
|
||||
GET /api/bookings/me → Get list of rooms user has booked.
|
||||
POST /api/reviews → Submit review.
|
||||
```
|
||||
3. Giao diện:
|
||||
- Hiển thị danh sách phòng đã đặt (tên, ngày ở, trạng thái)
|
||||
- Nút “Đánh giá” (hiện nếu chưa đánh giá phòng đó)
|
||||
4. Khi nhấn “Đánh giá” → mở Modal:
|
||||
- Input chọn số sao (⭐ 1–5)
|
||||
- Textarea nhập nội dung bình luận
|
||||
- Nút “Gửi đánh giá”
|
||||
5. Validate:
|
||||
- Rating bắt buộc (1–5)
|
||||
- Comment không để trống
|
||||
6. Sau khi gửi thành công → toast thông báo “Đánh giá của bạn đang chờ duyệt”.
|
||||
3. Interface:
|
||||
- Display list of booked rooms (name, stay dates, status)
|
||||
- "Review" button (shown if room not yet reviewed)
|
||||
4. When clicking "Review" → open Modal:
|
||||
- Input to select star rating (⭐ 1–5)
|
||||
- Textarea to enter comment content
|
||||
- "Submit Review" button
|
||||
5. Validation:
|
||||
- Rating required (1–5)
|
||||
- Comment cannot be empty
|
||||
6. After successful submission → toast notification "Your review is pending approval".
|
||||
|
||||
### Kết quả mong đợi
|
||||
1. Người dùng chỉ thấy nút “Đánh giá” với phòng đã từng đặt.
|
||||
2. Modal mở ra và validate chính xác.
|
||||
3. Gửi thành công → review có trạng thái "pending".
|
||||
4. Toast hiển thị thông báo hợp lý.
|
||||
5. Giao diện gọn, trực quan, không lỗi khi chưa có phòng nào đặt.
|
||||
### Expected Results
|
||||
1. Users only see "Review" button for rooms they have booked.
|
||||
2. Modal opens and validates correctly.
|
||||
3. Successful submission → review has status "pending".
|
||||
4. Toast displays appropriate notification.
|
||||
5. Clean, intuitive interface, no errors when no rooms booked.
|
||||
|
||||
---
|
||||
|
||||
## Chức năng 2: RoomDetailPage – Hiển thị danh sách đánh giá
|
||||
## Function 2: RoomDetailPage – Display Review List
|
||||
|
||||
### Mục tiêu
|
||||
Hiển thị danh sách các đánh giá đã được admin duyệt cho từng phòng.
|
||||
### Objective
|
||||
Display list of reviews that have been approved by admin for each room.
|
||||
|
||||
#### Nhiệm vụ chi tiết
|
||||
#### Detailed Tasks
|
||||
1. Route: /rooms/:id
|
||||
2. API:
|
||||
```
|
||||
GET /api/reviews?roomId={id}&status=approved
|
||||
```
|
||||
3. Hiển thị danh sách review:
|
||||
- Avatar + tên người dùng
|
||||
- Số sao (⭐)
|
||||
- Nội dung bình luận
|
||||
- Ngày đăng (createdAt)
|
||||
4. Tính và hiển thị điểm trung bình rating (VD: ⭐ 4.2 / 5)
|
||||
5. Nếu chưa có review → hiển thị: “Chưa có đánh giá nào.”
|
||||
3. Display review list:
|
||||
- Avatar + user name
|
||||
- Star rating (⭐)
|
||||
- Comment content
|
||||
- Post date (createdAt)
|
||||
4. Calculate and display average rating (e.g.: ⭐ 4.2 / 5)
|
||||
5. If no reviews → display: "No reviews yet."
|
||||
|
||||
### Kết quả mong đợi
|
||||
1. Danh sách review hiển thị đúng theo phòng.
|
||||
2. Chỉ review có status = approved được render.
|
||||
3. Tính điểm trung bình chính xác (làm tròn 1 chữ số thập phân).
|
||||
4. Hiển thị avatar, tên, sao, và ngày đầy đủ.
|
||||
5. Có thông báo “Chưa có đánh giá” khi danh sách trống.
|
||||
### Expected Results
|
||||
1. Review list displays correctly by room.
|
||||
2. Only reviews with status = approved are rendered.
|
||||
3. Calculate average rating accurately (rounded to 1 decimal place).
|
||||
4. Display avatar, name, stars, and date completely.
|
||||
5. Show "No reviews yet" message when list is empty.
|
||||
|
||||
---
|
||||
|
||||
## Chức năng 3: AdminReviewPage – Trang quản trị đánh giá
|
||||
## Function 3: AdminReviewPage – Review Management Page
|
||||
|
||||
### Mục tiêu
|
||||
Cho phép Admin xem, duyệt hoặc từ chối các đánh giá người dùng gửi lên.
|
||||
### Objective
|
||||
Allow Admin to view, approve or reject reviews submitted by users.
|
||||
|
||||
#### Nhiệm vụ chi tiết
|
||||
#### Detailed Tasks
|
||||
1. Route: /admin/reviews
|
||||
2. API:
|
||||
```
|
||||
@@ -74,67 +74,67 @@
|
||||
PATCH /api/reviews/:id/approve
|
||||
PATCH /api/reviews/:id/reject
|
||||
```
|
||||
3. Hành động:
|
||||
✅ Duyệt → review chuyển sang approved
|
||||
❌ Từ chối → review chuyển sang rejected
|
||||
4. Sau khi duyệt → cập nhật giao diện và hiển thị toast thông báo.
|
||||
5. Có filter theo trạng thái (pending, approved, rejected).
|
||||
3. Actions:
|
||||
✅ Approve → review changes to approved
|
||||
❌ Reject → review changes to rejected
|
||||
4. After approval → update interface and display toast notification.
|
||||
5. Filter by status (pending, approved, rejected).
|
||||
|
||||
### Kết quả mong đợi
|
||||
1. Admin thấy đầy đủ danh sách review.
|
||||
2. Duyệt hoặc từ chối hoạt động đúng API.
|
||||
3. Bảng tự cập nhật khi thay đổi trạng thái.
|
||||
4. Toast hiển thị rõ “Đã duyệt” hoặc “Đã từ chối”.
|
||||
5. Chỉ review approved mới hiển thị công khai cho người dùng.
|
||||
### Expected Results
|
||||
1. Admin sees complete review list.
|
||||
2. Approve or reject works correctly with API.
|
||||
3. Table automatically updates when status changes.
|
||||
4. Toast clearly displays "Approved" or "Rejected".
|
||||
5. Only approved reviews are displayed publicly to users.
|
||||
|
||||
---
|
||||
|
||||
## Chức năng 4: Bảo mật & Logic hiển thị
|
||||
## Function 4: Security & Display Logic
|
||||
|
||||
### Mục tiêu
|
||||
Đảm bảo chỉ người hợp lệ mới có thể gửi đánh giá và hệ thống hiển thị đúng dữ liệu.
|
||||
### Objective
|
||||
Ensure only valid users can submit reviews and system displays correct data.
|
||||
|
||||
#### Nhiệm vụ chi tiết
|
||||
1. Kiểm tra quyền:
|
||||
- Người dùng chưa đăng nhập → redirect /login
|
||||
- Người dùng chưa từng đặt phòng → không hiển thị nút “Đánh giá”
|
||||
2. Kiểm tra logic:
|
||||
- Mỗi người chỉ được đánh giá 1 lần / phòng
|
||||
- Review mặc định status = pending
|
||||
3. Phân quyền:
|
||||
- User: chỉ gửi review
|
||||
- Admin: duyệt / từ chối
|
||||
- Staff: chỉ xem
|
||||
#### Detailed Tasks
|
||||
1. Permission check:
|
||||
- User not logged in → redirect /login
|
||||
- User has never booked room → don't display "Review" button
|
||||
2. Logic check:
|
||||
- Each person can only review once per room
|
||||
- Review default status = pending
|
||||
3. Authorization:
|
||||
- User: can only submit review
|
||||
- Admin: approve / reject
|
||||
- Staff: view only
|
||||
|
||||
### Kết quả mong đợi
|
||||
1. Người chưa đăng nhập không thể gửi review.
|
||||
2. Mỗi phòng chỉ được review 1 lần bởi 1 user.
|
||||
3. Dữ liệu hiển thị chính xác theo phân quyền.
|
||||
4. Review chỉ xuất hiện công khai khi được duyệt.
|
||||
5. Không có lỗi logic hoặc hiển thị sai trạng thái.
|
||||
### Expected Results
|
||||
1. Users not logged in cannot submit reviews.
|
||||
2. Each room can only be reviewed once by one user.
|
||||
3. Data displays correctly according to permissions.
|
||||
4. Reviews only appear publicly when approved.
|
||||
5. No logic errors or incorrect status display.
|
||||
|
||||
---
|
||||
|
||||
## Chức năng 5: UX & Hiển thị tổng quan
|
||||
## Function 5: UX & Overall Display
|
||||
|
||||
### Mục tiêu
|
||||
Cải thiện trải nghiệm người dùng và giao diện hiển thị đánh giá.
|
||||
### Objective
|
||||
Improve user experience and review display interface.
|
||||
|
||||
#### Nhiệm vụ chi tiết
|
||||
1. Dùng component đánh giá sao trực quan (ví dụ react-rating-stars-component).
|
||||
2. Format ngày tạo bằng:
|
||||
#### Detailed Tasks
|
||||
1. Use intuitive star rating component (e.g., react-rating-stars-component).
|
||||
2. Format creation date using:
|
||||
```
|
||||
new Date(createdAt).toLocaleDateString('vi-VN')
|
||||
new Date(createdAt).toLocaleDateString('en-US')
|
||||
```
|
||||
3. Thêm hiệu ứng hover nhẹ khi hiển thị danh sách review.
|
||||
4. Dùng toast (react-hot-toast) cho thông báo gửi / duyệt / từ chối.
|
||||
5. Loading spinner khi chờ API.
|
||||
3. Add light hover effect when displaying review list.
|
||||
4. Use toast (react-hot-toast) for submit / approve / reject notifications.
|
||||
5. Loading spinner when waiting for API.
|
||||
|
||||
### Kết quả mong đợi
|
||||
1. UI mượt mà, dễ đọc và thân thiện.
|
||||
2. Loading / toast hiển thị đúng trạng thái.
|
||||
3. Ngày tháng, sao và bình luận được format đẹp.
|
||||
4. Giao diện quản trị và người dùng thống nhất phong cách.
|
||||
5. Trải nghiệm người dùng mượt, không giật lag.
|
||||
### Expected Results
|
||||
1. Smooth, readable and user-friendly UI.
|
||||
2. Loading / toast displays correct status.
|
||||
3. Dates, stars and comments are formatted nicely.
|
||||
4. Admin and user interfaces have consistent styling.
|
||||
5. Smooth user experience, no lag or stuttering.
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user