1. Trang chủ
  2. » Luận Văn - Báo Cáo

Badcourt - Hệ Thống Quản Lý Sân Cầu Lông.docx

199 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Badcourt - Hệ Thống Quản Lý Sân Cầu Lông
Tác giả Đỗ Minh Nhật, Mai Hoàng Nhật Duy
Người hướng dẫn ThS. Trần Anh Dũng
Trường học Trường Đại Học Công Nghệ Thông Tin - Đại Học Quốc Gia TP. Hồ Chí Minh
Chuyên ngành Công nghệ Thông Tin
Thể loại Đồ Án
Năm xuất bản 2024
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 199
Dung lượng 7,14 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • CHƯƠNG 1. GIỚI THIỆU CHUNG (20)
    • 1.1. ĐẶT VẤN ĐỀ (20)
    • 1.2. LÝ DO CHỌN ĐỀ TÀI (20)
      • 1.3.1. Tình trạng các ứng dụng đặt sân thể thao hiện nay (21)
      • 1.3.2. Chức năng tìm kiếm sân trên bản đồ và khu vực lân cận (21)
      • 1.3.3. Chức năng thanh toán trong ứng dụng (21)
    • 1.4. MỤC TIÊU ĐỀ TÀI (22)
    • 1.5. ĐỐI TƯỢNG NGHIÊN CỨU (22)
    • 1.6. PHẠM VI NGHIÊN CỨU (23)
    • 1.7. PHƯƠNG PHÁP THỰC HIỆN (23)
  • CHƯƠNG 2. CƠ SỞ LÝ THUYẾT (25)
    • 2.1. CƠ SỞ LÝ THUYẾT (25)
      • 2.1.1. Mobile Cross-Platform (25)
      • 2.1.2. NoSQL database (27)
      • 2.1.3. RESTful API (29)
      • 2.1.4. Real-time (30)
    • 2.2. ÁP DỤNG (33)
      • 2.2.1. Flutter (33)
      • 2.2.2. Node.js (34)
      • 2.2.3. MongoDB (36)
        • 2.2.3.1. Ưu điểm của MongoDB (37)
        • 2.2.3.2. Ứng dụng của MongoDB (38)
      • 2.2.4. Vietmap API (38)
      • 2.2.5. Google Credentials (39)
      • 2.2.6. WebSocket (39)
      • 2.2.7. Repository Pattern (41)
      • 2.2.8. Các package hỗ trợ (Cloudinary, firebase, (0)
  • CHƯƠNG 3. XÂY DỰNG HỆ THỐNG (42)
    • 3.1. PHÂN TÍCH YÊU CẦU (42)
      • 3.1.1. Yêu cầu chức năng (42)
      • 3.1.2. Yêu cầu phi chức năng (43)
    • 3.2. THIẾT KẾ HỆ THỐNG (44)
      • 3.2.1. Sơ đồ use case tổng quát (44)
        • 3.2.1.1. Danh sách các actor (44)
        • 3.2.1.2. Sơ đồ use case tổng quát (45)
      • 3.2.2. Danh sách các use-case (45)
      • 3.2.3. Sơ đồ use-case chi tiết (48)
        • 3.2.3.1. Đăng nhập (48)
        • 3.2.3.2. Đăng ký (50)
        • 3.2.3.3. Quên mật khẩu (53)
        • 3.2.3.4. Đăng nhập với Google (57)
        • 3.2.3.5. Đăng xuất (60)
        • 3.2.3.6. Tìm sân cầu lông (62)
        • 3.2.3.7. Đặt sân (69)
        • 3.2.3.8. Hủy sân (73)
        • 3.2.3.9. Đánh giá (76)
        • 3.2.3.10. Đổi thông tin cá nhân (79)
        • 3.2.3.11. Nhắn tin (82)
        • 3.2.3.12. Đăng ký cơ sở mới (85)
        • 3.2.3.13. Quản lý số lượng sân (88)
        • 3.2.3.14. Quản lý thời gian sử dụng sân (97)
        • 3.2.3.15. Xem thông tin đặt sân (100)
        • 3.2.3.16. Báo cáo thống kê (103)
        • 3.2.3.17. Xác nhận đăng ký sân (106)
        • 3.2.3.18. Thống kê doanh thu ứng dụng (109)
        • 3.2.3.19. Quản lý chủ sân (112)
        • 3.2.3.20. Quản lý bài đăng (115)
        • 3.2.3.21. Bình luận bài đăng (124)
    • 3.3. THIẾT KẾ CƠ SỞ DỮ LIỆU (128)
      • 3.3.1. Thiết kế dữ liệu (128)
      • 3.3.2. Danh sách các bảng (128)
      • 3.3.3. Mô tả từng bảng (130)
        • 3.3.3.1. Bảng User (130)
        • 3.3.3.2. Bảng Facility (131)
        • 3.3.3.3. Bảng Court (132)
        • 3.3.3.4. Bảng Order (133)
        • 3.3.3.5. Bảng Post (134)
        • 3.3.3.6. Bảng Comment (134)
        • 3.3.3.7. Bảng MessageRoom (135)
        • 3.3.3.8. Bảng Message (136)
        • 3.3.3.9. Bảng Resource (137)
        • 3.3.3.10. Bảng UserResource (137)
        • 3.3.3.11. Bảng FacilityResource (138)
        • 3.3.3.13. Bảng PostResource (139)
        • 3.3.3.14. Bảng CommentResource (139)
        • 3.3.3.15. Bảng MessageResource (140)
        • 3.3.3.16. Bảng TimePeriod (140)
        • 3.3.3.17. Bảng FacilityActive (140)
        • 3.3.3.18. Bảng ManagerInfo (141)
        • 3.3.3.19. Bảng UserMessageRoom (142)
        • 3.3.3.20. Bảng FacilityLike (142)
        • 3.3.3.21. Bảng PostLike (142)
        • 3.3.3.22. Bảng CommentLike (143)
  • CHƯƠNG 4. KẾT QUẢ (144)
    • 4.1. DANH SÁCH GIAO DIỆN (144)
    • 4.2. MÔ TẢ TƯNG GIAO DIỆN (146)
      • 4.2.1. Giao diện Intro (146)
      • 4.2.2. Giao diện đăng nhập (147)
      • 4.2.3. Giao diện đăng ký (149)
      • 4.2.4. Giao diện quên mật khẩu (151)
      • 4.2.5. Giao diện màn hình chính (153)
      • 4.2.6. Giao diện tìm kiếm (155)
      • 4.2.7. Giao diện tìm kiếm bằng bản đồ (157)
      • 4.2.8. Giao diện chi tiết cơ sở (159)
      • 4.2.9. Giao diện tiến hành đặt sân (160)
      • 4.2.10. Giao diện thanh toán (162)
      • 4.2.11. Giao diện tài khoản (163)
      • 4.2.12. Giao diện yêu thích (165)
      • 4.2.13. Giao diện chi tiết booking (167)
      • 4.2.14. Giao diện tin nhắn (169)
      • 4.2.15. Giao diện intro của manager (170)
      • 4.2.16. Giao diện thêm cơ sở mới (172)
      • 4.2.17. Giao diện màn hình chính của người quản lý (174)
      • 4.2.18. Giao diện màn hình quản lý thời gian sân chơi (176)
      • 4.2.19. Giao diện màn hình thêm sân tập mới (177)
      • 4.2.20. Giao diện quản lý đơn đặt sân (179)
      • 4.2.21. Giao diện account của người quản lý (181)
      • 4.2.22. Giao diện thống kê của người quản lý (183)
      • 4.2.23. Giao diện màn hình chính của admin (185)
      • 4.2.24. Giao diện xác nhận đăng ký của admin (187)
      • 4.2.25. Giao diện chi tiết xác nhận đăng ký của admin (189)
      • 4.2.26. Giao diện quản lý chủ sở hữu sân (191)
      • 4.2.27. Giao diện danh sách bài đăng (193)
  • CHƯƠNG 5. TỔNG KẾT (196)
    • 5.1. KẾT QUẢ ĐẠT ĐƯỢC (196)
      • 5.1.1. Về mặt nghiên cứu (196)
      • 5.1.2. Về mặt sản phẩm (196)
        • 5.1.2.1. Đối với ứng dụng (196)
        • 5.1.2.2. Đối với người dùng (196)
    • 5.2. ƯU ĐIỂM VÀ NHƯỢC ĐIỂM (197)
      • 5.2.1. Ưu điểm (197)
      • 5.2.2. Nhược điểm (197)
    • 5.3. THUẬN LỢI VÀ KHÓ KHĂN (197)
      • 5.3.1. Thuận lợi (197)
      • 5.3.2. Khó khăn (198)
    • 5.4. KẾT LUẬN (198)
    • 5.5. HƯỚNG PHÁT TRIỂN (198)

Nội dung

❖ Giúp doanh nghiệp quản lý sân cầu lông một cách hiệu quá nhờ việc lưuthông tin đặt sân của người chơi Ý nghĩa đối với người dùng: ❖ Giúp người dùng dễ dàng tìm kiếm và tiếp cận sân tro

GIỚI THIỆU CHUNG

ĐẶT VẤN ĐỀ

Cầu lông là môn thể thao phổ biến tại nhiều quốc gia, trong đó có Việt Nam Với đặc điểm dễ chơi, phù hợp với mọi lứa tuổi và không yêu cầu nhiều trang thiết bị đắt tiền, cầu lông thu hút đông đảo người tham gia từ học sinh, sinh viên đến người lao động và người cao tuổi Các sân cầu lông thường được xây dựng tại các khu thể thao, trung tâm văn hóa, trường học và khu dân cư để phục vụ nhu cầu tập luyện của cộng đồng.

Việc tìm kiếm và đặt chỗ sân cầu lông vẫn gặp nhiều khó khăn do thiếu thông tin về địa điểm, thời gian hoạt động, tình trạng sân và mức giá Quy trình đặt sân thường phải trải qua nhiều bước thủ công như gọi điện, đến trực tiếp để đặt chỗ, thanh toán bằng tiền mặt, gây bất tiện cho người chơi Điều này khiến việc đặt sân trở nên không hiệu quả và không thuận tiện cho cả người chơi lẫn chủ sân.

LÝ DO CHỌN ĐỀ TÀI

Ứng dụng cho thuê sân cầu lông không chỉ đáp ứng nhu cầu tìm kiếm và đặt sân mà còn cung cấp một nền tảng trực tuyến giúp người dùng dễ dàng tìm kiếm, đặt chỗ và thanh toán một cách tiện lợi và nhanh chóng Với sự ra đời của ứng dụng, các đối tượng chính là người chơi cầu lông và chủ sân đã được kết nối dễ dàng hơn, giúp giảm thiểu những khó khăn trong việc tìm kiếm sân phù hợp và cách thức đặt chỗ truyền thống Người chơi cầu lông, dù đã quen thuộc với thể thao hàng ngày, vẫn gặp khó khăn trong việc tìm kiếm sân phù hợp, trong khi các chủ sân lại đối mặt với các thách thức về quản lý khung giờ và thu hút người chơi hiệu quả hơn.

Chúng tôi đã phát triển một ứng dụng cho thuê sân cầu lông để giải quyết các khó khăn và đáp ứng nhu cầu ngày càng tăng của người chơi và chủ sân Ứng dụng giúp người dùng tiết kiệm thời gian và công sức trong việc tìm kiếm, đặt sân, đồng thời hỗ trợ chủ sân quản lý hiệu quả, tăng doanh thu và nâng cao chất lượng dịch vụ Việc ứng dụng công nghệ vào quản lý sân cầu lông không chỉ mang lại lợi ích kinh tế mà còn thúc đẩy phong trào thể thao, cải thiện sức khỏe cộng đồng và tạo môi trường giao lưu, kết nối cho các cộng đồng yêu thích môn thể thao này.

1.3 TÍNH NĂNG MỚI / KHÁC BIỆT

Sau khi tham khảo 1 số nền tảng booking, đặt và cho thuê, nhóm nhận thấy có các vấn đề như sau:

1.3.1 Tình trạng các ứng dụng đặt sân thể thao hiện nay:

Hiện nay, các ứng dụng đặt sân thể thao, đặc biệt là sân cầu lông, gặp khó khăn trong việc tiếp cận người dùng khi không thể xuất hiện trên các cửa hàng ứng dụng như Google Play (CH Play), gây khó khăn cho người chơi trong việc tìm kiếm và đặt sân trực tuyến Các chủ sân cũng đối mặt với thách thức trong việc tiếp cận và thu hút khách hàng qua các kênh kỹ thuật số, làm giảm tính tiện lợi và hiệu quả của dịch vụ đặt sân Tình trạng này còn hạn chế tiềm năng phát triển của các dịch vụ thể thao trực tuyến, ảnh hưởng đến sự phát triển bền vững của ngành thể thao điện tử.

1.3.2 Chức năng tìm kiếm sân trên bản đồ và khu vực lân cận:

Chức năng tìm kiếm sân trên bản đồ và khu vực lân cận giúp người dùng dễ dàng xác định vị trí các sân cầu lông gần họ Người dùng có thể xem thông tin chi tiết như địa chỉ, giờ hoạt động và giá thuê, đồng thời lọc kết quả theo tiêu chí về giá, khoảng cách và đánh giá từ cộng đồng Ngoài ra, tính năng định vị GPS cho phép tìm kiếm các sân cầu lông gần một địa điểm cụ thể hoặc vị trí hiện tại, giúp tìm đường đi một cách dễ dàng và nhanh chóng.

1.3.3 Chức năng thanh toán trong ứng dụng:

Chức năng thanh toán trong ứng dụng cho thuê sân cầu lông hỗ trợ thanh toán trực tuyến nhanh chóng và tiện lợi, với đa dạng phương thức như thẻ tín dụng, ví điện tử và chuyển khoản ngân hàng Tất cả thông tin giao dịch được bảo mật nghiêm ngặt để đảm bảo an toàn cho người dùng Sau khi hoàn tất quá trình thanh toán, người dùng sẽ nhận được xác nhận giao dịch rõ ràng, nâng cao trải nghiệm trải nghiệm thuê sân cầu lông trực tuyến.

MỤC TIÊU ĐỀ TÀI

Mục tiêu của đề tài là nghiên cứu và phát triển hệ thống tạo và đặt sân thể thao thông qua dịch vụ đặt chỗ trực tuyến, tối ưu hóa trải nghiệm người dùng Đồng thời, đề tài tập trung vào nghiên cứu các công nghệ thanh toán hiện đại và tích hợp API Map để cung cấp hệ thống đặt sân thể thao tiện lợi, an toàn và dễ dàng sử dụng Việc tích hợp các công nghệ này nhằm nâng cao chất lượng dịch vụ, đáp ứng nhu cầu đặt sân nhanh chóng và thuận tiện cho người dùng.

❖ Nghiên cứu Hệ Thống Booking Sân Thể Thao:

➢ Phân tích các yêu cầu và tính năng cần thiết của hệ thống booking sân thể thao.

➢ Thiết kế và phát triển giao diện người dùng thân thiện, dễ sử dụng cho việc tạo và đặt sân.

➢ Xây dựng hệ thống quản lý đặt sân linh hoạt và hiệu quả, bao gồm quản lý sân, quản lý lịch đặt, và quản lý thanh toán.

❖ Nghiên cứu Công Nghệ Thanh Toán:

➢ Tìm hiểu về các công nghệ thanh toán trực tuyến hiện đại và phổ biến như ví điện tử, thẻ tín dụng, chuyển khoản ngân hàng.

➢ Phát triển tích hợp các phương thức thanh toán an toàn và tiện lợi trong hệ thống booking sân.

➢ Nghiên cứu và tích hợp API Map vào hệ thống để cung cấp tính năng tìm kiếm và định vị sân thể thao trên bản đồ.

➢ Tối ưu hóa việc hiển thị thông tin vị trí và chỉ đường đến sân thể thao từ vị trí người dùng.

ĐỐI TƯỢNG NGHIÊN CỨU

❖ Các công nghệ xây dựng ứng dụng điện thoại:

❖ Công nghệ thanh toán trực tuyến.

❖ Công nghệ xác thực và phân quyền bằng google, facebook,

❖ Công nghệ cập nhật thời gian thực.

PHẠM VI NGHIÊN CỨU

Ứng dụng hệ thống quản lý sân cầu lông BadCourt được xây dụng với:

❖ Tìm hiểu về các thuật toán công nghệ trong nghiệp vụ thanh toán và ứng dụng vào việc thanh toán trực tuyến trong ứng dụng.

❖ Tìm hiểu về oauth2 để hỗ trợ đăng nhập bằng google trong ứng dụng.

❖ Tìm hiểu về các công nghệ khác.

PHƯƠNG PHÁP THỰC HIỆN

➢ Làm việc nhóm 1 thành viên thông qua cả 2 phương thức online và offline dưới sự hướng dẫn của giảng viên hướng dẫn.

➢ Phương pháp đọc tài liệu.

➢ Phương pháp phân tích các ứng dụng quản lý sân cầu liên quan và các ứng dụng quản lý tương tự.

➢ Tìm hiểu Google Pay API

➢ Xây dựng ứng dụng mobile và ứng dụng hỗ trợ tương tác giữa người dùng và hệ thống.

CƠ SỞ LÝ THUYẾT

CƠ SỞ LÝ THUYẾT

Mobile cross-platform là phương pháp phát triển ứng dụng di động cho phép lập trình viên xây dựng các ứng dụng có thể hoạt động trên nhiều nền tảng khác nhau từ một mã nguồn duy nhất, giúp tiết kiệm thời gian và chi phí phát triển Các công nghệ cross-platform như Flutter, React Native, Xamarin và Ionic đã trở thành sự lựa chọn phổ biến nhờ khả năng tối ưu hóa quy trình phát triển và giảm thiểu chi phí Việc sử dụng công nghệ cross-platform giúp doanh nghiệp nhanh chóng đưa sản phẩm ra thị trường và dễ dàng bảo trì, nâng cấp ứng dụng trên nhiều nền tảng cùng lúc.

Hình 2.1 Hình ảnh minh họa Mobile Cross-Platform

Flutter là một framework do Google phát triển, thể hiện thành công rõ ràng của công nghệ mobile cross-platform Với việc sử dụng ngôn ngữ Dart, Flutter mang lại phương pháp đơn giản và hiệu quả để xây dựng giao diện người dùng đẹp mắt, hoạt động mượt mà trên cả iOS và Android Các widget tùy biến phong phú và bộ công cụ phát triển mạnh mẽ của Flutter giúp tăng tốc quá trình xây dựng ứng dụng, góp phần thúc đẩy sự phát triển và tối ưu hóa trải nghiệm người dùng.

Mobile cross-platform giúp tiết kiệm thời gian và chi phí phát triển ứng dụng bằng cách cho phép các nhà phát triển viết mã một lần và sử dụng lại cho cả iOS và Android Điều này giảm bớt công sức phát triển, đẩy nhanh tiến độ ra mắt sản phẩm và giảm sự phụ thuộc vào nguồn nhân lực nhiều nền tảng.

Mobile cross-platform đối mặt với nhiều thách thức, trong đó hiệu suất ứng dụng thường bị ảnh hưởng do phải chạy qua lớp trừu tượng hoặc môi trường trung gian Hạn chế này có thể khiến hiệu suất không đạt mức của các ứng dụng native truyền thống Bên cạnh đó, việc hỗ trợ các tính năng đặc thù của từng nền tảng cũng gặp khó khăn, đòi hỏi sự tối ưu hóa kỹ thuật và tinh chỉnh cẩn thận để đảm bảo hoạt động trơn tru.

Mobile cross-platform là xu hướng phát triển tiềm năng với nhiều lợi ích rõ ràng như tiết kiệm thời gian và chi phí phát triển ứng dụng Các tiến bộ công nghệ và sự phát triển của các framework đã nâng cao khả năng triển khai các ứng dụng đa nền tảng hiệu quả hơn Triển vọng của mobile cross-platform dự kiến sẽ tiếp tục cải thiện, mở ra nhiều cơ hội mới cho ngành công nghiệp phát triển ứng dụng di động.

Hình 2.2 Hình ảnh minh họa Cơ sở dữ liệu NoSQL

Cơ sở dữ liệu NoSQL (Not Only SQL) là một hướng tiếp cận mới trong lưu trữ và xử lý dữ liệu, được phát triển để khắc phục các hạn chế của hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) Trong khi RDBMS tập trung vào cấu trúc dữ liệu chuẩn hóa và sử dụng SQL là ngôn ngữ truy vấn chính, NoSQL hướng đến sự linh hoạt và khả năng thích ứng nhanh với các yêu cầu của các ứng dụng hiện đại.

