Cập nhật vai trò của người dùng Tham khảo Tiểu luận chuyên ngành, trang 56 .... Cập nhật trạng thái của người dùng Tham khảo Tiểu luận chuyên ngành, trang 70 .... Với những tính năng bổ
NỘI DUNG
1.2 Yêu cầu bài toán của đề tài (Tham khảo Tiểu luận chuyên ngành, trang 9) 1.3 Kịch bản của các đối tượng sử dụng (Tham khảo tiểu luận chuyên ngành, trang 10)
KHẢO SÁT HIỆN TRẠNG
XÁC ĐỊNH YÊU CẦU
Yêu cầu chức năng
Mục tiêu của đề tài là xây dựng đặt phòng trực tuyến, nơi người dùng có thể trải nghiệm đặt phòng online Hệ thống website sẽ cung cấp các chức năng sau:
- Các chức năng đăng ký, đăng nhập, quên mật khẩu, đổi mật khẩu và quản lý trang thông tin cá nhân và xem thông tin của các chủ nhà khác
- Các chức năng đăng ký, đăng nhập, đăng xuất, quên mật khẩu, đổi mật khẩu và quản lý trang thông tin cá nhân và xem thông tin của các chủ nhà, hướng dẫn viên khác
- Hiển thị danh sách phòng: Cho phép người dùng xem các phòng hiện có trên hệ thống
- Chi tiết phòng: Cung cấp thông tin chi tiết về từng phòng, bao gồm hình ảnh, mô tả, giá và các thông tin khác liên quan
- Yêu thích theo dõi phòng: Cho phép người dùng thêm phòng vào danh sách yêu thích và quản lý danh sách yêu thích của mình
- Đặt phòng: Cho phép người dùng đặt phòng trực tiếp trên trang web và hỗ trợ xác nhận đặt phòng qua email
- Huỷ đặt phòng: Cho phép người dùng huỷ đặt phòng trực tiếp trên website trước khi xác nhận đặt phòng
- Đánh giá và bình luận: Cho phép người dùng đánh giá và bình luận các đia điểm sau khi đã hoàn tất thủ tục trả phòng
- Quản lý danh sách đặt phòng: Cho phép người dùng xem và quản lý các đơn đặt phòng của mình và đối với chủ nhà sẽ quản lý đơn đặt phòng trên từng địa điểm
- Tìm kiếm và lọc: Cung cấp chức năng tìm kiếm lọc để người dùng có thể dễ dàng tìm kiếm phòng theo một số tiêu chí
- Tích hợp hệ thống thanh toán: Đảm bảo có tích hợp phương thức thanh toán cả
- Quản lý người dùng: Cho phép quản trị viên quản lý thông tin người dùng và trạng thái kích hoạt tài khoản
- Thống kê: Cho phép chủ nhà theo dõi và đánh giá dữ liệu thống kê của chính họ để từ đó đưa ra chiến lược kinh doanh phù hợp với người dùng
- Đăng bài viết: Chức năng này cho phép người dùng đăng các bài viết liên quan đến du lịch, điểm đến, kinh nghiệm du lịch, hoặc thông tin về các hướng dẫn viên
- Tương tác với bài viết: Người dùng có thể tương tác với các bài viết bằng cách like, comment, hoặc chia sẻ để trao đổi thông tin và kinh nghiệm
- Quản lý bài viết cá nhân: Cho phép người dùng quản lý các bài viết mà họ đã đăng bằng cách chỉnh sửa, xóa hoặc thêm vào danh sách ưa thích
- Đăng tin cho thuê hướng dẫn viên: Người dùng có thể đăng thông tin về việc cần thuê hướng dẫn viên cho các chuyến đi du lịch của họ
- Quản lý tin đăng cho thuê hướng dẫn viên: Cho phép người dùng quản lý các tin đăng đã đăng, bao gồm chỉnh sửa, xóa hoặc đánh dấu trạng thái
- Đặt lịch hướng dẫn viên: Người dùng có thể đặt lịch hướng dẫn viên cho các chuyến đi của mình thông qua giao diện trực tuyến
- Quản lý lịch đặt hướng dẫn viên cá nhân: Cho phép người dùng xem và quản lý các lịch đặt hướng dẫn viên của họ, bao gồm xem, chỉnh sửa hoặc hủy đặt lịch
- Hệ thống chat bot: Hệ thống chatbot hỗ trợ người dùng tra cứu những thông tin cần thiết về website
- Chia sẻ lên Mạng xã hội: chia sẻ địa chỉ của bài đăng cho thuê phòng, bài đăng hướng dẫn viên, bài đánh giá lên các nền tảng Mạng xã hội như Facebook, Twitter, Mail, …
- Yêu cầu: gửi yêu cầu trở thành hướng dẫn viên hoặc chủ nhà, được quản lý và xử lý bởi quản trị viên
- Báo cáo: báo cáo bài viết, địa điểm, bài đăng hướng dẫn viên, được quản lý và xử lý bởi quản trị viên
2.2 Yêu cầu phi chức năng
- Giao diện trực quan, sinh động, dễ thao tác: Hệ thống cung cấp cho người dùng một giao diện và chức năng thân thiện, hình ảnh và biểu tượng trực quan
- Hiệu suất: Website phải nhanh chóng tải và phản hồi, với thời gian tải trang không quá 10 giây
- Bảo mật: Dữ liệu người dùng, bao gồm thông tin cá nhân và thanh toán, phải được bảo vệ khỏi các mối đe dọa bảo mật
- Khả năng mở rộng: Hệ thống cần có khả năng mở rộng để xử lý tăng trưởng người dùng và dữ liệu mà không làm giảm hiệu suất
- Dễ dàng bảo trì: Mã nguồn cần được tổ chức một cách rõ ràng và có tài liệu đầy đủ để thuận tiện cho việc bảo trì
- Độ tin cậy: Hệ thống phải hoạt động ổn định với tỉ lệ downtime thấp, đảm bảo truy cập liên tục cho người dùng
CHƯƠNG 3 PHÂN TÍCH CHỨC NĂNG 3.1 Phía người dùng (User)
Bảng 3 1 Chức năng phía người dùng
6 Quản lí tài khoản cá nhân
7 Gửi báo cáo (tài khoản, địa điểm, bài đăng, tour, bình luận) lên cho Admin
8 Yêu cầu trở thành Hướng dẫn viên, Chủ nhà
9 Tìm kiếm và xem thông tin phòng
11 Quản lý đơn đặt phòng
12 Hỗ trợ xác nhận đặt phòng thành công qua mail
15 Tương tác với bài viết
16 Quản lý bài viết cá nhân
17 Cộng đồng review dịch vụ
18 Tương tác với bài review dịch vụ
19 Quản lý bài review cá nhân
20 Hệ thống chatbot hỗ trợ người dùng
21 Đặt lịch hướng dẫn viên
22 Quản lý lịch đặt hướng dẫn viên
23 Quản lý danh sách địa điểm yêu thích
24 Chia sẻ địa điểm, bài đăng lên Mạng xã hội
25 Tìm kiếm và xem thông tin bài đăng hướng dẫn viên
Phía chủ nhà (Vendor)
Bảng 3 2 Chức năng phía chủ nhà
6 Quản lí tài khoản cá nhân
7 Gửi báo cáo (tài khoản, địa điểm, bài đăng, tour, bình luận) lên cho Admin
8 Tìm kiếm và xem thông tin phòng
10 Quản lý đơn đặt phòng
11 Hỗ trợ xác nhận đặt phòng thành công qua mail
14 Tương tác với bài viết
15 Quản lý bài viết cá nhân
16 Cộng đồng review dịch vụ
17 Tương tác với bài review dịch vụ
18 Quản lý bài review cá nhân
19 Hệ thống chatbot hỗ trợ người dùng
22 Quản lý danh sách địa điểm yêu thích
23 Chia sẻ địa điểm, bài đăng lên Mạng xã hội
24 Tìm kiếm và xem thông tin bài đăng hướng dẫn viên
25 Đăng ký và quản lý địa điểm
Phía Quản trị viên (Admin)
Bảng 3 3 Chức năng phía Quản trị viên
3 Quản lý tài khoản cá nhân
4 Quản lý quyền truy cập của người dùng
5 Quản lý và xử lý báo cáo của người dùng
6 Quản lý và xử lý yêu cầu của người dùng
7 Tìm kiếm và xem thông tin phòng
8 Cộng đồng review dịch vụ
9 Hệ thống chatbot hỗ trợ người dùng xử lý thắc mắc
10 Chia sẻ địa điểm, bài đăng lên Mạng xã hội
11 Tìm kiếm và xem thông tin bài đăng hướng dẫn viên
Phía Hướng dẫn viên (Guider)
Bảng 3 4 Chức năng phía Quản trị viên
6 Quản lí tài khoản cá nhân
7 Gửi báo cáo (tài khoản, địa điểm, bài đăng, tour, bình luận) lên cho Admin
8 Tìm kiếm và xem thông tin phòng
10 Quản lý đơn đặt phòng
11 Hỗ trợ xác nhận đặt phòng thành công qua mail
14 Tương tác với bài viết
15 Quản lý bài viết cá nhân
16 Cộng đồng review dịch vụ
17 Tương tác với bài review dịch vụ
18 Quản lý bài review cá nhân
19 Hệ thống chatbot hỗ trợ người dùng
20 Đặt lịch hướng dẫn viên
21 Quản lý lịch đặt hướng dẫn viên
22 Quản lý danh sách địa điểm yêu thích
23 Chia sẻ địa điểm, bài đăng lên Mạng xã hội
24 Tìm kiếm và xem thông tin bài đăng hướng dẫn viên
25 Đăng tin cho thuê hướng dẫn viên
26 Quản lý tin cho thuê hướng dẫn viên
LƯỢC ĐỒ USECASE
Danh sách các Actor
Hình 4 1 Danh sách các Actor
Lược đồ Usecase
Lược đồ Usecase chi tiết
4.3.1 Đặt phòng (Tham khảo Tiểu luận chuyên ngành, trang 20)
4.3.2 Quản lý đơn đặt phòng
Hình 4 3 Lược đồ Usecase Quản lý đơn đặt phòng
4.3.3 Quản lý tài khoản (Tham khảo Tiểu luận chuyên ngành, trang 20)
4.3.4 Chia sẻ địa điểm, bài đăng lên mạng xã hội
Hình 4 4 Lược đồ Usecase Chia sẻ địa điểm, bài đăng lên mạng xã hội
Hình 4 5 Lược đồ Usecase Quản lý báo cáo
4.3.6 Quản lý tin đăng cho thuê chỗ ở (Tham khảo Tiểu luận chuyên ngành, trang 22)
4.3.7 Quản lý lịch đặt hướng dẫn viên
Hình 4 6 Lược đồ Usecase Quản lý lịch đặt hướng dẫn viên
4.3.8 Quản lý danh sách địa điểm yêu thích (Tham khảo Tiểu luận chuyên ngành, trang 23)
Hình 4 7 Lược đồ Usecase Quản lý bài viết
4.3.10 Tương tác với bài viết
Hình 4 8 Lược đồ Usecase Tương tác với bài viết
Hình 4 9 Lược đồ Usecase Quản lý yêu cầu
Hình 4 10 Lược đồ Usecase Quản lý phòng
Hình 4 11 Lược đồ Usecase Thống kê doanh thu
Hình 4 12 Lược đồ Usecase Quản lý thanh toán
4.3.15 Quản lý tin đăng cho thuê hướng dẫn viên
Hình 4 13 Lược đồ Usecase Quản lý tin đăng cho thuê hướng dẫn viên
Hình 4 14 Lược đồ Usecase Thống kê doanh thu
Hình 4 15 Lược đồ Usecase Quản lý thanh toán
4.3.18 Quản lý quyền truy cập của người dùng (Tham khảo Tiểu luận chuyên ngành, trang 24)
Hình 4 16 Lược đồ Usecase Hệ thống Chatbot
Đặc tả Usecase
4.4.1 Đăng ký (Tham khảo Tiểu luận chuyên ngành, trang 25)
4.4.2 Đăng nhập (Tham khảo Tiểu luận chuyên ngành, trang 26)
4.4.3 Đổi mật khẩu (Tham khảo Tiểu luận chuyên ngành, trang 27)
4.4.4 Quên mật khẩu (Tham khảo Tiểu luận chuyên ngành, trang 28)
4.4.5 Quản lý thông tin cá nhân (Tham khảo Tiểu luận chuyên ngành, trang 29) 4.4.6 Đăng xuất (Tham khảo Tiểu luận chuyên ngành, trang 31)
4.4.7 Đặt phòng (Tham khảo Tiểu luận chuyên ngành, trang 32)
4.4.8 Quản lý đơn đặt phòng
Bảng 4 1 Đặc tả usecase Quản lý đơn đặt phòng
Name Quản lý đơn đặt phòng
Goal Người dùng quản lý đơn đặt phòng cá nhân
Pre-conditions Người dùng đã đăng nhập vào hệ thống
Post-conditions Người dùng quản lý được đơn đặt phòng cá nhân
Main Flow 1 Truy cập vào chức năng quản lý đơn đặt phòng
Alternative 1a Chọn vào Details để xem thông tin cụ thể của đơn
1b Nhấn nút Xoá hoặc Huỷ để thực hiện thao tác với đơn 1c Thực hiện lọc theo ý muốn
4.4.9 Chia sẻ địa điểm, bài đăng lên mạng xã hội
Bảng 4 2 Đặc tả usecase Chia sẻ địa điểm, bài đăng lên mạng xã hội
Name Chia sẻ địa điểm, bài đăng lên mạng xã hội
Goal Người dùng chia sẻ thông tin về địa điểm hoặc bài đăng lên mạng xã hội
Actors User, Vendor, Guider, Admin
Pre-conditions Người dùng đã đăng nhập vào hệ thống và đang xem thông tin về một địa điểm hoặc bài đăng
Post-conditions Thông tin được chia sẻ lên mạng xã hội
Main Flow 1 Truy cập trang chi tiết của địa điểm
2 Chọn biểu tượng chia sẻ
3 Chọn nền tảng hoặc phương thức chia sẻ
Alternative 1a Truy cập trang chi tiết của bài đăng
Bảng 4 3 Đặc tả usecase Quản lý báo cáo
Name Quản lý báo cáo
Goal Admin quản lý các báo cáo trong hệ thống
Pre-conditions Admin đã đăng nhập vào hệ thống
Post-conditions Báo cáo được xử lý và cập nhật trong hệ thống
Main Flow 1 Admin truy cập vào phần quản lý báo cáo
2 Hệ thống hiển thị danh sách các báo cáo
3 Admin xem chi tiết báo cáo
4 Admin xử lý báo cáo (xác minh, phản hồi, hoặc đánh dấu đã giải quyết)
5 Hệ thống cập nhật trạng thái báo cáo
6 Hệ thống gửi thông báo cho người báo cáo về kết quả xử lý (nếu cần)
4.4.11 Đặt lịch hướng dẫn viên
Bảng 4 4 Đặc tả usecase Đặt lịch hướng dẫn viên
Name Đặt lịch hướng dẫn viên
Goal Người dùng đặt lịch hướng dẫn viên thành công
Pre-conditions Người dùng đã đăng nhập vào hệ thống
Post-conditions Người dùng đặt lịch thành công
Main Flow 1 Chọn hướng dẫn viên muốn đặt
4 Điền thông tin đặt lịch
Exception 4A Thông tin không đầy đủ
4A1 Hệ thống báo lỗi cho người dùng
4.4.12 Quản lý lịch đặt hướng dẫn viên
Bảng 4 5 Đặc tả usecase Quản lý lịch đặt hướng dẫn viên
Name Quản lý lịch đặt hướng dẫn viên
Goal Người dùng quản lý đơn đặt phòng cá nhân
Pre-conditions Người dùng đã đăng nhập vào hệ thống
Post-conditions Người dùng quản lý được đơn đặt phòng cá nhân
Main Flow 6 Truy cập vào chức năng quản lý đơn đặt phòng
Alternative 1a Chọn vào Details để xem thông tin cụ thể của đơn
1b Nhấn nút Xoá hoặc Huỷ để thực hiện thao tác với đơn
1c Thực hiện lọc theo ý muốn
4.4.13 Quản lý danh sách địa điểm yêu thích (Tham khảo Tiểu luận chuyên ngành, trang 34)
Bảng 4 6 Đặc tả usecase Quản lý bài viết
Name Quản lý bài viết
Goal Người dùng quản lý được bài viết
Actors User, Vendor, Guider, Admin
Pre-conditions Người dùng đăng nhập thành công vào hệ thống
Post-conditions Người dùng quản lý được bài viết cá nhân
Main Flow 1 Truy cập vào trang bài viết cá nhân
4 Nhập nội dung chỉnh sửa
3a1 Xác nhận xoá 2a Chọn chia sẻ khoảnh khắc 2a1 Nhập thông tin bài viết 2a2 Chọn Lưu
Exception 5A Lưu lỗi do tải lên ảnh hoặc video bị lỗi
5B Lưu lỗi do nhập thiếu thông tin
4.4.15 Tương tác với bài viết
Bảng 4 7 Đặc tả usecase Tương tác với bài viết
Name Tương tác với bài viết
Goal Người dùng tương tác với bài viết thành công
Actors User, Vendor, Guider, Admin
Pre-conditions Người dùng đăng nhập thành công vào hệ thống
Post-conditions Người dùng tương tác thành công với bài viết
Main Flow 1 Chọn bài viết cụ thể để xem chi tiết
2 Chọn Like/Dislike để thích/bỏ thích
3a1 Chọn gửi 3a2 Xác nhận xoá 3b Chọn reply bình luận 3b1 Nhập bình luận 3b2 Chọn gửi
Exception 3A Lỗi do vi phạm ngôn từ khi bình luận
Bảng 4 8 Đặc tả usecase Quản lý yêu cầu
Name Quản lý yêu cầu
Goal Admin quản lý các yêu cầu trong hệ thống
Pre-conditions Admin đã đăng nhập vào hệ thống
Post-conditions Yêu cầu được xử lý và cập nhật trong hệ thống
Main Flow 3 Admin truy cập vào phần quản lý yêu cầu
4 Hệ thống hiển thị danh sách các yêu cầu
5 Admin xem chi tiết yêu cầu
6 Admin xử lý yêu cầu
Alternative 3A Chọn biểu tượng để xử lý yêu cầu
Exception 3A Lỗi hệ thống khi cập nhật trạng thái yêu cầu
4A Lỗi hệ thống khi cập nhật trạng thái yêu cầu
4.4.17 Quản lý phòng (Tham khảo Tiểu luận chuyên ngành, trang 35)
Bảng 4 9 Đặc tả usecase Thống kê doanh thu
Name Thống kê doanh thu
Goal Hướng dẫn viên xem được thống kê doanh thu
Pre-conditions Guider đăng nhập thành công vào hệ thống
Post-conditions Guider xem được thống kê doanh thu
Main Flow 1 Chọn vào mục Thống kê doanh thu
2 Lọc và chọn khoảng thời gian để xem thống kê
Bảng 4 10 Đặc tả usecase Quản lý thanh toán
Name Quản lý thanh toán
Goal Chủ nhà quản lý được lượt thanh toán
Main Flow 1 Chọn vào mục Quản lý thanh toán
2 Chọn vào biểu tượng để cập nhật trạng thái thanh toán
4.4.20 Quản lý tin cho thuê hướng dẫn viên
Bảng 4 11 Đặc tả usecase Quản lý tin cho thuê hướng dẫn viên
Name Quản lý tin cho thuê hướng dẫn viên
Goal Guider quản lý tin cho thuê cá nhân
Pre-conditions Guider đăng nhập thành công vào hệ thống
Post-conditions Guider quản lý thành công tin cho thuê cá nhân
Main Flow 1 Chọn chức năng quản lý bài đăng cá nhân
2 Chọn bài đăng cụ thể
3 Nhập thông tin chỉnh sửa
Alternative 2a Tìm kiếm và lọc
2b Chọn xoá 2b1 Xác nhận xoá 2c Chọn thêm bài đăng mới 2c1 Nhập thông tin ở các bước 2c2 Chọn tạo
3a Chọn chỉnh sửa chính sách 3a1 Nhập thông tin chỉnh sửa 3a2 Chọn Lưu
4a Chọn chỉnh sửa tiện nghi 4a1 Nhập thông tin chỉnh sửa
4a2 Chọn Lưu 5a Nhập thông tin lịch trình 5a1 Chọn Tạo
6a Lọc lịch trình 7a Chọn chỉnh sửa lịch trình cụ thể 7a1 Nhập thông tin chỉnh sửa 7a2 Chọn Lưu
8a Chọn xoá lịch trình cụ thể 8a1 Xác nhận xoá
Exception 4A Lỗi khi tải lên hình ảnh (kích thước quá lớn hoặc định dạng không hỗ trợ) 4B Thông tin bắt buộc bị thiếu
Bảng 4 12 Đặc tả usecase Thống kê doanh thu
Name Thống kê doanh thu
Goal Hướng dẫn viên xem được thống kê doanh thu
Pre-conditions Guider đăng nhập thành công vào hệ thống
Post-conditions Guider xem được thống kê doanh thu
Main Flow 3 Chọn vào mục Thống kê doanh thu
4 Lọc và chọn khoảng thời gian để xem thống kê
Bảng 4 13 Đặc tả usecase Quản lý thanh toán
Name Quản lý thanh toán
Goal Hướng dẫn viên quản lý được lượt thanh toán
Pre-conditions Guider đăng nhập thành công vào hệ thống
Post-conditions Guider xem và cập nhật được trạng thái của lượt thanh toán
Main Flow 3 Chọn vào mục Quản lý thanh toán
4 Chọn vào biểu tượng để cập nhật trạng thái thanh toán
4.4.23 Quản lý quyền truy cập của người dùng (Tham khảo Tiểu luận chuyên ngành, trang 36)
Bảng 4 14 Đặc tả usecase Hệ thống Chatbot
Goal Người dùng có thể tra cứu những thông tin, bao gồm những thông tin liên quan đến trang web
Actors User, Vendor, Guider, Admin
Pre-conditions Người dùng đã đăng nhập vào hệ thống
Post-conditions Người dùng giải đáp được những thắc mắc của mình
Main Flow 1 Nhấn vào biểu tượng Chatbot trên websitet
2 Nhập nội dung câu hỏi vào ô input
3 Nhấn vào biểu tượng Gửi
4 Hệ thống hiển thị câu trả lời
Exception 4A Câu hỏi vi phạm chính sách ngôn từ Hệ thống báo lỗi
4B Hệ thống gặp lỗi và báo lỗi
LƯỢC ĐỒ LỚP (CLASS DIAGRAM)
LƯỢC ĐỒ TUẦN TỰ (SEQUENCE DIAGRAM)
Cập nhật trạng thái thanh toán (Vendor)
Hình 6 1 Sequence Diagram Cập nhật trạng thái thanh toán (Vendor)
Xoá phòng khỏi danh sách yêu thích (Tham khảo Tiểu luận chuyên ngành,
6.10 Tạo phòng mới (Tham khảo Tiểu luận chuyên ngành, trang 52)
6.11 Cập nhật phòng (Tham khảo Tiểu luận chuyên ngành, trang 53)
6.12 Xoá phòng (Tham khảo Tiểu luận chuyên ngành, trang 54)
6.13 Đánh giá địa điểm (Tham khảo Tiểu luận chuyên ngành, trang 55)
6.14 Cập nhật vai trò của người dùng (Tham khảo Tiểu luận chuyên ngành, trang 56)
6.15 Cập nhật trạng thái của người dùng
Hình 6 2 Sequence Diagram Cập nhật trạng thái của người dùng
Đánh giá địa điểm (Tham khảo Tiểu luận chuyên ngành, trang 55)
6.14 Cập nhật vai trò của người dùng (Tham khảo Tiểu luận chuyên ngành, trang 56)
Cập nhật trạng thái của người dùng
Hình 6 2 Sequence Diagram Cập nhật trạng thái của người dùng
Tạo danh sách yêu thích (Tham khảo Tiểu luận chuyên ngành, trang 57)
6.18 Xoá danh sách yêu thích (Tham khảo Tiểu luận chuyên ngành, trang 59) 6.19 Phản hồi đánh giá (Review & Rating) (Tham khảo Tiểu luận chuyên ngành, trang 60)
6.20 Cập nhật trạng thái thanh toán (Guider)
Hình 6 3 Sequence Diagram Cập nhật trạng thái thanh toán (Guider)
Xoá danh sách yêu thích (Tham khảo Tiểu luận chuyên ngành, trang 59)
6.20 Cập nhật trạng thái thanh toán (Guider)
Hình 6 3 Sequence Diagram Cập nhật trạng thái thanh toán (Guider)
Cập nhật trạng thái thanh toán (Guider)
Hình 6 3 Sequence Diagram Cập nhật trạng thái thanh toán (Guider)
Thống kê doanh thu (Vendor)
Hình 6 4 Sequence Diagram Thống kê doanh thu (Vendor)
Thống kê doanh thu (Guider)
Hình 6 5 Sequence Diagram Thống kê doanh thu (Guider)
Tạo bài đăng hướng dẫn viên
Hình 6 6 Sequence Diagram Tạo bài đăng hướng dẫn viên
Cập nhật bài đăng hướng dẫn viên
Hình 6 7 Sequence Diagram Cập nhật bài đăng hướng dẫn viên
Xoá bài đăng hướng dẫn viên
Hình 6 8 Sequence Diagram Xoá bài đăng hướng dẫn viên
Tạo lịch trình cho bài đăng hướng dẫn viên
Hình 6 9 Sequence Diagram Tạo lịch trình cho bài đăng hướng dẫn viên
Cập nhật lịch trình cho bài đăng hướng dẫn viên
Hình 6 10 Sequence Diagram Cập nhật lịch trình cho bài đăng hướng dẫn viên
Cập nhật đơn đặt phòng
Hình 6 11 Sequence Diagram Cập nhật đơn đặt phòng
Huỷ đơn đặt phòng
Hình 6 12 Sequence Diagram Huỷ đơn đặt phòng
Xoá đơn đặt phòng
Hình 6 13 Sequence Diagram Xoá đơn đặt phòng
Tạo yêu cầu trở thành hướng dẫn viên
Hình 6 14 Sequence Diagram Tạo yêu cầu trở thành hướng dẫn viên
Tạo yêu cầu trở thành chủ nhà
Hình 6 15 Sequence Diagram Tạo yêu cầu trở thành chủ nhà
Xử lý yêu cầu trở thành hướng dẫn viên
Hình 6 16 Sequence Diagram Xử lý yêu cầu trở thành hướng dẫn viên
6.34 Xử lý yêu cầu trở thành chủ nhà
Hình 6 17 Sequence Diagram Xử lý yêu cầu trở thành chủ nhà
6.35 Thích/Bỏ thích bài đánh giá
Hình 6 18 Sequence Diagram Thích/Bỏ thích bài đánh giá
6.36 Bình luận bài đánh giá
Hình 6 19 Sequence Diagram Bình luận bài đánh giá
Trả lời bình luận bài đánh giá
Hình 6 20 Sequence Diagram Trả lời bình luận bài đánh giá
Đặt lịch hướng dẫn viên
Hình 6 21 Sequence Diagram Đặt lịch hướng dẫn viên
Cập nhật lịch đặt hướng dẫn viên
Hình 6 22 Sequence Diagram Cập nhật lịch đặt hướng dẫn viên
Xoá lịch đặt hướng dẫn viên
Hình 6 23 Sequence Diagram Xoá lịch đặt hướng dẫn viên
Huỷ lịch đặt hướng dẫn viên
Hình 6 24 Sequence Diagram Huỷ lịch đặt hướng dẫn viên
Tạo báo cáo
Hình 6 25 Sequence Diagram Tạo báo cáo
Tạo bài đánh giá
Hình 6 26 Sequence Diagram Tạo bài đánh giá
Cập nhật bài đánh giá
Hình 6 27 Sequence Diagram Cập nhật bài đánh giá
Xoá bài đánh giá
Hình 6 28 Sequence Diagram Xoá bài đánh giá
LƯỢC ĐỒ HOẠT ĐỘNG (ACTIVITY DIAGRAM)
Quản lý thông tin cá nhân (Tham khảo Tiểu luận chuyên ngành, trang 65)
7.7 Cập nhật trạng thái thanh toán (Vendor)
Hình 7 1 Activity Diagram Cập nhật trạng thái thanh toán (Vendor)
Cập nhật trạng thái thanh toán (Vendor)
Hình 7 1 Activity Diagram Cập nhật trạng thái thanh toán (Vendor)
Xoá phòng khỏi danh sách yêu thích (Tham khảo Tiểu luận chuyên ngành,
7.10 Tạo phòng mới (Tham khảo Tiểu luận chuyên ngành, trang 68)
7.11 Cập nhật phòng (Tham khảo Tiểu luận chuyên ngành, trang 69)
7.12 Xoá phòng (Tham khảo Tiểu luận chuyên ngành, trang 69)
7.13 Đánh giá địa điểm (Tham khảo Tiểu luận chuyên ngành, trang 70)
7.14 Cập nhật vai trò của người dùng
Hình 7 2 Activity Diagram Cập nhật vai trò của người dùng
Cập nhật vai trò của người dùng
Hình 7 2 Activity Diagram Cập nhật vai trò của người dùng
Cập nhật trạng thái của người dùng (Tham khảo Tiểu luận chuyên ngành,
7.16 Tạo danh sách yêu thích (Tham khảo Tiểu luận chuyên ngành, trang 71)
7.17 Cập nhật danh sách yêu thích (Tham khảo Tiểu luận chuyên ngành,
Cập nhật danh sách yêu thích (Tham khảo Tiểu luận chuyên ngành, trang 71)
Cập nhật trạng thái thanh toán (Guider)
Hình 7 3 Activity Diagram Cập nhật trạng thái thanh toán (Guider)
Thống kê doanh thu (Vendor)
Hình 7 4 Activity Diagram Thống kê doanh thu (Vendor)
Thống kê doanh thu (Guider)
Hình 7 5 Activity Diagram Thống kê doanh thu (Guider)
Tạo bài đăng hướng dẫn viên
Hình 7 6 Activity Diagram Tạo bài đăng hướng dẫn viên
Cập nhật bài đăng hướng dẫn viên
Hình 7 7 Activity Diagram Cập nhật bài đăng hướng dẫn viên
Xoá bài đăng hướng dẫn viên
Hình 7 8 Activity Diagram Xoá bài đăng hướng dẫn viên
Tạo lịch trình cho bài đăng hướng dẫn viên
Hình 7 9 Activity Diagram Tạo lịch trình cho bài đăng hướng dẫn viên
Cập nhật lịch trình cho bài đăng hướng dẫn viên
Hình 7 10 Activity Diagram Cập nhật lịch trình cho bài đăng hướng dẫn viên
Cập nhật đơn đặt phòng
Hình 7 11 Activity Diagram Cập nhật đơn đặt phòng
Huỷ đơn đặt phòng
Hình 7 12 Activity Diagram Huỷ đơn đặt phòng
Xoá đơn đặt phòng
Hình 7 13 Activity Diagram Xoá đơn đặt phòng
Tạo yêu cầu trở thành hướng dẫn viên
Hình 7 14 Activity Diagram Tạo yêu cầu trở thành hướng dẫn viên
Tạo yêu cầu trở thành chủ nhà
Hình 7 15 Activity Diagram Tạo yêu cầu trở thành chủ nhà
Xử lý yêu cầu trở thành hướng dẫn viên
Hình 7 16 Activity Diagram Xử lý yêu cầu trở thành hướng dẫn viên
7.34 Xử lý yêu cầu trở thành chủ nhà
Hình 7 17 Activity Diagram Xử lý yêu cầu trở thành chủ nhà
7.35 Thích/Bỏ thích bài đánh giá
Hình 7 18 Activity Diagram Thích/Bỏ thích bài đánh giá
7.36 Bình luận bài đánh giá
Hình 7 19 Activity Diagram Bình luận bài đánh giá
Trả lời bình luận bài đánh giá
Hình 7 20 Activity Diagram Trả lời bình luận bài đánh giá
Đặt lịch hướng dẫn viên
Hình 7 21 Activity Diagram Đặt lịch hướng dẫn viên
Cập nhật lịch đặt hướng dẫn viên
Hình 7 22 Activity Diagram Cập nhật lịch đặt hướng dẫn viên
Xoá lịch đặt hướng dẫn viên
Hình 7 23 Activity Diagram Xoá lịch đặt hướng dẫn viên
Huỷ lịch đặt hướng dẫn viên
Hình 7 24 Activity Diagram Huỷ lịch đặt hướng dẫn viên
Tạo báo cáo
Hình 7 25 Activity Diagram Tạo báo cáo
Tạo bài đánh giá
Hình 7 26 Activity Diagram Tạo bài đánh giá
Cập nhật bài đánh giá
Hình 7 27 Activity Diagram Cập nhật bài đánh giá
Xoá bài đánh giá
Hình 7 28 Activity Diagram Xoá bài đánh giá
BIỂU ĐỒ QUAN HỆ THỰC THỂ (ENTITY RELATIONSHIP DIAGRAM)
Hình 8 1 Biểu đồ quan hệ thực thể (ERD)
THIẾT KẾ CƠ SỞ DỮ LIỆU
Sơ đồ cơ sở dữ liệu
Bảng 9 1 Các bảng trong cơ sở dự liệu
Mô tả các bảng
9.2.1 Accounts (Tham khảo Tiểu luận chuyên ngành, trang 74)
9.2.2 Amenities (Tham khảo Tiểu luận chuyên ngành, trang 75)
9.2.3 Booking Rating (Tham khảo Tiểu luận chuyên ngành, trang 75)
9.2.4 Bookings (Tham khảo Tiểu luận chuyên ngành, trang 75)
9.2.5 Bookings Detail (Tham khảo Tiểu luận chuyên ngành, trang 76)
9.2.6 Payment Method (Tham khảo Tiểu luận chuyên ngành, trang 76)
9.2.7 Payment Status (Tham khảo Tiểu luận chuyên ngành, trang 76)
9.2.8 Payments (Tham khảo Tiểu luận chuyên ngành, trang 76)
9.2.9 Place Wishlist (Tham khảo Tiểu luận chuyên ngành, trang 77)
9.2.10 Places (Tham khảo Tiểu luận chuyên ngành, trang 77)
9.2.11 Policies (Tham khảo Tiểu luận chuyên ngành, trang 77)
9.2.12 Reports (Tham khảo Tiểu luận chuyên ngành, trang 78)
9.2.13 Requests (Tham khảo Tiểu luận chuyên ngành, trang 78)
9.2.14 Verify Emails (Tham khảo Tiểu luận chuyên ngành, trang 78)
9.2.15 Wishlists (Tham khảo Tiểu luận chuyên ngành, trang 78)
- Bảng này lưu trữ thông tin đặt tour hướng dẫn viên
`id`: Khóa chính của bảng, kiểu dữ liệu là int, tự động tăng
`booking_id`: Khóa ngoại tham chiếu đến bảng bookings, kiểu dữ liệu là int
`full_name`: Họ và tên, kiểu dữ liệu là varchar
`phone`: Số điện thoại, kiểu dữ liệu là varchar
`email`: Email, kiểu dữ liệu là varchar
`type`: Loại người đặt tour (1: người đặt tour, 2: người đi cùng), kiểu dữ liệu là int
`created_at`: Thời gian tạo bản ghi, kiểu dữ liệu là timestamp
`updated_at`: Thời gian cập nhật bản ghi, kiểu dữ liệu là timestamp
`guest_name`: Tên người đi cùng, kiểu dữ liệu là varchar
`content_to_vendor`: Nội dung ghi chú, kiểu dữ liệu là varchar
`total_price`: Tổng tiền, kiểu dữ liệu là float
`time_to`: Thời gian trả tour, kiểu dữ liệu là varchar
`time_from`: Thời gian nhận tour, kiểu dữ liệu là varchar
`number_of_guest`: Số lượng người đi cùng, kiểu dữ liệu là int
- Bảng này lưu trữ thông tin về lịch làm việc của các hướng dẫn viên
`id`: Khóa chính của bảng, kiểu dữ liệu là int, tự động tăng
`post_guide_id`: Khóa ngoại của bảng post_guides, kiểu dữ liệu là int
`guider_id`: Khóa ngoại của bảng guiders, kiểu dữ liệu là int
`note`: Ghi chú, kiểu dữ liệu là varchar
`date_from`: Thời điểm bắt đầu, kiểu dữ liệu là datetime
`date_to`: Thời điểm kết thúc, kiểu dữ liệu là datetime
`price_per_person`: Giá cho mỗi người, kiểu dữ liệu là int
`status`: Trạng thái, kiểu dữ liệu là tinyint(1)
`created_at`: Thời gian tạo bản ghi, kiểu dữ liệu là datetime
`updated_at`: Thời gian cập nhật bản ghi, kiểu dữ liệu là datetime
`max_guest`: Số lượng khách tối đa, kiểu dữ liệu là int
- Bảng này lưu trữ thông tin về các bình luận của người dùng
`id`: Khóa chính của bảng, kiểu dữ liệu là int, tự động tăng
`content`: Nội dung bình luận, kiểu dữ liệu là varchar
`image`: Đường dẫn ảnh đính kèm, kiểu dữ liệu là varchar
`videos`: Đường dẫn video đính kèm, kiểu dữ liệu là varchar
`account_id`: Khóa ngoại của bảng accounts, kiểu dữ liệu là int
`created_at`: Thời gian tạo bản ghi, kiểu dữ liệu là timestamp, mặc định là
`post_review_id`: Khóa ngoại của bảng post_reviews, kiểu dữ liệu là int
- Bảng này lưu trữ thông tin về việc người dùng thích hoặc không thích các bài đăng đánh giá
`id`: Khóa chính của bảng, kiểu dữ liệu là int, tự động tăng
`account_id`: Khóa ngoại của bảng accounts, kiểu dữ liệu là int
`post_review_id`: Khóa ngoại của bảng post_reviews, kiểu dữ liệu là int
`status`: Trạng thái thích (1: thích; 2: bỏ thích), kiểu dữ liệu là tinyint
`created_at`: Thời gian tạo bản ghi, kiểu dữ liệu là timestamp, mặc định là thời điểm hiện tại
`updated_at`: Thời gian cập nhật bản ghi, kiểu dữ liệu là timestamp, tự động cập nhật khi có thay đổi
- Bảng này lưu trữ thông tin về các bài đăng hướng dẫn
id: Khóa chính của bảng, kiểu dữ liệu là int, tự động tăng
post_owner_id: Khóa ngoại của bảng accounts, kiểu dữ liệu là int, tham chiếu đến người đăng bài
topic_id: Khóa ngoại của bảng topics, kiểu dữ liệu là int, tham chiếu đến chủ đề của bài đăng
title: Tiêu đề của bài đăng, kiểu dữ liệu là varchar
description: Mô tả chi tiết về bài đăng, kiểu dữ liệu là text
cover: Ảnh bìa của bài đăng, kiểu dữ liệu là varchar
lat: Vĩ độ (latitude), kiểu dữ liệu là double
lng: Kinh độ (longitude), kiểu dữ liệu là double
created_at: Thời gian tạo bài đăng, kiểu dữ liệu là timestamp, mặc định là thời điểm hiện tại
updated_at: Thời gian cập nhật bài đăng, kiểu dữ liệu là timestamp, tự động cập nhật khi có thay đổi
country: Quốc gia của địa chỉ, kiểu dữ liệu là varchar
state: Tỉnh/thành phố của địa chỉ, kiểu dữ liệu là varchar
district: Quận/huyện của địa chỉ, kiểu dữ liệu là varchar
address: Địa chỉ chi tiết, kiểu dữ liệu là varchar
languages: Ngôn ngữ hướng dẫn, kiểu dữ liệu là varchar
schedule: Lịch trình hướng dẫn, kiểu dữ liệu là varchar
- Bảng này lưu trữ thông tin về các đánh giá của bài đăng
`id`: Khóa chính của bảng, kiểu dữ liệu là int, tự động tăng
`post_owner_id`: Khóa ngoại của bảng accounts, kiểu dữ liệu là int, tham chiếu đến người đăng bài
`title`: Tiêu đề của đánh giá, kiểu dữ liệu là varchar
`topic`: Chủ đề của đánh giá, kiểu dữ liệu là int
`content`: Nội dung chi tiết của đánh giá, kiểu dữ liệu là text
`img`: Ảnh minh họa cho đánh giá, kiểu dữ liệu là varchar
`videos`: Video liên quan đến đánh giá, kiểu dữ liệu là varchar
`lat`: Vĩ độ (latitude), kiểu dữ liệu là double
`lng`: Kinh độ (longitude), kiểu dữ liệu là double
`created_at`: Thời gian tạo đánh giá, kiểu dữ liệu là timestamp, mặc định là thời điểm hiện tại
`updated_at`: Thời gian cập nhật đánh giá, kiểu dữ liệu là timestamp, tự động cập nhật khi có thay đổi
`country`: Quốc gia của địa chỉ, kiểu dữ liệu là varchar
`state`: Tỉnh/thành phố của địa chỉ, kiểu dữ liệu là varchar
`district`: Quận/huyện của địa chỉ, kiểu dữ liệu là varchar
- Bảng này lưu trữ thông tin về các phản hồi của bình luận
`content`: Nội dung của phản hồi, kiểu dữ liệu là varchar
`image`: Ảnh minh họa cho phản hồi, kiểu dữ liệu là varchar
`videos`: Video liên quan đến phản hồi, kiểu dữ liệu là varchar
`account_id`: Khóa ngoại của bảng accounts, kiểu dữ liệu là int, tham chiếu đến tài khoản của người phản hồi
`created_at`: Thời gian tạo phản hồi, kiểu dữ liệu là timestamp, mặc định là thời điểm hiện tại
`updated_at`: Thời gian cập nhật phản hồi, kiểu dữ liệu là timestamp, tự động cập nhật khi có thay đổi
- Bảng này lưu trữ các báo cáo về đối tượng cụ thể
`id`: Khóa chính của bảng, kiểu dữ liệu là int, tự động tăng
`object_id`: ID của đối tượng được báo cáo, kiểu dữ liệu là int, không được NULL
`object_type`: Loại đối tượng (1: bài đăng, 2: bình luận, 3: người dùng, v.v.), kiểu dữ liệu là int, không được NULL
`type`: Loại báo cáo, kiểu dữ liệu là varchar
`description`: Mô tả chi tiết về báo cáo, kiểu dữ liệu là text
`status_id`: Trạng thái xử lý báo cáo, kiểu dữ liệu là int
`videos`: Video liên quan đến báo cáo, kiểu dữ liệu là text
`images`: Hình ảnh liên quan đến báo cáo, kiểu dữ liệu là text
`created_at`: Thời gian tạo báo cáo, kiểu dữ liệu là timestamp, mặc định là thời điểm hiện tại
`updated_at`: Thời gian cập nhật báo cáo, kiểu dữ liệu là timestamp, tự động cập nhật khi có thay đổi
`user_id`: Khóa ngoại của bảng users, tham chiếu đến người dùng tạo báo cáo, kiểu dữ liệu là int
- Bảng này lưu trữ thông tin về việc người dùng thích hoặc không thích các bài đăng đánh giá
`id`: Khóa chính của bảng, kiểu dữ liệu là int, tự động tăng
- Bảng này lưu trữ thông tin yêu cầu từ người dùng để trở thành hướng dẫn viên
`id`: Khóa chính của bảng, kiểu dữ liệu là int, tự động tăng
`user_id`: ID của người dùng, không được NULL
`full_name`: Họ và tên đầy đủ của người yêu cầu, kiểu dữ liệu là varchar
`username`: Tên người dùng, kiểu dữ liệu là varchar
`email`: Địa chỉ email của người yêu cầu, kiểu dữ liệu là varchar, không được NULL
`phone`: Số điện thoại của người yêu cầu, kiểu dữ liệu là varchar
`dob`: Ngày sinh của người yêu cầu, kiểu dữ liệu là varchar
`address`: Địa chỉ của người yêu cầu, kiểu dữ liệu là varchar
`created_at`: Thời điểm tạo bản ghi, kiểu dữ liệu là timestamp, mặc định là thời điểm hiện tại
`updated_at`: Thời điểm cập nhật bản ghi, kiểu dữ liệu là timestamp, tự động cập nhật khi có thay đổi
`description`: Mô tả về người yêu cầu, kiểu dữ liệu là varchar
`experience`: Kinh nghiệm của người yêu cầu, kiểu dữ liệu là varchar
`reason`: Lý do yêu cầu, kiểu dữ liệu là varchar
`goal_of_travel`: Mục đích của chuyến đi, kiểu dữ liệu là varchar
`languages`: Ngôn ngữ nói được, kiểu dữ liệu là varchar
`status`: Trạng thái của yêu cầu, kiểu dữ liệu là varchar
- Bảng này lưu trữ thông tin yêu cầu từ người dùng để trở thành nhà cung cấp dịch
`full_name`: Họ và tên đầy đủ của người yêu cầu, kiểu dữ liệu là varchar
`username`: Tên người dùng, kiểu dữ liệu là varchar
`email`: Địa chỉ email của người yêu cầu, kiểu dữ liệu là varchar, không được NULL
`phone`: Số điện thoại của người yêu cầu, kiểu dữ liệu là varchar
`dob`: Ngày sinh của người yêu cầu, kiểu dữ liệu là varchar
`address`: Địa chỉ của người yêu cầu, kiểu dữ liệu là varchar
`description`: Mô tả về người yêu cầu, kiểu dữ liệu là varchar
`experience`: Kinh nghiệm của người yêu cầu, kiểu dữ liệu là varchar
`status`: Trạng thái của yêu cầu, kiểu dữ liệu là varchar
`created_at`: Thời điểm tạo bản ghi, kiểu dữ liệu là timestamp, mặc định là thời điểm hiện tại
`updated_at`: Thời điểm cập nhật bản ghi, kiểu dữ liệu là timestamp, tự động cập nhật khi có thay đổi.
KIẾN TRÚC HỆ THỐNG
- Sử dụng 1 server database MySQL
- Sử dụng 1 server Redis để caching data và chạy cronjob, task
- Tất cả server đều được host lên các dịch vụ trên Aws
- Các server sử dụng ở Aws: IAM, ECS, EC2, S3, CloudFront, RDS
Hình 10 1 Kiến trúc hệ thống
CÁC CÔNG NGHỆ SỬ DỤNG
Typescript
TypeScript là một ngôn ngữ lập trình mã nguồn mở do Microsoft phát triển, là một phiên bản mở rộng của JavaScript Nó kết hợp các tính năng của JavaScript cùng với kiểu dữ liệu tĩnh tốt hơn, giúp tăng cường tính tin cậy và dễ bảo trì của mã nguồn TypeScript trở thành một lựa chọn phổ biến cho việc phát triển ứng dụng web lớn và phức tạp
11.2.2 Kiểu dữ liệu tĩnh (Static Typing)
Một trong những đặc điểm nổi bật nhất của TypeScript là khả năng xác định kiểu dữ liệu của biến, tham số và giá trị trả về của hàm Điều này giúp phát hiện lỗi kiểu dữ liệu tại thời điểm biên dịch thay vì phải chờ đến thời điểm chạy Nhờ có kiểu dữ liệu tĩnh, mã nguồn trở nên dễ đọc hơn và dễ bảo trì hơn
11.2.3 Tích Hợp Tốt với JavaScript
TypeScript được xây dựng trên cú pháp của JavaScript, cho phép nhà phát triển dễ dàng chuyển đổi từ mã JavaScript sang TypeScript và ngược lại Điều này có nghĩa là bạn có thể sử dụng hầu hết các thư viện và frameworks JavaScript mà không gặp vấn đề lớn TypeScript cũng hỗ trợ các tính năng mới nhất của JavaScript như ES6 và ES7
11.2.4 Kiểm Tra Lỗi Tại Thời Điểm Biên Dịch
TypeScript cung cấp một quy trình biên dịch mạnh mẽ, cho phép phát hiện và báo cáo lỗi tại thời điểm biên dịch Điều này giúp giảm thiểu thời gian và công sức cần thiết để debug trong quá trình phát triển Các lỗi có thể được phát hiện và sửa chữa trước khi triển khai mã lên production, giúp tăng tính ổn định của ứng dụng
11.2.5 Code IntelliSense và Auto-completion
TypeScript tích hợp tốt với các công cụ phát triển như Visual Studio Code, cung cấp các tính năng như IntelliSense và auto-completion Điều này giúp tăng tốc độ phát triển bằng cách cung cấp gợi ý về cú pháp, tên biến, phương thức và thuộc tính khi bạn viết code
11.2.6 Mở Rộng Có Thể Điều Chỉnh (Configurable)
TypeScript cung cấp các tùy chọn cấu hình linh hoạt, cho phép bạn tinh chỉnh cách compiler hoạt động Bạn có thể cấu hình TypeScript để phù hợp với dự án cụ thể của mình và tối ưu hóa hiệu suất và trải nghiệm phát triển
11.2.7 Quản Lý Dự Án Tốt Hơn với Modules
TypeScript hỗ trợ sử dụng modules, cho phép bạn tổ chức mã của mình thành các phần nhỏ và tái sử dụng chúng một cách dễ dàng Điều này giúp quản lý dự án trở nên hiệu quả hơn và giảm thiểu sự phức tạp trong quá trình phát triển
TypeScript là một công cụ mạnh mẽ cho việc phát triển website, với sức mạnh của kiểu dữ liệu tĩnh, tích hợp tốt với JavaScript và khả năng giúp bạn xây dựng các ứng dụng web hiệu quả và dễ bảo trì Bằng cách sử dụng TypeScript, bạn có thể tăng cường sự tin cậy và hiệu suất của dự án phát triển web của mình.
Ngôn ngữ lập trình Golang (Tham khảo Tiểu luận chuyên ngành, trang 84)
MySQL và thư viện Gorm (Tham khảo Tiểu luận chuyên ngành, trang 86)
Redis
- In-Memory Storage: Redis lưu trữ dữ liệu trong bộ nhớ RAM, giúp truy xuất dữ liệu cực kỳ nhanh chóng
- Data Structures: Redis hỗ trợ nhiều cấu trúc dữ liệu khác nhau như strings, lists, sets, sorted sets, hashes, bitmaps, hyperloglogs, và streams
- Persistence: Redis hỗ trợ tính năng lưu trữ dữ liệu ra đĩa (persistence) bằng cách sử dụng các snapshot (RDB) hoặc log (AOF) để đảm bảo dữ liệu không bị mất
- Replication: Redis hỗ trợ replication, cho phép tạo ra các bản sao dữ liệu để đảm bảo tính sẵn sàng cao (high availability) và khả năng chịu lỗi (fault-tolerance)
- High Availability and Scalability: Redis có thể được cấu hình theo mô hình cluster để cải thiện khả năng mở rộng (scalability) và độ sẵn sàng (availability)
11.6.2 Ứng dụng của Redis trong dự án
- Caching: Redis thường được sử dụng để cache dữ liệu, giảm tải cho cơ sở dữ liệu chính và tăng tốc độ phản hồi của ứng dụng Ví dụ, các trang web có thể cache các trang đã được render hoặc các truy vấn cơ sở dữ liệu phức tạp
- Session Store: Redis thường được sử dụng để lưu trữ session của người dùng trong các ứng dụng web nhờ vào tốc độ truy xuất nhanh và khả năng lưu trữ dữ liệu tạm thời
- Message Broker: Redis hỗ trợ pub/sub (publish/subscribe) và stream, cho phép nó hoạt động như một message broker, giúp các thành phần trong hệ thống giao tiếp với nhau một cách hiệu quả
- Leaderboard/Counting: Với các cấu trúc dữ liệu như sorted sets, Redis là lựa chọn lý tưởng để xây dựng các hệ thống xếp hạng (leaderboards) hoặc các bộ đếm (counters)
- Real-time Analytics: Redis có thể được sử dụng để thu thập và phân tích dữ liệu thời gian thực nhờ vào tốc độ xử lý nhanh và các cấu trúc dữ liệu mạnh mẽ
11.6.3 Ưu và nhược điểm của Redis Ưu điểm:
- Tốc độ cao: Do dữ liệu được lưu trữ trong bộ nhớ
- Đa dạng cấu trúc dữ liệu: Hỗ trợ nhiều loại cấu trúc dữ liệu phức tạp
- Dễ sử dụng: API của Redis rất đơn giản và dễ sử dụng
- Hỗ trợ tính năng phong phú: Như replication, persistence, pub/sub và clustering Nhược điểm:
- Chi phí bộ nhớ cao: Do dữ liệu được lưu trữ trong RAM
- Khả năng mở rộng: Dù Redis hỗ trợ clustering, việc mở rộng có thể phức tạp hơn so với một số giải pháp cơ sở dữ liệu khác
- Dữ liệu không bền vững hoàn toàn: Nếu không được cấu hình đúng, có thể mất dữ liệu trong trường hợp sự cố hệ thống
Redis là một công cụ mạnh mẽ và linh hoạt, giúp cải thiện hiệu suất và khả năng mở rộng của ứng dụng trong nhiều kịch bản khác nhau.
THIẾT KẾ GIAO DIỆN
Giao diện Người dùng
Hình 12 1 Giao diện trang chủ
Hình 12 2 Hộp thoại lọc địa điểm
Hình 12 3 Hộp thoại lọc theo thời điểm
Hình 12 4 Hộp thoại lọc số lượng khách và số giường
Hình 12 5 Hộp thoại lọc giá phòng tối thiểu và tối đa
Hình 12 6 Hộp thoại Đăng nhập
12.1.4 Hộp thoại Đăng ký (Tham khảo Tiểu luận chuyên ngành, trang 93)
12.1.5 Hộp thoại Quên mật khẩu (Tham khảo Tiểu luận chuyên ngành, trang 94)
12.1.6 Trang Quản lý thông tin cá nhân
Hình 12 7 Trang Quản lý thông tin cá nhân
12.1.7 Trang Thông tin chủ nhà
Hình 12 8 Xem thông tin chủ nhà
Hình 12 9 Chỉnh sửa thông tin chủ nhà
Hình 12 10 Chỉnh sửa đơn đăng ký trở thành chủ nhà
12.1.8 Hộp thoại Tổng hợp bình luận của chủ nhà (Tham khảo Tiểu luận chuyên ngành, trang 95)
12.1.9 Hộp thoại Danh sách phòng của chủ nhà (Tham khảo Tiểu luận chuyên ngành, trang 96)
12.1.10 Trang Đổi mật khẩu (Tham khảo Tiểu luận chuyên ngành, trang 96)
12.1.11 Trang Chi tiết phòng (Tham khảo Tiểu luận chuyên ngành, trang 97)
Hình 12 11 Trang Chi tiết phòng 1
Hình 12 12 Trang Chi tiết phòng 2
Hình 12 13 Trang Chi tiết phòng 3
12.1.12 Trang Đặt phòng (Tham khảo Tiểu luận chuyên ngành, trang 99)
12.1.13 Trang Xác nhận đặt phòng thành công (Tham khảo Tiểu luận chuyên ngành, trang 100)
12.1.14 Trang Quản lý đặt phòng (Tham khảo Tiểu luận chuyên ngành, trang 101)
12.1.15 Trang Thông tin đặt phòng chi tiết (Tham khảo Tiểu luận chuyên ngành, trang 102)
12.1.16 Hộp thoại Danh sách yêu thích (Tham khảo Tiểu luận chuyên ngành, trang
12.1.17 Trang Chi tiết danh sách yêu thích (Tham khảo Tiểu luận chuyên ngành, trang 103)
12.1.18 Hộp thoại gửi báo cáo
Hình 12 14 Hộp thoại gửi báo cáo 1
Hình 12 15 Hộp thoại gửi báo cáo 2
Hình 12 16 Hộp thoại gửi báo cáo 3
12.1.19 Hộp thoại gửi yêu cầu trở thành chủ nhà
Hình 12 17 Hộp thoại gửi yêu cầu trở thành chủ nhà 1
Hình 12 18 Hộp thoại gửi yêu cầu trở thành chủ nhà 2
12.1.20 Hộp thoại gửi yêu cầu trở thành hướng dẫn viên
Hình 12 19 Hộp thoại gửi yêu cầu trở thành hướng dẫn viên 1
Hình 12 20 Hộp thoại gửi yêu cầu trở thành hướng dẫn viên 2
12.1.21 Trang cộng đồng review dịch vụ
Hình 12 21 Trang cộng đồng review dịch vụ 1
Hình 12 22 Trang cộng đồng review dịch vụ 2
12.1.22 Trang chi tiết bài review
Hình 12 23 Trang chi tiết bài review
12.1.23 Hộp thoại chia sẻ lên mạng xã hội
Hình 12 24 Hộp thoại chia sẻ lên mạng xã hội
12.1.24 Trang quản lý bài review dịch vụ cá nhân
Hình 12 25 Trang quản lý bài review dịch vụ cá nhân
12.1.25 Hộp thoại thêm và chỉnh sửa bài review dịch vụ cá nhân
Hình 12 26 Hộp thoại thêm và chỉnh sửa bài review dịch vụ cá nhân 1
Hình 12 27 Hộp thoại thêm và chỉnh sửa bài review dịch vụ cá nhân 2
Hình 12 28 Hộp thoại thêm và chỉnh sửa bài review dịch vụ cá nhân 3
12.1.26 Trang bài đăng hướng dẫn viên
Hình 12 29 Trang bài đăng hướng dẫn viên
Hình 12 30 Trang bài đăng hướng dẫn viên
12.1.27 Trang Chi tiết bài đăng hướng dẫn viên
Hình 12 31 Trang Chi tiết bài đăng hướng dẫn viên 1
Hình 12 32 Trang Chi tiết bài đăng hướng dẫn viên 2
Hình 12 33 Trang Chi tiết bài đăng hướng dẫn viên 3
Hình 12 34 Trang Chi tiết bài đăng hướng dẫn viên 4
12.1.28 Trang Đặt lịch hướng dẫn viên
Hình 12 35 Trang Đặt lịch hướng dẫn viên 1
Hình 12 36 Trang Đặt lịch hướng dẫn viên 2
12.1.29 Trang Xác nhận đặt lịch hướng dẫn viên thành công
Hình 12 37 Trang xác nhận đặt lịch hướng dẫn viên thành công
Hình 12 38 Trang thanh toán bằng Momo 1
Hình 12 39 Trang thanh toán bằng Momo 2
Giao diện Chủ nhà
12.2.1 Hộp thoại Tạo phòng mới (Tham khảo Tiểu luận chuyên ngành, trang 104) 12.2.2 Trang Quản lý phòng (Tham khảo Tiểu luận chuyên ngành, trang 106)
12.2.3 Trang Chi tiết phòng (Tham khảo Tiểu luận chuyên ngành, trang 107)
12.2.4 Trang Quản lý cơ sở vật chất của phòng (Tham khảo Tiểu luận chuyên ngành, trang 108)
12.2.5 Trang Quản lý quy định của phòng (Tham khảo Tiểu luận chuyên ngành, trang
12.2.6 Trang Quản lý thanh toán
Hình 12 41 Trang Quản lý thanh toán
12.2.7 Trang Quản lý doanh thu
Hình 12 42 Trang Quản lý doanh thu
Giao diện Hướng dẫn viên
12.3.1 Hộp thoại Tạo bài đăng mới
Hình 12 43 Hộp thoại Tạo bài đăng mới 1
Hình 12 44 Hộp thoại Tạo phòng mới 2
Hình 12 45 Hộp thoại Tạo phòng mới 3
Hình 12 46 Hộp thoại Tạo phòng mới 4
12.3.2 Trang Quản lý bài đăng
Hình 12 47 Trang Quản lý bài đăng
12.3.3 Trang Chi tiết bài đăng
Hình 12 48 Trang Chi tiết bài đăng 1
Hình 12 49 Trang Chi tiết bài đăng 2
Hình 12 50 Trang Chi tiết bài đăng 3
12.3.4 Trang Quản lý tiện ích
Hình 12 51 Trang Quản lý tiện ích
12.3.5 Trang Quản lý chính sách
Hình 12 52 Trang Quản lý chính sách
12.3.6 Trang Quản lý thanh toán
Hình 12 53 Trang Quản lý thanh toán
12.3.7 Trang Quản lý doanh thu
Hình 12 54 Trang Quản lý doanh thu
Giao diện Quản trị viên
12.4.1 Trang Quản lý tài khoản (Tham khảo Tiểu luận chuyên ngành, trang 109) 12.4.2 Trang Quản lý yêu cầu trở thành hướng dẫn viên
Hình 12 55 Trang Quản lý yêu cầu trở thành hướng dẫn viên
12.4.3 Trang Chi tiết yêu cầu trở thành hướng dẫn viên
Hình 12 56 Trang Chi tiết yêu cầu trở thành hướng dẫn viên
12.4.4 Trang Quản lý yêu cầu trở thành chủ nhà
Hình 12 57 Trang Quản lý yêu cầu trở thành chủ nhà
12.4.5 Trang Chi tiết yêu cầu trở thành chủ nhà
Hình 12 58 Trang Chi tiết yêu cầu trở thành chủ nhà
12.4.6 Trang Quản lý báo cáo
Hình 12 59 Trang Quản lý báo cáo
12.4.7 Trang Chi tiết báo cáo
Hình 12 60 Trang Chi tiết báo cáo 1
Hình 12 61 Trang Chi tiết báo cáo 2
CÀI ĐẶT HỆ THỐNG
Truy cập bằng web đã được triển khai
Yêu cầu hệ thống
Để có thể chạy được ứng dụng, máy tính phải có các yêu cầu sau:
- Front-end: Cài đặt NodeJS 18
Cài đặt phần mềm
Bước 1: Clone hoặc tải mã nguồn theo đường dẫn:
− Back-end: https://github.com/lamhieo02/ParadiseBookingApp
− Front-end: https://github.com/MinhTuongLe/paradise_booking_typescript.git
Bước 2: Cài đặt thư viện:
− Back-end: Sau khi cài đặt ngôn ngữ golang từ https://go.dev/doc/install, tiến hành chạy lệnh `go mod tidy` để cài các package cần thiết
− Front-end: Tại thư mục của source code, mở cửa sổ Terminal và gõ lệnh: npm install –global yarn để cài đặt yarn Sau đó nhập yarn để cài đặt thư viện
Back-end: Chạy lệnh go run main.go để thực hiện chạy server
Front-end: Trong Terminal của source code front-end, gõ lệnh yarn dev.
KIỂM THỬ
Kế hoạch kiểm thử (Tham khảo Tiểu luận chuyên ngành, trang 111)
Auto test (kiểm thử tự động) bằng Cypress là một phương pháp phổ biến và mạnh mẽ để kiểm thử ứng dụng web Dưới đây là một báo cáo tóm tắt về việc sử dụng Cypress cho kiểm thử tự động:
Cypress là một công cụ kiểm thử tự động mã nguồn mở được thiết kế dành riêng cho các ứng dụng web Nó cho phép các lập trình viên và kiểm thử viên viết các kịch bản kiểm thử để đảm bảo chất lượng của ứng dụng.
14.4.2 Các tính năng chính của Cypress
- Dễ cài đặt và cấu hình: Cypress có thể được cài đặt dễ dàng thông qua npm và cấu hình đơn giản bằng tệp cypress.json
- Thời gian thực: Cypress cung cấp giao diện người dùng thời gian thực để xem các kịch bản kiểm thử chạy và các kết quả kiểm thử
- Kiểm thử đầu cuối (end-to-end): Hỗ trợ kiểm thử từ giao diện người dùng đến backend
- Tích hợp tốt với CI/CD: Dễ dàng tích hợp vào các pipeline CI/CD để tự động hóa quá trình kiểm thử
- API mạnh mẽ: Cung cấp nhiều API mạnh mẽ để tương tác với DOM, thực hiện các thao tác như click, nhập liệu, và kiểm tra trạng thái của các phần tử.
Chiến lược thực hiện (Tham khảo Tiểu luận chuyên ngành, trang 112)
Auto test (kiểm thử tự động) bằng Cypress là một phương pháp phổ biến và mạnh mẽ để kiểm thử ứng dụng web Dưới đây là một báo cáo tóm tắt về việc sử dụng Cypress cho kiểm thử tự động:
Cypress là một công cụ kiểm thử tự động mã nguồn mở được thiết kế dành riêng cho các ứng dụng web Nó cho phép các lập trình viên và kiểm thử viên viết các kịch bản kiểm thử để đảm bảo chất lượng của ứng dụng.
14.4.2 Các tính năng chính của Cypress
- Dễ cài đặt và cấu hình: Cypress có thể được cài đặt dễ dàng thông qua npm và cấu hình đơn giản bằng tệp cypress.json
- Thời gian thực: Cypress cung cấp giao diện người dùng thời gian thực để xem các kịch bản kiểm thử chạy và các kết quả kiểm thử
- Kiểm thử đầu cuối (end-to-end): Hỗ trợ kiểm thử từ giao diện người dùng đến backend
- Tích hợp tốt với CI/CD: Dễ dàng tích hợp vào các pipeline CI/CD để tự động hóa quá trình kiểm thử
- API mạnh mẽ: Cung cấp nhiều API mạnh mẽ để tương tác với DOM, thực hiện các thao tác như click, nhập liệu, và kiểm tra trạng thái của các phần tử.
Kiểm thử tự động
Auto test (kiểm thử tự động) bằng Cypress là một phương pháp phổ biến và mạnh mẽ để kiểm thử ứng dụng web Dưới đây là một báo cáo tóm tắt về việc sử dụng Cypress cho kiểm thử tự động:
Cypress là một công cụ kiểm thử tự động mã nguồn mở được thiết kế dành riêng cho các ứng dụng web Nó cho phép các lập trình viên và kiểm thử viên viết các kịch bản kiểm thử để đảm bảo chất lượng của ứng dụng.
14.4.2 Các tính năng chính của Cypress
- Dễ cài đặt và cấu hình: Cypress có thể được cài đặt dễ dàng thông qua npm và cấu hình đơn giản bằng tệp cypress.json
- Thời gian thực: Cypress cung cấp giao diện người dùng thời gian thực để xem các kịch bản kiểm thử chạy và các kết quả kiểm thử
- Kiểm thử đầu cuối (end-to-end): Hỗ trợ kiểm thử từ giao diện người dùng đến backend
- Tích hợp tốt với CI/CD: Dễ dàng tích hợp vào các pipeline CI/CD để tự động hóa quá trình kiểm thử
- API mạnh mẽ: Cung cấp nhiều API mạnh mẽ để tương tác với DOM, thực hiện các thao tác như click, nhập liệu, và kiểm tra trạng thái của các phần tử
14.4.3 Ưu nhược điểm của Cypress
Bảng 14 1 Ưu nhược diểm của Cypress Ưu điểm Nhược điểm
✔ Cypress rất dễ cài đặt và sử dụng, không cần cấu hình phức tạp Chỉ cần chạy lệnh cài đặt và mở Cypress là có thể bắt đầu viết kiểm thử
✔ Cypress hoạt động trực tiếp trong trình duyệt, giúp các bài kiểm thử chạy nhanh hơn và ít gặp các vấn đề không ổn định thường thấy ở công cụ kiểm thử khác
✔ Cypress cung cấp công cụ debug mạnh mẽ với khả năng xem trạng thái hiện tại của ứng dụng tại mỗi bước của kiểm thử Các thông báo lỗi rõ ràng và dễ hiểu
✔ Cypress có chế độ xem thời gian thực, cho phép bạn theo dõi quá trình thực thi của các bài kiểm thử ngay khi chúng chạy, giúp phát hiện và sửa lỗi nhanh chóng
✔ Giao diện của Cypress rất trực quan và dễ sử dụng, cho phép xem các kiểm thử và kết quả một cách dễ dàng
✔ Cypress dễ dàng tích hợp với các công cụ CI/CD như Jenkins, CircleCI, Travis
CI, và các công cụ quản lý dự án khác
✔ Cypress hỗ trợ đầy đủ các loại kiểm thử như kiểm thử đơn vị, kiểm thử tích hợp, và kiểm thử end-to-end × Cypress chủ yếu hỗ trợ các trình duyệt dựa trên Chromium như Google Chrome và Microsoft Edge Hỗ trợ cho Firefox vẫn còn hạn chế và không hỗ trợ Internet Explorer × Cypress không hỗ trợ việc kiểm thử với nhiều tab trình duyệt cùng một lúc, điều này có thể gây khó khăn cho một số kịch bản kiểm thử phức tạp × Mặc dù Cypress có thể giả lập kích thước màn hình di động, nhưng nó không hỗ trợ đầy đủ các tính năng kiểm thử trên các thiết bị di động thực tế × So với một số công cụ kiểm thử khác, Cypress có ít tùy chọn mở rộng hơn và phụ thuộc nhiều vào cộng đồng để phát triển thêm các plugin và tích hợp × Cypress có thể gặp khó khăn trong việc quản lý và tái sử dụng dữ liệu giả lập (fixtures) cho các bài kiểm thử phức tạp
14.4.4 Kết quả Kiểm thử tự động của dự án
Hình 14 1 Kết quả kiểm thử 1
Hình 14 2 Kết quả kiểm thử 2
Hình 14 3 Kết quả kiểm thử 3
Hình 14 4 Kết quả kiểm thử 4
Kiểm thử đơn vị
Unit test là một phương pháp kiểm thử phần mềm trong đó các thành phần nhỏ nhất của phần mềm, gọi là đơn vị (unit), được kiểm tra độc lập Mục đích của unit test là đảm bảo rằng mỗi đơn vị phần mềm hoạt động chính xác theo thiết kế
14.5.2 Lợi ích của unit test?
- Phát hiện lỗi sớm: Unit test giúp phát hiện lỗi ngay từ giai đoạn đầu của quá trình phát triển
- Cải thiện chất lượng mã nguồn: Unit test đảm bảo rằng các đơn vị mã nguồn hoạt động đúng, từ đó giúp cải thiện chất lượng tổng thể của phần mềm
- Tài liệu mã nguồn: Unit test có thể đóng vai trò như tài liệu cho mã nguồn, giúp lập trình viên mới hiểu rõ hơn về chức năng của mã
- Dễ dàng bảo trì: Unit test giúp việc bảo trì mã nguồn trở nên dễ dàng hơn, do các lỗi có thể được phát hiện và sửa chữa nhanh chóng
14.5.3 Nhược điểm của unit test?
- Thời gian phát triển: Việc viết và duy trì các unit test đòi hỏi thêm thời gian và công sức Điều này có thể làm chậm tiến độ phát triển, đặc biệt là trong các dự án nhỏ hoặc khi đội ngũ phát triển có ít tài nguyên
- Chi phí bảo trì: Khi mã nguồn thay đổi, các unit test cũng cần được cập nhật tương ứng Việc này có thể gây ra chi phí bảo trì cao, đặc biệt khi có nhiều thay đổi lớn trong mã nguồn
- Khó khăn trong việc viết test: Đôi khi, việc viết unit test cho các module phức tạp hoặc có nhiều phụ thuộc có thể rất khó khăn Điều này đặc biệt đúng với các hệ thống có kiến trúc không rõ ràng hoặc mã nguồn viết kém chất lượng
- Không phát hiện lỗi hiệu suất: Unit test không kiểm tra được các vấn đề về hiệu suất như tốc độ xử lý, sử dụng tài nguyên, hay khả năng mở rộng của hệ thống
14.5.4 Phương pháp kiểm thử BDD (Behavior-driven Development)
Behavior-driven Development (BDD) là một phương pháp phát triển phần mềm tập trung vào việc mô tả hành vi của hệ thống dưới dạng các kịch bản kiểm thử BDD nhằm cải thiện sự giao tiếp giữa các bên liên quan (nhà phát triển, người kiểm thử, khách hàng) bằng cách sử dụng ngôn ngữ tự nhiên để mô tả các yêu cầu và hành vi của hệ thống
- Cải thiện sự giao tiếp: BDD sử dụng ngôn ngữ tự nhiên để mô tả các yêu cầu và hành vi của phần mềm, giúp cải thiện sự giao tiếp giữa các bên liên quan
- Tăng tính rõ ràng: Các yêu cầu và hành vi được mô tả một cách rõ ràng và dễ hiểu, giúp tránh hiểu lầm và thiếu sót
- Phát hiện lỗi sớm: Giống như TDD, BDD giúp phát hiện lỗi sớm trong quá trình phát triển phần mềm
- Xác định hành vi cần kiểm tra: Mô tả hành vi của hệ thống bằng ngôn ngữ tự nhiên, thường sử dụng các câu chuyện người dùng (user stories)
- Viết kịch bản kiểm tra: Sử dụng ngôn ngữ Gherkin để viết các kịch bản kiểm tra (scenarios) dựa trên hành vi đã xác định
- Triển khai kịch bản kiểm tra: Sử dụng các framework BDD để triển khai và thực hiện các kịch bản kiểm tra
Kết quả kiểm thử theo modules
Hình 14 5 Kết quả kiểm thử theo module Account
Hình 14 6 Kết quả kiểm thử theo module Amenity
Hình 14 7 Kết quả kiểm thử theo module Booking
Hình 14 8 Kết quả kiểm thử theo module Booking Guider
Hình 14 9 Kết quả kiểm thử theo module BookingRating
Hình 14 10 Kết quả kiểm thử theo module CalendarGuider
Hình 14 11 Kết quả kiểm thử theo module Comment
Hình 14 12 Kết quả kiểm thử theo module LikePostReview
Hình 14 13 Kết quả kiểm thử theo module Payment
Hình 14 14 Kết quả kiểm thử theo module Place