Hệ thống đặt sân thể thao gồm ba phần: web cho khách tự đặt sân, trang quản trị cho chủ sân và API dùng chung cho cả hai. Hệ thống giải quyết hai vấn đề lớn nhất của sân thể thao: trùng lịch và phụ thuộc vào việc nghe điện thoại để ghi lịch thủ công.
Bối cảnh bài toán
Chủ sân thể thao thường quản lý lịch bằng sổ tay hoặc tin nhắn Zalo. Ba hệ quả thường gặp:
- Trùng lịch — hai khách cùng đặt một khung giờ, một người phải về
- Mất khách ngoài giờ — khách muốn đặt lúc 22 giờ nhưng không ai nghe máy
- Không có dữ liệu — không biết khung giờ nào đông, khách nào quay lại, doanh thu theo tuần ra sao
Giải pháp đã xây dựng
| Thành phần | Chức năng chính |
|---|---|
| Web khách hàng | Xem lịch trống theo ngày và khung giờ, chọn sân, đặt và xác nhận |
| Trang quản trị | Quản lý danh sách sân, giá theo khung giờ, chặn lịch, xác nhận hoặc huỷ đặt sân |
| API dùng chung | Một nguồn dữ liệu duy nhất cho web khách và trang quản trị — không lệch dữ liệu |
| Kiểm soát trùng lịch | Chặn đặt trùng ở tầng xử lý, không chỉ ở giao diện |
| Báo cáo | Doanh thu theo ngày/tuần, tỷ lệ lấp sân theo khung giờ |
Điểm kỹ thuật đáng chú ý
- Chống trùng lịch ở tầng dữ liệu — dùng giao dịch và khoá bản ghi, nên hai người bấm đặt cùng lúc vẫn không bị trùng
- Tách API khỏi giao diện — cùng một API phục vụ web khách, trang admin và các ứng dụng mở rộng sau này
- Phân quyền theo vai trò — chủ sân, nhân viên, và khách hàng có quyền khác nhau
- Giá linh hoạt theo khung giờ — giá giờ thường, giờ cao điểm và cuối tuần cấu hình riêng
Kết quả
- Khách tự đặt được 24/7, không phụ thuộc giờ trực điện thoại
- Loại bỏ tình trạng trùng lịch nhờ kiểm soát ở tầng dữ liệu
- Chủ sân có dữ liệu để quyết định giá và giờ mở cửa
- 📌 [Bổ sung số liệu]: số sân đang vận hành · số lượt đặt mỗi tháng · tỷ lệ lấp sân trước và sau khi triển khai
Công nghệ sử dụng
ASP.NET Core (API + web) · SQL Server · giao diện web responsive cho điện thoại · phân quyền theo vai trò