NoSQL được phân loại vào các loại cơ bản sau:

Cơ sở dữ liệu cột (Column-family stores) là loại hệ thống lưu trữ dữ liệu theo dạng cột thay vì hàng như trong hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) Phù hợp cho các ứng dụng đòi hỏi xử lý đọc và ghi dữ liệu lớn với tốc độ cao, đặc biệt trong các hệ thống phân tích dữ liệu và xử lý dữ liệu theo thời gian thực.

❖ Cơ sở dữ liệu tài liệu (Document databases): Lưu trữ dữ liệu dưới dạng tài liệu, ví dụ như JSON hoặc XML Điều này cho phép dữ liệu được lưu trữ dưới dạng cấu trúc không đều, linh hoạt và dễ dàng mở rộng.

Cơ sở dữ liệu đồ thị (Graph databases) chuyên tập trung vào mối quan hệ giữa các đối tượng dữ liệu, mang lại hiệu quả trong việc phân tích mạng lưới phức tạp Đây là lựa chọn lý tưởng cho các ứng dụng như mạng xã hội và hệ thống liên kết các thực thể, giúp xử lý các dữ liệu liên kết một cách linh hoạt và hiệu quả.

Cơ sở dữ liệu khoá-giá trị (Key-value stores) là loại hệ thống lưu trữ dữ liệu dưới dạng các cặp khoá-giá trị, giúp đơn giản hóa quá trình truy vấn và tối ưu hiệu suất truy xuất dữ liệu nhanh chóng Ưu điểm của NoSQL gồm khả năng mở rộng linh hoạt, xử lý lượng dữ liệu lớn và khả năng thích ứng với các loại dữ liệu phi cấu trúc Tuy nhiên, nhược điểm của hệ thống này là thiếu khả năng hỗ trợ các truy vấn phức tạp, hạn chế trong việc thực hiện các thao tác liên quan đến mối quan hệ dữ liệu và ít phù hợp cho các ứng dụng yêu cầu tính toàn vẹn dữ liệu cao.

