Lumi Cinema là website đặt vé xem phim hoàn chỉnh, xây dựng bằng Next.js 14 (App Router) cho cả frontend và backend (API Routes), cơ sở dữ liệu MySQL. Có 3 giao diện riêng cho 3 loại tài khoản: khách hàng, nhân viên và quản trị viên.
GIAO DIỆN KHÁCH HÀNG
- Trang chủ, danh sách phim (tìm kiếm, lọc thể loại, sắp xếp), chi tiết phim, trailer YouTube
- Lịch chiếu theo ngày và theo rạp, hiển thị số ghế còn trống
- Sơ đồ ghế trực quan (ghế thường, VIP, ghế đôi), trạng thái ghế tự động cập nhật
- Giữ ghế 10 phút có đếm ngược, hết giờ tự nhả ghế
- Chọn combo bắp nước, nhập mã khuyến mãi, dùng điểm thưởng, hạng thành viên
- Vé điện tử có mã QR, in vé, lịch sử vé, tự hủy vé (hoàn tiền, điều chỉnh điểm)
- Đăng ký, đăng nhập, quên/đặt lại mật khẩu, hồ sơ cá nhân, đánh giá phim
GIAO DIỆN NHÂN VIÊN
- Bán vé tại quầy bằng tiền mặt, in vé ngay, tích điểm cho thành viên
- Soát vé bằng nhập mã, máy quét hoặc camera quét QR; chặn vé đã dùng, vé đã hủy
- Tra cứu đơn, hủy và hoàn tiền cho khách
GIAO DIỆN QUẢN TRỊ VIÊN
- Dashboard doanh thu theo ngày, top phim, doanh thu theo rạp, xuất báo cáo CSV
- Quản lý phim (tải poster lên), rạp, phòng chiếu (tự sinh sơ đồ ghế), suất chiếu (chặn trùng lịch phòng, hủy suất tự hoàn tiền), combo, khuyến mãi
- Quản lý người dùng (phân quyền, khóa tài khoản), đơn đặt vé, đánh giá
KỸ THUẬT VÀ BẢO MẬT
- Mật khẩu băm bcrypt, đăng nhập bằng JWT cookie httpOnly, phân quyền ở middleware và ở từng API
- Chống đặt trùng ghế bằng UNIQUE + transaction (đã thử 25 yêu cầu đồng thời cùng một ghế: đúng 1 yêu cầu thành công)
- Giá, giảm giá và điểm đều tính lại ở server; câu lệnh SQL dùng tham số; giới hạn đăng nhập sai
- Kèm 102 kịch bản kiểm thử luồng chính, đã chạy đạt trên bản này
LƯU Ý
- Cổng thanh toán là giả lập để demo luồng, không trừ tiền thật. Muốn thu tiền thật cần tích hợp MoMo/VNPAY/Stripe (chỉ sửa một hàm, có hướng dẫn trong README)
- Chưa tích hợp gửi email; link đặt lại mật khẩu đang ở chế độ phát triển
- Dữ liệu phim mẫu là hư cấu, ảnh mẫu lấy từ picsum.photos
XEM THÊM ==> Hướng dẫn cài đặt chi tiết
HƯỚNG DẪN CÀI ĐẶT
YÊU CẦU
Node.js 18.17 trở lên, MySQL 8 (hoặc MariaDB 10.5 trở lên).
CÁC BƯỚC CÀI ĐẶT
Bước 1: Giải nén file, mở terminal tại thư mục dự án và chạy: npm install
Bước 2: Sao chép file .env.example thành .env.local, rồi sửa DB_USER và DB_PASSWORD cho đúng với MySQL trên máy bạn.
Bước 3: Tạo database và nạp dữ liệu mẫu: npm run db:init
(Muốn xóa và tạo lại từ đầu: npm run db:reset)
Bước 4: Chạy dự án: npm run dev
Mở trình duyệt vào http://localhost:3000
Bước 5: Chạy bản production: npm run build, sau đó npm start
TÀI KHOẢN ĐĂNG NHẬP
- Quản trị viên: admin@lumi.vn / Admin@123 (vào địa chỉ /admin)
- Nhân viên: staff@lumi.vn / Staff@123 (vào địa chỉ /staff)
- Khách hàng: user@lumi.vn / User@123
Đăng nhập xong hệ thống tự chuyển đúng giao diện theo vai trò. Hãy đổi mật khẩu các tài khoản mẫu trước khi triển khai thật.
GHI CHÚ
Xem file README.md trong source để biết cấu trúc thư mục và cách tích hợp cổng thanh toán thật.
Nguồn: Topcode.vn