Yêu Cầu Chỉnh Sửa: Tích Hợp Widget Vòng Quay Vào Trang BigFan & Đặc Tả Hạn Dùng Lượt Quay
Ngày cập nhật: 08/07/2026
Loại: UI/UX Component Integration & Spin Expiry Logic
Ảnh feedback:
1. Tích Hợp Widget Vòng Quay May Mắn Trên Trang BigFan
Hiện trạng
Trang BigFan (màn hình cộng đồng) đang chừa một khoảng trống lớn ở phần giữa màn hình (như được khoanh vùng màu cam và đánh dấu mũi tên trong ảnh feedback).
Yêu cầu chỉnh sửa
- Thiết kế và hiển thị một Box/Widget Vòng quay may mắn (Lucky Spin) để lấp đầy khoảng trống này.
- Giao diện của Widget vẫn sử dụng theo mẫu thiết kế cũ (màu sắc, banner và hình ảnh minh họa vòng quay).
- Widget cần hiển thị:
- Tổng số lượt quay khả dụng hiện tại của người dùng (Ví dụ: "Bạn đang có 2 lượt quay miễn phí!").
- Nút bấm thu hút sự chú ý (Call to Action) như: "Quay ngay" hoặc "Chơi ngay" để mở màn hình/Popup Vòng quay chi tiết.
2. Logic Hiển Thị & Bảo Lưu Lượt Quay (Popup Logic)
- Hiển thị ban đầu: Khi người dùng đăng nhập hoặc mở App lần đầu trong ngày, Popup Vòng quay may mắn sẽ tự động hiển thị (nếu tài khoản có lượt quay).
- Bảo lưu lượt quay: Nếu người dùng nhấn nút đóng (X) hoặc nút "Để sau" trên Popup ➔ Lượt quay ngày hôm đó KHÔNG bị mất đi.
- Người dùng có thể quay lại bất kỳ lúc nào bằng cách vào mục BigFan trên menu và nhấn vào Widget Vòng quay (mô tả ở mục 1) để thực hiện lượt quay, miễn là lượt quay đó chưa hết hạn.
3. Cơ Chế Quản Lý Hạn Dùng Lượt Quay (Spin Expiration Logic)
Hỏi: "Lượt quay mặc định có giới hạn trong 24h. Nếu Marketing tăng thêm ? lượt quay và đặt giới hạn trong vòng 3 ngày thì có được không?"
Trả lời: Hoàn toàn được và rất khả thi về mặt kỹ thuật.
Để triển khai nghiệp vụ này một cách linh hoạt, hệ thống Backend cần lưu trữ lượt quay dưới dạng các Vé lượt quay (Spin Tickets) có thời hạn riêng biệt thay vì chỉ lưu trữ một trường số nguyên (spinsCount) thông thường.
3.1 Phân loại lượt quay & Hạn dùng
- Lượt quay mặc định (Default Daily Spin):
- Hệ thống tự động cấp 1 lượt/ngày khi người dùng đăng nhập lần đầu trong ngày.
- Hạn dùng: 24 giờ (hoặc cấu hình tự động hết hạn vào lúc 00:00 cùng ngày). Lượt quay mặc định này không được cộng dồn tích lũy sang ngày hôm sau.
- Lượt quay bổ sung từ Marketing (Marketing Promotion Spins):
- Được cấp bởi bộ phận Marketing qua hệ thống quản trị CMS (Admin Panel) cho các mục đích: sinh nhật, sự kiện đặc biệt, đền bù lỗi, v.v.
- Hạn dùng: Cấu hình động (ví dụ: 3 ngày (72 giờ) kể từ lúc cấp, hoặc cấu hình theo khoảng ngày cố định trên CMS).
3.2 Quy tắc tiêu hao lượt quay (Consumption Priority)
- Khi người dùng nhấn nút "Quay", Backend sẽ tự động quét danh sách các vé lượt quay chưa dùng của người dùng đó và chọn vé có thời gian hết hạn gần nhất (Earliest Expiry Date) để thực hiện trừ lượt. Điều này giúp tối ưu hóa quyền lợi, tránh trường hợp người dùng bị hết hạn mất lượt quay khuyến mãi.
4. Gợi Ý Thiết Kế Dữ Liệu Backend (Database Schema)
Nên lưu trữ lượt quay trong một bảng/collection riêng biệt (ví dụ: user_spin_tickets):
{
"_id": "ObjectId('64a856fbc8a23e1234abcd56')",
"user_id": "user_id_0987654321",
"spin_type": "default | marketing",
"amount": 1,
"granted_at": "2026-07-08T11:00:00Z",
"expires_at": "2026-07-11T11:00:00Z", // 3 ngày sau khi cấp
"status": "available", // available (chưa dùng), used (đã dùng), expired (hết hạn)
"campaign_id": "sinh_nhat_vang_2026" // nếu có
}
Checklist Kỹ Thuật
- Mobile App: Thiết kế và tích hợp Widget Vòng quay may mắn vào khu vực trống ở giữa màn hình
BigFanScreen. - Mobile App: Đảm bảo logic đóng Popup Vòng quay lúc mở App không làm mất lượt quay của ngày hiện tại.
- Backend Database: Thiết kế bảng
user_spin_ticketslưu trữ thông tin thời hạn từng lượt quay. - Backend CMS Admin: Tạo giao diện cho phép Marketing cộng thêm lượt quay (
amount) và thiết lập số ngày hết hạn (expiry_days- ví dụ: 3 ngày) cho người dùng chỉ định hoặc toàn bộ người dùng. - Backend API: Xây dựng API lấy tổng số lượt quay khả dụng (
GET /api/spins/available) - chỉ đếm các vé có trạng tháiavailablevàexpires_at > NOW(). - Backend API: Xây dựng API thực hiện quay thưởng (
POST /api/spins/play) - tự động tìm véavailablecóexpires_atnhỏ nhất để cập nhật trạng thái thànhused, sau đó trả về phần thưởng theo thuật toán tỷ trọng. - Cron Job: Tạo tác vụ ngầm chạy định kỳ (ví dụ: mỗi tiếng hoặc lúc 00:00) để quét và tự động chuyển các vé quá hạn sang trạng thái
expired.