➢ Tính mở rộng dễ dàng: NoSQL thường hỗ trợ mô hình mở rộng ngang (horizontal scaling), giúp dễ dàng mở rộng hệ thống khi có nhu cầu.

➢ Hiệu suất cao: Phù hợp với các ứng dụng đòi hỏi xử lý dữ liệu nhanh với lượng dữ liệu lớn.

➢ Linh hoạt và đa dạng: Các loại cơ sở dữ liệu NoSQL cung cấp sự linh hoạt cao cho các mô hình dữ liệu khác nhau.

NoSQL còn gặp hạn chế trong khả năng thực hiện các truy vấn phức tạp hoặc liên quan đến nhiều bảng và khóa ngoại, điều này khác biệt so với RDBMS sử dụng SQL linh hoạt hơn trong xử lý các truy vấn phức tạp.

➢ Thiếu tính nhất quán (consistency): Một số loại NoSQL có thể chấp nhận mức độ nhất quán (consistency) thấp hơn để đổi lấy hiệu suất cao hơn.

NoSQL đã trở thành lựa chọn hàng đầu cho các ứng dụng web quy mô lớn, hệ thống phân tán và các ứng dụng đòi hỏi tính linh hoạt cao Nhờ vào sự phát triển của công nghệ và các công cụ hỗ trợ, NoSQL không ngừng mở rộng và cung cấp các giải pháp lưu trữ, quản lý dữ liệu đa dạng, phù hợp với xu hướng công nghệ trong tương lai.

Hình 2.3 Hình ảnh minh hoạt RESTful API

RESTful API (Representational State Transfer) là một kiến trúc phần mềm cho phép các hệ thống giao tiếp qua mạng máy tính, giúp kết nối dữ liệu một cách hiệu quả và linh hoạt Được phát triển bởi Roy Fielding vào năm 2000, RESTful API đã nhanh chóng trở thành tiêu chuẩn phổ biến trong thiết kế và triển khai các dịch vụ web hiện đại Nhờ vào khả năng mở rộng và dễ sử dụng, RESTful API đóng vai trò quan trọng trong phát triển phần mềm và tích hợp hệ thống ngày nay.

RESTful API dựa trên một số nguyên lý chính sau:

Trong RESTful API, giao tiếp chủ yếu dựa trên các tài nguyên, nơi mọi thứ đều được xem như một tài nguyên có thể truy cập qua một địa chỉ duy nhất (URI) Mỗi tài nguyên, chẳng hạn như User, Order, hoặc Product, đều có một URI riêng biệt giúp đơn giản hoá quá trình truy xuất và thao tác dữ liệu Việc sử dụng các URI này đảm bảo tính nhất quán và dễ dàng mở rộng hệ thống, hỗ trợ hiệu quả trong việc xây dựng API theo chuẩn REST.

RESTful API cho phép truy cập và thao tác dữ liệu thông qua các phương thức HTTP tiêu chuẩn như GET để lấy dữ liệu, POST để tạo mới tài nguyên, PUT để cập nhật thông tin, và DELETE để xóa dữ liệu, giúp đảm bảo tính thống nhất và hiệu quả trong quản lý tài nguyên trên hệ thống mạng.

ÁP DỤNG

Flutter là một framework mã nguồn mở của Google, nổi bật với khả năng xây dựng ứng dụng di động nhanh chóng và dễ dàng trên nhiều nền tảng khác nhau Nhờ vào Flutter, lập trình viên có thể phát triển giao diện người dùng linh hoạt, tối ưu về mặt hiệu suất và tốc độ phát triển Đây là giải pháp lý tưởng để tạo các ứng dụng di động đa nền tảng, đáp ứng nhanh chóng các nhu cầu của thị trường công nghệ hiện đại.

Hình 2.4 Hình ảnh minh họa Framework Flutter

❖ Single Codebase: Flutter sử dụng một mã nguồn duy nhất để phát triển cho cả iOS và Android, giúp giảm thời gian và chi phí phát triển.

Flutter sử dụng các widget để xây dựng giao diện người dùng, giúp tạo ra các ứng dụng phức tạp và đa dạng một cách linh hoạt Các widget có thể kết hợp với nhau một cách dễ dàng để phát triển các ứng dụng đa chức năng, tối ưu hóa trải nghiệm người dùng và nâng cao hiệu suất ứng dụng Việc sử dụng widget trong Flutter là yếu tố cốt lõi để xây dựng các giao diện đẹp mắt, tùy biến cao và phù hợp với nhiều nền tảng khác nhau.

❖ High Performance: Nhờ vào việc sử dụng Dart và sự tối ưu hóa của FlutterEngine, ứng dụng Flutter có thể đạt được hiệu suất cao và thời gian đáp ứng nhanh.

Hot Reload là tính năng giúp lập trình viên dễ dàng thay đổi mã nguồn và ngay lập tức xem kết quả trên ứng dụng mà không cần phải khởi động lại, giúp tăng hiệu quả phát triển và tiết kiệm thời gian.

Flutter có một cộng đồng lớn và năng động, cung cấp tài liệu phong phú giúp các lập trình viên dễ dàng hơn trong quá trình phát triển ứng dụng Nhờ sự hỗ trợ mạnh mẽ từ Google cùng các công cụ và tài nguyên từ cộng đồng, Flutter trở thành nền tảng phát triển ứng dụng di động phổ biến và đáng tin cậy.

Flutter được sử dụng rộng rãi trong nhiều lĩnh vực, bao gồm:

❖ Ứng dụng di động: Xây dựng các ứng dụng di động cho cả iOS và Android.

❖ Ứng dụng web: Flutter cũng hỗ trợ việc phát triển ứng dụng web thông qua Flutter for Web.

Flutter là nền tảng phù hợp cho các ứng dụng nội dung đa phương tiện nhờ khả năng đồng bộ hóa cao và tùy chỉnh linh hoạt Sử dụng Flutter, các nhà phát triển có thể xây dựng các ứng dụng video, âm nhạc và nhiều nội dung đa phương tiện khác một cách dễ dàng và hiệu quả Tính năng đồng bộ tốt giúp đảm bảo trải nghiệm người dùng mượt mà, còn khả năng tùy chỉnh cho phép thích ứng với nhiều yêu cầu cụ thể của từng loại nội dung Do đó, Flutter là lựa chọn hàng đầu cho các dự án ứng dụng nội dung đa phương tiện hiện đại và đa dạng.

Flutter đang ngày càng trở thành một trong những công cụ phát triển ứng dụng di động phổ biến nhất hiện nay Nhờ vào sự phát triển liên tục và các cải tiến từ cộng đồng lập trình viên cùng Google, Flutter mở ra nhiều cơ hội mới cho ngành công nghiệp phát triển phần mềm trong tương lai.

Node.js là môi trường chạy JavaScript trên server được xây dựng dựa trên engine V8 của Google Chrome, giúp phát triển các ứng dụng web hiệu quả Ra mắt lần đầu vào năm 2009 bởi Ryan Dahl, Node.js nhanh chóng trở thành nền tảng phổ biến cho phát triển ứng dụng server-side Đây mang lại một cách tiếp cận mới mẻ, tối ưu và dễ mở rộng trong việc xây dựng các ứng dụng mạng hiệu suất cao.

Hình 2.5 Hình ảnh minh hoạ Node.js

2.2.2.1 Kiến trúc và Đặc điểm

Node.js được xây dựng dựa trên mô hình sự kiện không đồng bộ (asynchronous event-driven) và non-blocking I/O, giúp xử lý các yêu cầu một cách hiệu quả mà không gây chặn các hoạt động khác Nhờ đó, Node.js cải thiện đáng kể hiệu suất và khả năng mở rộng của ứng dụng, phù hợp cho các dự án cần xử lý lượng lớn truy cập đồng thời Việc sử dụng mô hình này làm cho Node.js trở thành nền tảng phù hợp để phát triển các ứng dụng web thời gian thực và hệ thống có yêu cầu xử lý nhanh, linh hoạt.

Node.js nổi bật với mô hình single-threaded kết hợp cùng event loop, giúp xử lý các yêu cầu đồng thời một cách hiệu quả Khác với các nền tảng khác sử dụng nhiều thread, Node.js chỉ sử dụng một thread duy nhất để giảm thiểu overhead và tối ưu hoá hiệu suất hoạt động Nhờ đó, Node.js có khả năng xử lý nhiều yêu cầu cùng lúc mà vẫn duy trì hiệu suất cao.

Node.js sử dụng non-blocking I/O, nghĩa là các hoạt động nhập/xuất không làm chặn luồng chính của ứng dụng Điều này cho phép Node.js xử lý nhiều yêu cầu đồng thời một cách hiệu quả, đặc biệt là trong các ứng dụng yêu cầu nhiều tác vụ I/O như xử lý file, kết nối cơ sở dữ liệu và giao tiếp mạng.

2.2.2.2 Ưu điểm của Node.js

Node.js hoạt động dựa trên mô hình non-blocking I/O và event-driven, cho phép xử lý lượng lớn yêu cầu cùng lúc mà không cần tạo nhiều thread như các nền tảng truyền thống Nhờ đó, Node.js cung cấp hiệu suất cao, tối ưu hóa việc sử dụng tài nguyên hệ thống, giảm thiểu tải cho máy chủ và nâng cao trải nghiệm người dùng.

Node.js cho phép các nhà phát triển sử dụng JavaScript cho cả frontend và backend, giúp đồng nhất mã nguồn và nâng cao hiệu quả quản lý dự án Đây là lợi thế lớn trong việc tiết kiệm thời gian và công sức, đặc biệt khi không cần phải học nhiều ngôn ngữ lập trình khác nhau.

Node.js có một hệ sinh thái phong phú với hàng nghìn gói thư viện được quản lý thông qua npm (Node Package Manager), giúp giảm thiểu công sức phát triển Các thư viện này cho phép các nhà phát triển tập trung vào việc xây dựng các tính năng quan trọng, nâng cao hiệu quả và tốc độ phát triển ứng dụng Node.js.

2.2.2.3 Ứng dụng của Node.js

Node.js được sử dụng rộng rãi trong nhiều loại ứng dụng, từ các ứng dụng web đơn giản đến các hệ thống phức tạp và phân tán.

❖ Web Servers: Node.js thường được sử dụng để xây dựng các web server vì khả năng xử lý nhiều kết nối đồng thời và hiệu suất cao Các framework như Express.js làm cho việc phát triển các ứng dụng web với Node.js trở nên dễ dàng và nhanh chóng.

XÂY DỰNG HỆ THỐNG

PHÂN TÍCH YÊU CẦU

Xây dựng ứng dụng trên nền tảng di động với các chức năng:

➢ Đăng nhập (Bằng email, Google).

➢ Quên mật khẩu: Xác thực tài khoản bằng cách gửi mã xác nhận về email hoặc số điện thoại.

➢ Có ba phân quyền chính là người chơi, người quản lý(chủ doanh nghiệp) và admin.

➢ Xác nhận đăng ký sân của người quản lý

➢ Nhận và thay đổi phí trung gian của người quản lý

➢ Hỗ trợ người quản lý trong việc sử dụng ứng dụng

➢ Thống kê doanh thu và lợi nhuận

❖ Đối với người quản lý:

Đăng ký sân cầu yêu cầu hệ thống cung cấp đầy đủ thông tin cá nhân và địa điểm kinh doanh, bao gồm họ tên, quê quán, liên lạc qua email, số điện thoại và Facebook Ngoài ra, cần cung cấp địa chỉ sân cầu lông chính xác, sử dụng Google Map API để xác thực, số lượng sân, mã sân, tình trạng sân (trong hay ngoài sân), số lượng đèn chiếu sáng, mức giá theo giờ, giờ mở cửa và đóng cửa của sân Hệ thống cũng yêu cầu tải lên giấy phép kinh doanh của sân cùng các hình ảnh minh họa phù hợp để đảm bảo tính hợp lệ và đầy đủ của hồ sơ đăng ký.

➢ Cập nhật tình trạng của các sân: Đang sửa chữa, đang hỏng,

➢ Quản lý số sân và thời gian chơi mỗi sân

➢ Quản lý doanh thu của sân

➢ Hoàn tiền cho khách yêu cầu trả sân.

➢ Đăng bài để tương tác với người chơi

➢ Tìm kiếm sân trong khu vực nhờ GPS API

➢ Chọn sân, thời gian chơi và đăng ký sân để giữ chỗ

➢ Chức năng hủy sân (Chỉ được hủy đăng ký sân trước thời gian quy định do chủ sân đặt ra)

➢ Chức năng nhắn tin trao đổi với người quản lý và những nguời chơi với nhau

➢ Chức năng đăng bài và bình luận với người chơi và người quản lý

➢ Chức năng đánh giá(rating) sân đã chơi.

3.1.2 Yêu cầu phi chức năng:

➢ Giao diện người dùng phải thân thiện, tương tác cao và có bố cục rõ ràng.

➢ Thiết kế giao diện phải tối ưu cho thiết bị di động, đảm bảo trải nghiệm tốt nhất trên màn hình nhỏ.

➢ Sử dụng màu sắc nhất quán và biểu tượng rõ ràng để người dùng dễ dàng tìm kiếm và sử dụng các tính năng.

➢ Hệ thống chỉ hoạt động trên thiết bị di động, bao gồm cả điện thoại thông minh và máy tính bảng.

➢ Đảm bảo tính tương thích với mọi loại màn hình và độ phân giải khác nhau của thiết bị di động.

➢ Hệ thống phải hoạt động liên tục và ổn định trên mọi thiết bị di động.

➢ Thời gian phản hồi của hệ thống cho mỗi tương tác từ người dùng không vượt quá 2 giây.

THIẾT KẾ HỆ THỐNG

3.2.1 Sơ đồ use case tổng quát:

1 Player Người dùng các tính năng đặt sân và thanh toán

2 Manager Người đăng ký kinh doanh sân

3 Admin Người quản lý ứng dụng

Bảng 3.1: Danh sách các actor

3.2.1.2 Sơ đồ use case tổng quát:

Hình 3.1: Sơ đồ use-case

3.2.2 Danh sách các use-case:

STT Tên Usecase Quyền hệ thống Mô tả

1 Đăng nhập Toàn bộ Người dùng đăng nhập vào hệ thống

STT Tên Usecase Quyền hệ thống Mô tả

2 Đăng ký Toàn bộ Người dùng tạo tài khoản mới

3 Quên mật khẩu Toàn bộ Người dùng khôi phục mật khẩu

4 Đăng nhập với Google Player /

Người dùng đăng nhập qua Google

5 Đăng xuất Toàn bộ Người dùng đăng xuất khỏi hệ thống

6 Tìm sân cầu lông Player Người dùng tìm kiếm sân cầu lông

7 Đặt sân Player Người dùng đặt sân cầu lông

8 Hủy sân Player Người dùng hủy đặt sân cầu lông

9 Đánh giá Player Người dùng đánh giá trải nghiệm

10 Đổi thông tin cá nhân Player /

Người dùng thay đổi thông tin cá nhân

11 Nhắn tin Toàn bộ Người dùng gửi và nhận tin nhắn

12 Đăng ký cơ sở mới Manager Người quản lý đăng ký cơ sở kinh doanh mới

13 Quản lý số lượng sân Manager Quản lý số lượng sân của cơ sở

14 Quản lý thời gian sân Manager Quản lý thời gian hoạt động của sân

15 Xem thông tin đặt sân Manager Quản lý xem thông tin đặt sân

16 Báo cáo thống kê Manager Quản lý tạo và xem báo cáo thống kê

STT Tên Usecase Quyền hệ thống Mô tả

18 Thống kê doanh thu app

Admin Quản lý thống kê doanh thu ứng dụng

19 Quản lý chủ sân Admin Quản lý thông tin và quyền hạn của chủ sân

20 Quản lý bài đăng Toàn bộ Thêm, xóa sửa bài đăng cá nhân

21 Bình luận bài đăng Toàn bộ Bình luận vào 1 bài đăng đã được duyệt

Bảng 3.2: Danh sách các use-case

3.2.3 Sơ đồ use-case chi tiết:

Mô tả Usecase cho phép người dùng đăng nhập vào hệ thống để sử dụng các chức năng của ứng dụng tương ứng với vai trò của người dùng.

Tiền điều kiện Người dùng đã có tài khoản (đã đăng ký).

Hậu điều kiện Người dùng đăng nhập thành công, hiển thị thông báo đăng nhập thành công và chuyển đến màn hình làm việc chính.

Dòng sự kiện chính 1 Mở màn hình đăng nhập

2 Điền thông tin đăng nhập (email và mật khẩu)

3 Nhấn vào nút “Log in”

4 Hệ thống ghi nhận, xuất ra thông báo đăng nhập thành công và chuyển đến màn hình làm việc chính.

Trong quá trình sử dụng hệ thống, người dùng sẽ nhận được thông báo khi nhập email không hợp lệ, yêu cầu nhập lại để đảm bảo dữ liệu chính xác Tương tự, nếu mật khẩu không hợp lệ, hệ thống sẽ gửi thông báo và yêu cầu người dùng nhập lại mật khẩu phù hợp, giúp bảo vệ an toàn thông tin cá nhân.

Dòng sự kiện lỗi 4a Thông báo đăng nhập thất bại do không tìm thấy người dùng với email được nhập.

4b Thông báo đăng nhập thất bại do mật khẩu không đúng

Mô tả Usecase cho phép người dùng đăng ký vào hệ thống để sử dụng các chức năng của ứng dụng tương ứng với vai trò của người dùng.

Tiền điều kiện Người dùng phải có email xác thực

Hậu điều kiện Người dùng đăng ký thành công, lưu thông tin người dùng vào hệ thống

Dòng sự kiện chính 1 Mở màn hình quên mật khẩu

2 Điền thông tin đăng ký(first name, last name, email, mật khẩu, xác nhận maatjj khẩu)

3 Nhấn vào nút “Sign in”

4 Hệ thống gửi mã xác nhận và chuyển qua trang verify code

5 Người dùng nhập code hệ thống gửi trong gmail

6 Nếu code họp lệ, hệ thống ghi nhận, xuất ra thông báo đăng ký thành công và chuyển đến màn hình đăng nhập.

Người dùng thường quên nhập một số trường thông tin bắt buộc như email hoặc mật khẩu khi đăng ký hoặc đăng nhập hệ thống Hệ thống sẽ hiển thị thông báo yêu cầu người dùng điền đầy đủ các trường thông tin cần thiết để hoàn tất quá trình Việc này giúp đảm bảo dữ liệu đầy đủ và chính xác, nâng cao trải nghiệm người dùng và duy trì tính bảo mật của hệ thống Chính vì vậy, việc nhập đúng và đầy đủ các thông tin bắt buộc là rất quan trọng để tránh các lỗi khi thao tác hoặc truy cập vào hệ thống.

2b Người dùng nhập mật khẩu không khớp với mật khẩu xác nhận Hệ thống hiển thị thông báo lỗi và yêu cầu nhập lại mật khẩu.

2c Người dùng chọn hủy thao tác đăng ký Hệ thống hủy thao tác và quay lại màn hình chính.

Lỗi 2D xảy ra khi email đã được sử dụng để đăng ký trước đó, khiến hệ thống hiển thị thông báo lỗi và yêu cầu người dùng sử dụng email khác Ngoài ra, nếu email người dùng cung cấp không hợp lệ do sai định dạng hoặc không thể gửi email xác thực, hệ thống sẽ hiển thị thông báo lỗi và yêu cầu người dùng chỉnh sửa địa chỉ email của mình.

4a Lỗi hệ thống khi ghi nhận thông tin người dùng Hệ thống hiển thị thông báo lỗi người dùng thử lại sau.

Tên Usecase Quên mật khẩu

Mô tả Usecase cho phép người dùng đặt lại mật khẩu nhờ vào email xác nhận

Tiền điều kiện Người dùng phải có email xác thực

Người dùng đã có tài khoản

Hậu điều kiện Người dùng đổi mật khẩu thành công, cập nhật thông tin mật khẩu vào hệ thống

Dòng sự kiện chính 1 Mở màn hình quên mật khẩu

2 Điền thông tin email xác nhận

3 Nhấn vào nút “Reset the password”

4 Nếu email hợp lệ, hệ thống gửi mã xác nhận và chuyển qua trang verify code

5 Người dùng nhập code hệ thống gửi trong gmail

6 Nếu code họp lệ, chuyển qua màn hình change password

7 Người dụng nhập mật khẩu mới

8 Người dùng nhấn xác nhận

9 Hệ thống xử lý thông tin mật khẩu mới

Trong trường hợp người dùng không nhận được email chứa mã xác nhận, hệ thống sẽ hiển thị thông báo rõ ràng và cung cấp tùy chọn gửi lại mã xác nhận để đảm bảo quá trình xác thực diễn ra thuận lợi Điều này giúp người dùng dễ dàng lấy lại mã xác nhận nhanh chóng và không gặp trở ngại trong quá trình đăng ký hoặc kích hoạt tài khoản Việc cung cấp chức năng gửi lại mã xác nhận là một bước quan trọng để tăng trải nghiệm người dùng và nâng cao tỷ lệ thành công khi xác thực thông tin trên hệ thống.

5a Người dùng nhập sai mã xác nhận Hệ thống hiển thị thông báo lỗi và yêu cầu nhập lại mã.

7a Người dùng nhập mật khẩu mới không khớp với mật khẩu xác nhận Hệ thống hiển thị thông báo lỗi và yêu cầu nhập lại thông tin.

7b Người dùng chọn hủy thao tác đổi mật khẩu Hệ thống hủy thao tác và quay lại màn hình đăng nhập.

Dòng sự kiện lỗi 2a Email người dùng nhập không tồn tại trong hệ thống Hệ thống hiển thị thông báo lỗi và yêu cầu kiểm tra lại email.

6a Mã xác nhận đã hết hạn Hệ thống hiển thị thông báo lỗi và cung cấp tùy chọn yêu cầu mã mới.

9a Lỗi hệ thống khi cập nhật mật khẩu mới Hệ thống hiển thị thông báo lỗi và yêu cầu người dùng thử lại sau.

Tên Usecase Đăng nhập với Google

Mô tả Usecase cho phép người dùng đăng nhập bằng tài khoản google

Tiền điều kiện Người dùng phải có tài khoản google

Hậu điều kiện Người dùng đăng nhập vào hệ thống thành công, lưu thông tin đăng nhập

Dòng sự kiện chính 1 Mở màn hình đăng nhập

2 Chọn chức năng đăng nhập với google

3 Hiện thị trang web đăng nhập của google

4 Điền thông tin đăng nhập

5 Hệ thống xác nhận thông tin đăng nhập

Trong trường hợp người dùng quên mật khẩu tài khoản Google, hệ thống sẽ hiển thị liên kết "Quên mật khẩu" để giúp người dùng đặt lại mật khẩu một cách dễ dàng và nhanh chóng Tính năng này hỗ trợ người dùng khôi phục truy cập vào tài khoản Google của mình một cách an toàn và hiệu quả Việc sử dụng liên kết "Quên mật khẩu" là bước quan trọng trong quá trình bảo vệ dữ liệu cá nhân và duy trì khả năng truy cập tài khoản.

4b Người dùng chọn hủy thao tác đăng nhập với Google Hệ thống hủy thao tác và quay lại màn hình đăng nhập của ứng dụng.

Lỗi 5a liên quan đến thông tin tài khoản Google không hợp lệ, chẳng hạn như sai mật khẩu Hệ thống sẽ hiển thị thông báo lỗi từ Google và yêu cầu người dùng nhập lại thông tin tài khoản để tiếp tục quá trình đăng nhập hoặc đồng bộ hóa Việc kiểm tra chính xác thông tin tài khoản Google và cập nhật mật khẩu đúng là cách khắc phục hiệu quả để khôi phục chức năng của hệ thống Đảm bảo rằng kết nối internet ổn định và không có vấn đề về mạng để tránh lỗi này xảy ra.

5b Lỗi hệ thống khi xử lý thông tin đăng nhập Google Hệ thống hiển thị thông báo lỗi và yêu cầu người dùng thử lại sau.

5c Tài khoản Google không được liên kết với ứng dụng Hệ thống yêu cầu người dùng liên kết tài khoản Google trước khi tiếp tục.

Mô tả Usecase cho phép người dùng đăng xuất khỏi hệ thống

Tiền điều kiện Người dùng hiện đã đăng nhập vào hệ thống

Hậu điều kiện Người dùng đăng xuất khỏi hệ thống

Dòng sự kiện chính 1 Mở màn hình tài khoản

3 Hiển thị thông báo xác nhận đăng xuất

4 Người dùng nhấn xác nhận

5 Hệ thống xóa thông tin người dùng hiện tại và chuyển đến trang đăng nhập

Người dùng thường chọn hủy thao tác đăng xuất sau khi nhận được thông báo xác nhận Hệ thống sẽ tự động hủy yêu cầu đăng xuất và trở về màn hình tài khoản một cách nhanh chóng Quá trình này đảm bảo an toàn cho dữ liệu người dùng và mang lại trải nghiệm mượt mà Việc cung cấp thông báo xác nhận giúp người dùng dễ dàng kiểm soát và quyết định thao tác của mình.

Dòng sự kiện lỗi 5a Lỗi hệ thống khi xóa thông tin người dùng hiện tại Hệ thống hiển thị thông báo lỗi và yêu cầu người dùng thử lại sau.

3.2.3.6.1 Tìm sân cầu lông theo tên:

Tên Usecase Tìm sân cầu lông theo tên

Mô tả Usecase cho phép người dùng tìm kiếm sân cầu lông theo tên sân

Người dùng cần đăng nhập vào hệ thống với vai trò người chơi để truy cập Sau khi đăng nhập thành công, hệ thống hiển thị danh sách kết quả tìm kiếm các cơ sở phù hợp, giúp người dùng dễ dàng lựa chọn và thực hiện các thao tác tiếp theo một cách thuận tiện và hiệu quả.

Dòng sự kiện chính 1 Mở màn hình tìm kiếm

2 Nhập từ khóa, mở hộp thoại lọc hoặc hộp thoại sắp xếp

3 Hệ thống tìm kiếm kết quả dựa vào bộ lọc và từ khóa

Khi người dùng không nhập từ khóa tìm kiếm mà chỉ sử dụng các bộ lọc hoặc chức năng sắp xếp, hệ thống sẽ hiển thị kết quả dựa trên các lựa chọn này Việc này giúp tối ưu trải nghiệm người dùng bằng cách tập trung vào các tiêu chí đã được chọn sẵn, thay vì tìm kiếm theo từ khóa Các bộ lọc và sắp xếp góp phần nâng cao hiệu quả truy xuất dữ liệu, đáp ứng nhu cầu tìm kiếm một cách chính xác và nhanh chóng hơn.

2b Người dùng chọn xóa bộ lọc hoặc thiết lập lại sắp xếp Hệ thống làm mới danh sách kết quả tìm kiếm.

Dòng sự kiện lỗi 3a xảy ra khi hệ thống không tìm thấy kết quả phù hợp với từ khóa và bộ lọc đã nhập Khi gặp lỗi này, hệ thống sẽ hiển thị thông báo "Không có kết quả phù hợp" để thông báo cho người dùng Đồng thời, hệ thống cũng sẽ gợi ý các tìm kiếm khác nhằm hỗ trợ người dùng tìm kiếm hiệu quả hơn Để khắc phục, người dùng có thể thử điều chỉnh từ khóa hoặc thay đổi bộ lọc để cải thiện kết quả tìm kiếm.

3b Lỗi hệ thống khi xử lý yêu cầu tìm kiếm Hệ thống hiển thị thông báo lỗi và yêu cầu người dùng thử lại sau.

3.2.3.6.2 Tìm sân cầu lông theo bản đồ:

Tên Usecase Tìm sân cầu lông theo bản đồ

Mô tả Usecase cho phép người dùng tìm kiếm sân cầu lông theo bản đồ

Người dùng đã đăng nhập vào hệ thống với vai trò người chơi để có thể truy cập và xem danh sách kết quả tìm kiếm các cơ sở một cách dễ dàng và thuận tiện.

Dòng sự kiện chính 1 Mở màn hình tìm kiếm bằng bản đồ

2 Nhập từ khóa địa chỉ hoặc tên sân hoặc chọn một vị trí trên bản đồ

3 Hệ thống tìm kiếm kết quả dựa vào từ khóa và di chuyển bản đồ đến khu vực gợi ý

Trong trường hợp người dùng không nhập từ khóa tìm kiếm mà chỉ thực hiện di chuyển hoặc phóng to/thu nhỏ bản đồ, hệ thống tự động cập nhật danh sách các sân cầu lông trong khu vực hiển thị trên bản đồ Tính năng này giúp người dùng dễ dàng tìm kiếm và lựa chọn sân cầu lông phù hợp mà không cần nhập từ khóa, nâng cao trải nghiệm người dùng Việc tự động cập nhật danh sách theo vị trí hiển thị giúp đảm bảo dữ liệu luôn mới và chính xác, thuận tiện cho quá trình tìm kiếm sân cầu lông nhanh chóng và hiệu quả.

Dòng sự kiện lỗi 3a Không tìm thấy sân cầu lông phù hợp trong khu vực đã chọn

Hệ thống hiển thị thông báo "Không có sân phù hợp" và gợi ý mở rộng khu vực tìm kiếm.

3b Lỗi hệ thống khi xử lý yêu cầu tìm kiếm hoặc hiển thị bản đồ

Hệ thống hiển thị thông báo lỗi và yêu cầu người dùng thử lại sau.

Mô tả Usecase cho phép người dùng đặt sân cầu lông

Tiền điều kiện Người dùng hiện đã đăng nhập vào hệ thống với vai trò là người chơi Người dùng mở trang chi tiết cơ sở

Hậu điều kiện Người dùng đặt sân thành công, lưu thông tin đặt sân vào hệ thống và hiển thị trên danh sách sân đã đặt

Dòng sự kiện chính 1 Mở màn hình chi tiết cơ sở

2 Chọn ngày muốn đặt sân

3 Chọn 1 sân tập trong cơ sở

4 Chọn 1 khoảng thời gian cần đặt

6 Hệ thống xử lý thông tin đặt

Dòng sự kiện phụ 2a Người dùng không chọn ngày cụ thể và hệ thống tự động hiển thị ngày hiện tại để đặt sân.

4a Người dùng chọn một khoảng thời gian nhưng sân đã bị đặt trước đó Hệ thống hiển thị thông báo và gợi ý các khoảng thời gian trống khác.

5a Người dùng chọn hủy thao tác đặt sân Hệ thống hủy thao tác và quay lại màn hình chi tiết cơ sở.

Lỗi 3a xảy ra khi sân tập được chọn không khả dụng do đang trong quá trình bảo trì hoặc không hoạt động Khi gặp phải sự cố này, hệ thống sẽ hiển thị thông báo lỗi và yêu cầu người dùng chọn sân khác để tiếp tục thao tác Điều này đảm bảo người dùng dễ dàng nhận biết tình trạng sân và có phương án lựa chọn phù hợp để tránh gián đoạn luyện tập hoặc hoạt động.

6a Lỗi hệ thống khi xử lý thông tin đặt sân Hệ thống hiển thị thông báo lỗi và yêu cầu người dùng thử lại sau.

Thông tin đặt sân không hợp lệ, chẳng hạn như khoảng thời gian nằm ngoài giờ hoạt động, sẽ khiến hệ thống hiển thị thông báo lỗi và yêu cầu người dùng chỉnh sửa lại thông tin đặt sân phù hợp Điều này giúp đảm bảo các đặt lịch diễn ra đúng thời gian quy định và tránh các sai sót trong quá trình đặt sân.

Mô tả Usecase cho phép người dùng hủy đặt sân cầu lông

THIẾT KẾ CƠ SỞ DỮ LIỆU

Hình 3.1 Mô hình dữ liệu của toàn bộ hệ thống

STT Tên bảng Mô tả

1 User Thông tin tài khoản người dùng, bao gồm email, mật khẩu, vai trò, trạng thái hoạt động. vụ đi kèm.

3 Court Thông tin về các sân chơi (ví dụ: sân cầu lông) được cung cấp bởi các cơ sở.

4 Order Lưu thông tin các đơn đặt hàng của người dùng tại cơ sở.

5 Post Chứa thông tin về các bài đăng của người dùng, bao gồm tiêu đề, mô tả, danh mục và số lượng bình luận, lượt thích.

6 Comment Chứa nội dung bình luận của người dùng trên bài đăng.

7 MessageRoom Quản lý các phòng tin nhắn giữa các người dùng.

8 Message Lưu trữ nội dung tin nhắn giữa các người dùng.

9 Resource Quản lý các tài nguyên chung như hình ảnh, video, hoặc các file đính kèm cho bài đăng, tin nhắn và cơ sở.

10 UserResource Quản lý các tài nguyên liên kết với người dùng, như ảnh đại diện, hình nền hoặc các tài liệu liên quan.

11 FacilityResource Quản lý tài nguyên của từng cơ sở.

12 FacilityBusinessLicenses Chứa thông tin giấy phép kinh doanh của cơ sở.

13 PostResource Chứa thông tin bài đăng, liên kết với tài nguyên.

14 CommentResource Chứa thông tin về các bình luận, liên kết với tài nguyên.

15 MessageResource Chứa thông tin về các tin nhắn, liên kết với tài nguyên liên quan.

16 TimePeriod Thời gian hoạt động của cơ sở.

17 FacilityActive Quản lý khoảng thời gian hoạt động của cơ sở trong từng ngày.

18 ManagerInfo Lưu thông tin người quản lý của cơ sở.

19 UserMessageRoom Lưu thông tin về người dùng tham gia phòng tin nhắn.

20 FacilityLike Lưu thông tin lượt thích của người dùng cho các cơ sở.

21 PostLike Lưu thông tin về lượt thích trên bài đăng.

22 CommentLike Lưu thông tin về lượt thích trên các bình luận.

Bảng 3.1 Danh sách các bảng trong mô hình dữ liệu

STT Tên trường Kiểu dữ liệu Mô tả

1 _id ObjectId Khóa chính, định danh duy nhất cho người dùng.

2 username String Tên hiển thị của người dùng trên hệ thống.

3 email String Địa chỉ email của người dùng, dùng để đăng nhập và liên hệ.

4 password String Mật khẩu đã được mã hóa.

5 role String Vai trò của người dùng trong hệ thống (ví dụ: admin, manager, user).

6 createdAt Double Thời điểm tạo tài khoản, tính bằng timestamp.

7 updatedAt Double Thời điểm cập nhật thông tin người dùng gần nhất, tính bằng timestamp.

STT Tên trường Kiểu dữ liệu Mô tả

1 _id ObjectId Khóa chính, định danh duy nhất cho cơ sở.

2 userId String Khóa ngoại liên kết đến bảng User, cho biết người dùng đã đăng ký cơ sở.

3 name String Tên của cơ sở (ví dụ: tên sân chơi, trung tâm thể thao, câu lạc bộ).

4 facebookUrl String Đường dẫn đến trang Facebook của cơ sở (nếu có).

5 description String Mô tả chi tiết về cơ sở, các dịch vụ và tiện ích mà cơ sở cung cấp.

6 policy Double Chính sách của cơ sở (ví dụ: chính sách hủy đặt chỗ hoặc hoàn tiền).

7 courtsAmount int Tổng số lượng sân hoặc khu vực trong cơ sở.

8 minPrice Double Giá thuê tối thiểu cho một sân hoặc dịch vụ tại cơ sở.

9 maxPrice Double Giá thuê tối đa cho một sân hoặc dịch vụ tại cơ sở.

10 detailAddress String Địa chỉ chi tiết của cơ sở (bao gồm số nhà, đường, phường/xã, quận/huyện).

11 province String Tỉnh hoặc thành phố nơi cơ sở tọa lạc.

12 location Location Thông tin vị trí của cơ sở, có thể bao gồm tọa độ địa lý (kinh độ và vĩ độ).

13 ratingAvg Double Điểm đánh giá trung bình của cơ sở, được tính dựa trên các lượt đánh giá của người dùng.

14 totalRating int Tổng số lượt đánh giá của cơ sở.

15 registeredAt Double Thời điểm cơ sở được đăng ký, tính bằng timestamp.

16 isApproved Boolean Trạng thái phê duyệt của cơ sở (true: đã được phê duyệt, false: chưa được phê duyệt).

17 approvedAt Double Thời điểm cơ sở được phê duyệt, tính bằng timestamp.

18 updatedAt Double Thời điểm cập nhật thông tin cơ sở gần nhất, tính bằng timestamp.

19 managerInfoId String Khóa ngoại liên kết đến bảng ManagerInfo, cho biết thông tin người quản lý cơ sở.

STT Tên trường Kiểu dữ liệu Mô tả

1 _id ObjectId Khóa chính, định danh duy nhất cho từng sân chơi.

2 facilityId String Khóa ngoại liên kết đến bảng Facility, cho biết sân chơi thuộc về cơ sở nào.

3 name String Tên của sân chơi hoặc khu vực (ví dụ: sân bóng đá mini, sân tennis). điểm và tiện ích đi kèm.

5 pricePerHour Double Giá thuê sân tính theo giờ (đơn vị tiền tệ có thể là VNĐ hoặc USD).

6 createdAt Double Thời điểm tạo thông tin sân chơi, tính bằng timestamp.

7 updatedAt Double Thời điểm cập nhật thông tin sân chơi gần nhất, tính bằng timestamp.

STT Tên trường Kiểu dữ liệu Mô tả

1 _id ObjectId Khóa chính, định danh duy nhất cho từng đơn đặt sân.

2 userId String Khóa ngoại liên kết đến bảng User, xác định người dùng thực hiện đặt sân.

3 courtId String Khóa ngoại liên kết đến bảng Court, cho biết sân nào được đặt trong đơn hàng này.

4 price Double Tổng giá tiền của đơn đặt sân (tính theo thời gian đặt).

5 orderStatus OrderStatus Trạng thái của đơn đặt sân (ví dụ: not play, played, canceled).

6 orderedAt Double Thời điểm đặt sân, tính bằng timestamp.

7 updatedAt Double Thời điểm cập nhật trạng thái đơn đặt sân gần nhất, tính bằng timestamp.

8 orderPeriodId String Khóa ngoại liên kết đến bảng TimePeriod, cho biết thời gian cụ thể đã đặt sân.

STT Tên trường Kiểu dữ liệu Mô tả

1 _id ObjectId Khóa chính, định danh duy nhất cho từng bài viết.

2 userId String Khóa ngoại liên kết đến bảng User, cho biết người dùng đã đăng bài viết này.

3 title String Tiêu đề của bài viết.

4 description String Nội dung mô tả chi tiết của bài viết.

5 category PostCategory Danh mục của bài viết (ví dụ: quảng cáo, tuyển người chơi).

6 likesCount int Tổng số lượt thích của bài viết.

7 commentsCount int Tổng số lượt bình luận của bài viết.

8 createdAt Double Thời điểm tạo bài viết, tính bằng timestamp.

9 updatedAt Double Thời điểm cập nhật bài viết gần nhất, tính bằng timestamp.

1 _id ObjectId Khóa chính (Primary Key) định danh duy nhất cho mỗi bình luận.

2 userId String Khóa ngoại (Foreign Key) liên kết với người dùng đã thực hiện bình luận.

3 postId String Khóa ngoại (Foreign Key) liên kết với bài đăng mà bình luận này thuộc về.

4 content String Nội dung của bình luận.

5 likesCount int Số lượt thích trên bình luận.

6 createdAt Double Thời gian tạo bình luận, lưu dưới dạng timestamp (giá trị số).

7 updatedAt Double Thời gian cập nhật lần cuối của bình luận, lưu dưới dạng timestamp (giá trị số).

STT Tên trường Kiểu dữ liệu Mô tả

1 _id ObjectId Khóa chính (Primary Key) định danh duy nhất cho mỗi phòng tin nhắn.

2 roomName String Tên của phòng tin nhắn.

3 roomImageId String Khóa ngoại (Foreign Key) liên kết với hình ảnh đại diện của phòng tin nhắn.

4 type RoomType Loại phòng tin nhắn (ví dụ: nhóm, cá nhân).

5 createdAt Double Thời gian tạo phòng tin nhắn, lưu dưới dạng timestamp (giá trị số).

6 updatedAt Double Thời gian cập nhật lần cuối của phòng tin nhắn, lưu dưới dạng timestamp (giá trị số).

STT Tên trường Kiểu dữ liệu Mô tả

1 _id ObjectId Khóa chính (Primary Key) định danh duy nhất cho mỗi tin nhắn.

2 senderId String Khóa ngoại (Foreign Key) liên kết với người gửi tin nhắn.

3 roomId String Khóa ngoại (Foreign Key) liên kết với phòng tin nhắn mà tin nhắn thuộc về.

4 content String Nội dung của tin nhắn.

5 createdAt Double Thời gian tạo tin nhắn, lưu dưới dạng timestamp (giá trị số).

6 updatedAt Double Thời gian cập nhật lần cuối của tin nhắn, lưu dưới dạng timestamp (giá trị số).

STT Tên trường Kiểu dữ liệu Mô tả

1 _id ObjectId Khóa chính (Primary Key) định danh duy nhất cho mỗi tài nguyên.

2 url String Đường dẫn (URL) đến tài nguyên, chẳng hạn như hình ảnh, video, hoặc các tập tin khác.

3 publicId String Định danh công khai của tài nguyên, thường được sử dụng để truy cập từ bên ngoài.

4 createdAt Double Thời gian tạo tài nguyên, lưu dưới dạng timestamp (giá trị số).

5 updatedAt Double Thời gian cập nhật lần cuối của tài nguyên, lưu dưới dạng timestamp (giá trị số).

STT Tên trường Kiểu dữ liệu Mô tả

1 userId String Khóa chính và khóa ngoại (PK, FK) liên kết với người dùng sở hữu tài nguyên này.

2 resourceId String Khóa chính và khóa ngoại (PK, FK) liên kết với tài nguyên cụ thể của người dùng.

3 isMain Boolean Xác định tài nguyên này có phải là tài nguyên chính của người dùng hay không.

STT Tên trường Kiểu dữ liệu Mô tả

Khóa chính và khóa ngoại (PK, FK) liên kết với cơ sở vật chất mà tài nguyên này thuộc về.

2 resourceId String Khóa chính và khóa ngoại (PK, FK) liên kết với tài nguyên cụ thể của cơ sở vật chất.

3 isMain Boolean Xác định tài nguyên này có phải là tài nguyên chính của cơ sở vật chất hay không.

STT Tên trường Kiểu dữ liệu Mô tả

Khóa chính và khóa ngoại (PK, FK) liên kết với cơ sở vật chất (facility) mà giấy phép này thuộc về.

Khóa chính và khóa ngoại (PK, FK) liên kết với tài nguyên đại diện cho giấy phép kinh doanh.

Xác định tài nguyên này có phải là tài nguyên chính (giấy phép chính) của cơ sở vật chất hay không.

STT Tên trường Kiểu dữ liệu Mô tả

1 postId String Khóa chính và khóa ngoại (PK, FK) liên kết với bài đăng mà tài nguyên này thuộc về.

2 resourceId String Khóa chính và khóa ngoại (PK, FK) liên kết với tài nguyên cụ thể của bài đăng.

3 isMain Boolean Xác định tài nguyên này có phải là tài nguyên chính của bài đăng hay không.

STT Tên trường Kiểu dữ liệu Mô tả

1 commentId String Khóa chính và khóa ngoại (PK, FK) liên kết với bình luận mà tài nguyên này thuộc về.

2 resourceId String Khóa chính và khóa ngoại (PK, FK) liên kết với tài nguyên cụ thể của bình luận.

3 isMain Boolean Xác định tài nguyên này có phải là tài nguyên chính của bình luận hay không.

STT Tên trường Kiểu dữ liệu Mô tả

1 messageId String Khóa chính và khóa ngoại (PK, FK) liên kết với tin nhắn mà tài nguyên này thuộc về.

2 resourceId String Khóa chính và khóa ngoại (PK, FK) liên kết với tài nguyên cụ thể của tin nhắn.

3 isMain Boolean Xác định tài nguyên này có phải là tài nguyên chính của tin nhắn hay không.

STT Tên trường Kiểu dữ liệu Mô tả

1 _id ObjectId Khóa chính (Primary Key) định danh duy nhất cho mỗi khoảng thời gian.

2 hourFrom Double Giờ bắt đầu của khoảng thời gian (định dạng số).

3 hourTo Double Giờ kết thúc của khoảng thời gian (định dạng số).

STT Tên trường Kiểu dữ liệu Mô tả

Dữ liệu của bạn bao gồm `facilityId`, là khóa chính và khóa ngoại liên kết với các cơ sở vật chất đang hoạt động Thông tin này giúp xác định chính xác các cơ sở vật chất hiện đang hoạt động, ví dụ như vào các ngày thứ Hai, thứ Ba Việc sử dụng `facilityId` đảm bảo tính tích hợp và quản lý hiệu quả các dữ liệu liên quan đến các cơ sở vật chất đang hoạt động trong hệ thống.

Khóa ngoại (FK) liên kết với bảng

TimePeriod, xác định khung giờ hoạt động của cơ sở.

STT Tên trường Kiểu dữ liệu Mô tả

1 _id ObjectId Khóa chính (Primary Key) định danh duy nhất cho mỗi quản lý.

2 fullName String Họ và tên đầy đủ của người quản lý.

3 email String Địa chỉ email của người quản lý, dùng để liên lạc.

4 phoneNumber String Số điện thoại của người quản lý, dùng để liên lạc.

5 citizenId String Số chứng minh nhân dân hoặc căn cước công dân của người quản lý.

Khóa ngoại (FK) liên kết với tài nguyên hình ảnh mặt trước của chứng minh nhân dân/căn cước.

Khóa ngoại (FK) liên kết với tài nguyên hình ảnh mặt sau của chứng minh nhân dân/căn cước.

Khóa ngoại (FK) liên kết với tài nguyên hình ảnh mặt trước thẻ ngân hàng của người quản lý.

9 bankCardBackId String Khóa ngoại (FK) liên kết với tài nguyên hình ảnh mặt sau thẻ ngân hàng của người quản lý.

STT Tên trường Kiểu dữ liệu Mô tả

1 roomId String Khóa chính và khóa ngoại (PK, FK) liên kết với phòng tin nhắn mà người dùng tham gia.

2 userId String Khóa chính và khóa ngoại (PK, FK) liên kết với người dùng tham gia phòng tin nhắn.

STT Tên trường Kiểu dữ liệu Mô tả

1 userId String Khóa chính và khóa ngoại (PK, FK) liên kết với người dùng đã thích cơ sở vật chất.

2 facilityId String Khóa chính và khóa ngoại (PK, FK) liên kết với cơ sở vật chất được người dùng thích.

1 postId String Khóa chính và khóa ngoại (PK, FK) liên kết với bài đăng được người dùng thích.

2 userId String Khóa chính và khóa ngoại (PK, FK) liên kết với người dùng đã thích bài đăng.

STT Tên trường Kiểu dữ liệu Mô tả

1 commentId String Khóa chính và khóa ngoại (PK, FK) liên kết với bình luận được người dùng thích.

2 userId String Khóa chính và khóa ngoại (PK, FK) liên kết với người dùng đã thích bình luận.

KẾT QUẢ

TỔNG KẾT

Ngày đăng: 12/07/2025, 14:24

HÌNH ẢNH LIÊN QUAN

Hình 2.1. Hình ảnh minh họa Mobile Cross-Platform. - Badcourt - Hệ Thống Quản Lý Sân Cầu Lông.docx
Hình 2.1. Hình ảnh minh họa Mobile Cross-Platform (Trang 25)
Hình 2.2. Hình ảnh minh họa Cơ sở dữ liệu NoSQL. - Badcourt - Hệ Thống Quản Lý Sân Cầu Lông.docx
Hình 2.2. Hình ảnh minh họa Cơ sở dữ liệu NoSQL (Trang 27)
3.2.1.2. Sơ đồ use case tổng quát: - Badcourt - Hệ Thống Quản Lý Sân Cầu Lông.docx
3.2.1.2. Sơ đồ use case tổng quát: (Trang 45)
Hình 3.1. Mô hình dữ liệu của toàn bộ hệ thống. - Badcourt - Hệ Thống Quản Lý Sân Cầu Lông.docx
Hình 3.1. Mô hình dữ liệu của toàn bộ hệ thống (Trang 128)
Bảng 4.2: Giao diện intro - Badcourt - Hệ Thống Quản Lý Sân Cầu Lông.docx
Bảng 4.2 Giao diện intro (Trang 147)
Bảng 4.3: Giao diện đăng ký - Badcourt - Hệ Thống Quản Lý Sân Cầu Lông.docx
Bảng 4.3 Giao diện đăng ký (Trang 151)
Bảng 4.5: Giao diện màn hình chính - Badcourt - Hệ Thống Quản Lý Sân Cầu Lông.docx
Bảng 4.5 Giao diện màn hình chính (Trang 155)
Bảng 4.7: Giao diện tìm kiếm bằng bàn đồ - Badcourt - Hệ Thống Quản Lý Sân Cầu Lông.docx
Bảng 4.7 Giao diện tìm kiếm bằng bàn đồ (Trang 159)
Bảng 4.8: Giao diện chi tiết cơ sở - Badcourt - Hệ Thống Quản Lý Sân Cầu Lông.docx
Bảng 4.8 Giao diện chi tiết cơ sở (Trang 160)
Bảng 4.9: Giao diện tiến hành đặt sân - Badcourt - Hệ Thống Quản Lý Sân Cầu Lông.docx
Bảng 4.9 Giao diện tiến hành đặt sân (Trang 162)
Bảng 4.15: Giao diện intro manager - Badcourt - Hệ Thống Quản Lý Sân Cầu Lông.docx
Bảng 4.15 Giao diện intro manager (Trang 172)
Bảng 4.16: Giao diện thêm cơ sở - Badcourt - Hệ Thống Quản Lý Sân Cầu Lông.docx
Bảng 4.16 Giao diện thêm cơ sở (Trang 174)
Bảng 4.17: Giao diện màn hình chính của người quản lý - Badcourt - Hệ Thống Quản Lý Sân Cầu Lông.docx
Bảng 4.17 Giao diện màn hình chính của người quản lý (Trang 176)
Bảng 4.24: Giao diện xác nhận đăng ký của admin - Badcourt - Hệ Thống Quản Lý Sân Cầu Lông.docx
Bảng 4.24 Giao diện xác nhận đăng ký của admin (Trang 189)
Bảng 4.25: Giao diện chi tiết xác nhận đăng ký của admin - Badcourt - Hệ Thống Quản Lý Sân Cầu Lông.docx
Bảng 4.25 Giao diện chi tiết xác nhận đăng ký của admin (Trang 191)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w