Bối cảnh và vấn đề nghiên cứu
Quá trình đô thị hóa nhanh chóng cùng với sự hình thành và mở rộng của các khu công nghiệp, khu đô thị lớn tại Việt Nam đã kéo theo làn sóng di cư mạnh mẽ của sinh viên, người lao động và người dân nhập cư. Thực trạng này tạo ra áp lực lớn về nhu cầu nhà ở và phòng trọ cho thuê. Tuy nhiên, việc tìm kiếm chỗ ở phù hợp với điều kiện sinh hoạt và khả năng tài chính của người thuê vẫn gặp nhiều khó khăn. Phương thức tìm kiếm truyền thống qua tờ rơi quảng cáo, người quen giới thiệu hoặc các trang tin tức rao vặt thiếu cập nhật thường tốn nhiều thời gian, công sức và tiềm ẩn rủi ro về tính xác thực của thông tin.
Đề tài "Xây dựng website tìm kiếm nhà trọ" do nhóm sinh viên ngành Công nghệ Thông tin, chuyên ngành Công nghệ Phần mềm thuộc Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh thực hiện (thời gian từ 20/02/2024 đến 10/07/2024) nhằm giải quyết các bất cập trên bằng một giải pháp ứng dụng web trực tuyến.
Mục tiêu nghiên cứu và phát triển của đề tài được xác định cụ thể gồm:
- Xây dựng giao diện người dùng thân thiện, trực quan và dễ sử dụng.
- Xây dựng chức năng tìm kiếm hiệu quả, cho phép người dùng lọc và tìm kiếm theo nhiều tiêu chí khác nhau (danh mục, khu vực, giá cả, diện tích).
- Phát triển tính năng quản lý bài đăng, thông tin cá nhân và lưu trữ danh sách các bài đăng yêu thích.
- Tích hợp chức năng thanh toán trực tuyến phục vụ chi trả phí đăng tin và nâng cấp gói tin.
- Cung cấp khả năng hiển thị và quản lý thông tin chi tiết về từng bài đăng, bao gồm hình ảnh, video minh họa, tích hợp bản đồ và thông tin liên hệ của người cho thuê.
- Đảm bảo tính bảo mật và bảo vệ dữ liệu cá nhân của người dùng.
Nhiệm vụ nghiên cứu được phân chia thành hai phần:
- Nhiệm vụ lý thuyết: Tìm hiểu và nghiên cứu các công nghệ nền tảng gồm Node.js, Express.js, Nodemailer, React.js, Redux, MongoDB, Firebase và cổng thanh toán VNPay.
- Nhiệm vụ thực hành: Cài đặt môi trường runtime Node.js phía server; xây dựng RESTful API và middleware bằng Express.js; cấu hình Nodemailer gửi thư xác thực; xây dựng giao diện người dùng bằng React.js và quản lý trạng thái bằng Redux; thiết kế và quản trị cơ sở dữ liệu phi quan hệ MongoDB; lưu trữ dữ liệu tệp đa phương tiện trên Firebase Cloud Storage; tích hợp cổng thanh toán VNPay và dịch vụ bản đồ Google Maps.
Đối tượng nghiên cứu của đồ án bao gồm:
- Người dùng cá nhân có nhu cầu tìm thuê phòng trọ hoặc căn hộ.
- Chủ nhà/chủ cho thuê có nhu cầu đăng tin cho thuê phòng, căn hộ hoặc tìm người ở ghép.
- Đội ngũ quản trị viên và kiểm duyệt viên (Admin, Moderator) chịu trách nhiệm kiểm duyệt bài đăng, quản lý người dùng, gói tin, danh mục và hóa đơn.
- Các hệ thống ứng dụng bất động sản đang vận hành thực tế tại Việt Nam (tiêu biểu là website phongtro123 và nhatot).
Phạm vi nghiên cứu của đề tài tập trung vào việc khảo sát hiện trạng, phân tích yêu cầu nghiệp vụ, thiết kế giao diện (UI/UX), hiện thực hóa các tính năng cốt lõi (tìm kiếm, đăng tin, quản lý tài khoản, thanh toán, kiểm duyệt), kiểm thử phần mềm trên môi trường thực nghiệm và triển khai hệ thống dựa trên ngăn xếp công nghệ JavaScript (React.js, Node.js, Express.js kết hợp MongoDB).
Cơ sở lý thuyết và phương pháp
Khóa luận áp dụng mô hình phát triển phần mềm dựa trên nền tảng web với kiến trúc hướng dịch vụ RESTful API, sử dụng ngôn ngữ JavaScript đồng nhất ở cả phía máy khách (Client) và máy chủ (Server).
Khung công nghệ và nền tảng lý thuyết được tác giả phân tích và ứng dụng bao gồm:
- React.js: Thư viện JavaScript mã nguồn mở xây dựng giao diện người dùng theo kiến trúc thành phần (component-based) và cơ chế DOM ảo (Virtual DOM) nhằm tối ưu hiệu năng kết xuất; sử dụng cú pháp JSX. Tác giả lựa chọn React.js nhằm phục vụ kết nối thuận tiện với RESTful API và tạo tiền đề mở rộng sang ứng dụng di động bằng React Native.
- Redux: Thư viện quản lý luồng dữ liệu và trạng thái tập trung (state management) cho các tương tác phức tạp tại phía client.
- Node.js: Môi trường thực thi JavaScript đa nền tảng phía máy chủ xây dựng trên nền V8 Engine của Google Chrome, vận hành theo cơ chế hướng sự kiện (event-driven) và mô hình I/O bất đồng bộ không chặn (non-blocking I/O), xử lý hiệu quả nhiều kết nối đồng thời với định dạng dữ liệu JSON.
- Express.js: Framework tối giản cho Node.js, cung cấp hệ thống định tuyến (routing) và các middleware xử lý yêu cầu HTTP nhằm thiết kế các điểm cuối API.
- MongoDB: Hệ quản trị cơ sở dữ liệu NoSQL hướng tài liệu (document database), lưu trữ dữ liệu dưới định dạng BSON (Binary JSON), không bắt buộc định nghĩa lược đồ (schema-less), cho phép thay đổi cấu trúc dữ liệu linh hoạt và tối ưu tốc độ đọc ghi.
- Firebase Storage: Dịch vụ đám mây của Google được lựa chọn chuyên biệt cho việc lưu trữ và phân phối tệp hình ảnh, video của bài đăng, tránh việc quá tải dung lượng và băng thông trên máy chủ chính.
- Nodemailer: Thư viện cho Node.js hỗ trợ gửi email bất đồng bộ qua giao thức SMTP phục vụ gửi mã xác thực OTP.
- VNPay Sandbox: Cổng trung gian thanh toán trực tuyến phục vụ giao dịch hóa đơn đăng tin.
- Google Maps API: Dịch vụ bản đồ số hỗ trợ định vị tọa độ và dẫn đường.
Phương pháp nghiên cứu thực tế bao gồm:
- Phương pháp khảo sát và phân tích hiện trạng: Đánh giá thực nghiệm hai website thương mại đang hoạt động là phongtro123 và nhatot theo các tiêu chí: tính năng, thiết kế giao diện (UI), trải nghiệm người dùng (UX), kỹ thuật (SEO, bảo mật HTTPS, độ tương thích thiết bị) và dịch vụ hỗ trợ khách hàng.
- Phương pháp phân tích và thiết kế hướng đối tượng (OOAD) sử dụng ngôn ngữ mô hình hóa thống nhất (UML): Xây dựng lược đồ Use Case tổng thể, đặc tả 52 ca sử dụng chi tiết kèm lược đồ tuần tự (Sequence Diagram), thiết kế lược đồ lớp (Class Diagram) và mô hình hóa cơ sở dữ liệu.
- Phương pháp kiểm thử phần mềm: Sử dụng phương pháp kiểm thử chức năng hộp đen (Black-box testing) để kiểm chứng tính đúng đắn của các luồng nghiệp vụ.
Nguồn dữ liệu của nghiên cứu xuất phát từ kết quả khảo sát trực tiếp các tính năng trên website phongtro123, nhatot và bộ dữ liệu thử nghiệm do nhóm tác giả tự khởi tạo (thông tin người dùng, tin đăng phòng trọ, danh mục và hóa đơn) trên hệ thống cơ sở dữ liệu MongoDB và máy chủ đám mây Firebase.
Nội dung chính theo từng chương
Chương 1: Cơ sở lý thuyết
Chương 1 trình bày tổng quan lý thuyết, phân tích ưu điểm, nhược điểm và lý do lựa chọn của từng thành phần trong ngăn xếp công nghệ được sử dụng trong đề tài:
- React.js: Ưu điểm tối ưu render nhờ Virtual DOM, khả năng tái sử dụng thành phần, cộng đồng lớn; nhược điểm là cú pháp JSX phức tạp ban đầu và độ phình kích thước ứng dụng.
- Node.js: Ưu điểm bất đồng bộ, xử lý đồng thời tốt, đồng nhất ngôn ngữ JavaScript; nhược điểm là hạn chế khi xử lý tác vụ tính toán nặng do kiến trúc đơn luồng.
- Express.js: Ưu điểm gọn nhẹ, định tuyến linh hoạt, hỗ trợ middleware mạnh mẽ; nhược điểm là thiếu cấu trúc khung mặc định sẵn.
- MongoDB: Ưu điểm lược đồ linh hoạt, dễ mở rộng, truy vấn document nhanh; nhược điểm là không hỗ trợ các ràng buộc toàn vẹn khóa ngoại như CSDL quan hệ và tiêu tốn nhiều bộ nhớ RAM.
- Firebase: Ưu điểm đồng bộ thời gian thực và lưu trữ media hiệu năng cao; nhược điểm là phụ thuộc vào hạ tầng Google và chi phí mở rộng.
- Nodemailer: Cung cấp API đơn giản, hỗ trợ gửi email qua nhiều dịch vụ và vận hành bất đồng bộ.
Chương 2: Khảo sát hiện trạng và xác định yêu cầu
Chương 2 tổng hợp kết quả khảo sát hai website đại diện trong lĩnh vực tìm kiếm nhà trọ tại Việt Nam:
| Tiêu chí khảo sát |
Website Phongtro123 |
Website Nhatot |
| Chức năng chính |
Tìm kiếm theo tiêu chí, xem chi tiết, đăng ký/đăng nhập, đăng tin cho thuê, đánh giá/bình luận |
Tìm kiếm theo loại hình, xem chi tiết, đăng ký/đăng nhập, đăng tin cho thuê, đánh giá/bình luận |
| Giao diện người dùng (UI) |
Bố cục hợp lý, độ tương phản tốt, thiết kế hiện đại |
Bố cục hiện đại, màu sắc tươi sáng, trực quan |
| Trải nghiệm người dùng (UX) |
Điều hướng đơn giản, tốc độ tải trang trung bình |
Điều hướng mượt mà, tốc độ tải trang nhanh |
| Tính năng kỹ thuật |
Tối ưu SEO khá tốt, sử dụng HTTPS, tương thích thiết bị di động |
Tối ưu SEO rất tốt, sử dụng HTTPS, tối ưu tốt trên di động |
| Hỗ trợ khách hàng |
Hỗ trợ qua email, điện thoại, hệ thống FAQ và hướng dẫn |
Hỗ trợ qua email, chat trực tiếp, điện thoại, FAQ chi tiết |
Từ phân tích khảo sát, tác giả đề xuất hệ thống cần bổ sung tính năng thanh toán trực tuyến, tối ưu hóa giao diện và nâng cao tốc độ tải trang. Hệ thống phân chia yêu cầu chức năng thành 5 bảng danh mục theo 4 nhóm tác nhân:
- Khách (Guest - Bảng 2.1): 4 chức năng gồm Đăng nhập, Đăng ký, Xác thực tài khoản qua OTP email, Quên mật khẩu.
- Người dùng đã đăng nhập (User - Bảng 2.2): 11 chức năng gồm Cập nhật thông tin cá nhân (không sửa email/số điện thoại), Đổi mật khẩu, Đăng xuất, Xem danh sách bài đã đăng, Xóa bài đăng, Ẩn/Bỏ ẩn bài đăng, Nâng cấp gói tin, Sửa bài đăng (tự động chuyển về trạng thái chờ duyệt nếu bài đã duyệt trước đó), Thêm bài đăng, Thanh toán bài đăng, Xem lịch sử thanh toán.
- Chung cho User và Guest (Bảng 2.3): 6 chức năng gồm Xem danh sách bài đăng, Xem chi tiết bài đăng, Tìm đường trên bản đồ (tính quãng đường và thời gian di chuyển), Tìm kiếm bài đăng (theo danh mục, vị trí, giá, diện tích), Yêu thích và Bỏ yêu thích bài đăng.
- Ban quản trị và Kiểm duyệt (Admin/Moderator - Bảng 2.4): 6 chức năng gồm Xem tất cả bài đăng đã kiểm duyệt, Xem bài đăng do chính mình kiểm duyệt, Xem bài đăng chờ duyệt, Xem chi tiết bài của User, Cảnh báo bài đăng không hợp lệ, Duyệt bài đăng.
- Quản trị viên cấp cao (Admin - Bảng 2.5): 18 chức năng chuyên sâu gồm Quản lý bài đăng của User (xem, sửa, xóa), Quản lý người dùng (xem danh sách, chi tiết, sửa thông tin, khóa/mở khóa tài khoản, đăng tin hộ, xóa tạm thời, xóa vĩnh viễn, khôi phục tài khoản), Quản lý danh mục (xem, thêm, sửa, xóa), Quản lý gói tin (xem, thêm, sửa, xóa), Xem danh sách hóa đơn thanh toán.
Các yêu cầu phi chức năng được xác định gồm:
- Hiệu suất: Thời gian phản hồi của các trang không vượt quá 2 giây.
- Tính sẵn sàng: Đạt tối thiểu 99%.
- Bảo mật: Mã hóa các thông tin nhạy cảm như mật khẩu, kiểm soát quyền truy cập.
- Khả năng mở rộng, khả năng bảo trì (theo chuẩn coding conventions), khả năng phục hồi và tính toàn vẹn dữ liệu.
Chương 3: Mô hình hóa yêu cầu
Chương 3 xây dựng lược đồ Use Case tổng quan và cung cấp bảng đặc tả chi tiết cùng lược đồ tuần tự (Sequence Diagram) cho 52 ca sử dụng:
- Thiết lập quy trình đăng ký, xác thực tài khoản và quên mật khẩu thông qua cơ chế mã OTP gửi về email cá nhân bằng Nodemailer.
- Đặc tả quy trình tìm đường trên bản đồ số: Khi người dùng xem chi tiết bài đăng, hệ thống tích hợp bản đồ hiển thị tọa độ nhà trọ và kích hoạt tính toán quãng đường, thời gian di chuyển từ vị trí hiện tại của người dùng.
- Đặc tả quy trình đăng tin và thanh toán: Người dùng tạo bài đăng, lựa chọn gói tin, thực hiện thanh toán qua cổng VNPay; sau khi thanh toán thành công bài đăng được chuyển vào danh sách chờ duyệt của Moderator.
- Đặc tả quy trình kiểm duyệt bài đăng: Moderator kiểm tra nội dung, quyết định duyệt hoặc gửi cảnh báo/từ chối bài viết.
- Đặc tả quy trình quản trị người dùng: Admin thực hiện các thao tác quản lý trạng thái tài khoản bao gồm khóa, mở khóa, xóa tạm thời (đưa vào thùng rác), xóa vĩnh viễn và khôi phục tài khoản.
Chương 4: Thiết kế hệ thống
Chương 4 hoàn thiện thiết kế kiến trúc hệ thống ở mức chi tiết:
- Thiết kế lược đồ lớp (Class Diagram): Định nghĩa cấu trúc các lớp đối tượng, các thuộc tính, phương thức và mối quan hệ nghiệp vụ giữa các thực thể người dùng, bài đăng, gói tin, danh mục và hóa đơn.
- Thiết kế cơ sở dữ liệu: Xây dựng cấu trúc các collection trên MongoDB lưu trữ thông tin người dùng, bài đăng, danh mục, gói tin dịch vụ và hóa đơn giao dịch.
- Thiết kế giao diện ứng dụng: Xây dựng bố cục 25 màn hình giao diện bao gồm: Đăng nhập, Đăng ký, Xác thực tài khoản, Quên mật khẩu, Trang chủ, Chi tiết bài đăng, Bài đăng yêu thích, Bảng giá dịch vụ, Quản lý tin đăng (User), Cập nhật thông tin cá nhân (User), Đổi mật khẩu (User), Lịch sử thanh toán (User), Đăng tin (User), Sửa tin (User), Thanh toán (User), Nâng cấp tin (User), Kiểm duyệt bài đăng (Moderator), Quản lý tin đăng (Admin), Quản lý người dùng (Admin), Quản lý danh mục (Admin), Quản lý gói tin (Admin), Quản lý hóa đơn (Admin) và Trang thống kê dữ liệu.
Chương 5: Cài đặt, kiểm thử và triển khai
Chương 5 trình bày toàn bộ quá trình hiện thực hóa phần mềm:
- Cài đặt phần mềm: Thiết lập kiến trúc Client-Server RESTful API, cấu trúc tổ chức mã nguồn Frontend (React, Redux) và Backend (Node.js, Express, MongoDB Client, Nodemailer).
- Kiểm thử phần mềm: Thực hiện kiểm thử chức năng theo phương pháp hộp đen với 14 bộ kịch bản kiểm thử (Test Cases từ Bảng 5.6 đến 5.20), bao gồm: Đăng nhập, Xác thực tài khoản, Quên mật khẩu, Chỉnh sửa thông tin cá nhân, Tìm kiếm bài đăng, Yêu thích bài đăng, Thêm bài đăng, Thanh toán bài đăng, Duyệt bài đăng, Từ chối bài đăng, Sửa bài đăng, Khóa tài khoản, Xóa tài khoản, Cập nhật gói tin.
- Triển khai phần mềm: Đóng gói và triển khai Frontend lên GitHub Pages/Hosting tĩnh; triển khai Backend Server API; kết nối cơ sở dữ liệu MongoDB, Firebase Media Storage và môi trường tích hợp thanh toán VNPay.
- Đánh giá kết quả thu được về ứng dụng thực tế và đề xuất các hướng phát triển trong tương lai.
Thiết kế và triển khai
Hệ thống được thiết kế theo mô hình kiến trúc phân tầng Client-Server dựa trên tiêu chuẩn dịch vụ web RESTful API, phân tách độc lập giữa tầng giao diện hiển thị và tầng xử lý nghiệp vụ máy chủ:
[Trình duyệt Khách / Người dùng / Admin]
[Tầng Frontend: React.js + Redux]
[Tầng Backend: Node.js + Express.js Framework]
[Cơ sở dữ liệu MongoDB] [Firebase Cloud Storage]
(Dữ liệu quan trọng, (Lưu trữ tệp hình ảnh
JSON/BSON documents) và video bài đăng)
Bảng tổng hợp ngăn xếp công nghệ triển khai:
| Thành phần hệ thống |
Công nghệ / Dịch vụ sử dụng |
Vai trò và nhiệm vụ kỹ thuật trong đồ án |
| Giao diện người dùng (Frontend) |
React.js, Redux |
Xây dựng giao diện Single Page Application, quản lý luồng trạng thái ứng dụng |
| Máy chủ ứng dụng (Backend) |
Node.js, Express.js |
Khởi tạo runtime server, xử lý routing, xây dựng RESTful API và các middleware |
| Cơ sở dữ liệu chính |
MongoDB (BSON) |
Lưu trữ thông tin người dùng, bài đăng, danh mục, gói tin, hóa đơn |
| Lưu trữ đa phương tiện |
Firebase Storage |
Lưu trữ và phân phối tệp hình ảnh và video do người dùng tải lên |
| Dịch vụ gửi thư điện tử |
Nodemailer |
Gửi mã xác thực OTP phục vụ đăng ký và đặt lại mật khẩu người dùng |
| Cổng thanh toán |
VNPay |
Tích hợp xử lý giao dịch thanh toán trực tuyến phí dịch vụ bài đăng |
| Bản đồ số |
Google Maps API |
Hiển thị tọa độ nhà trọ, tính toán khoảng cách và thời gian di chuyển |
Quy trình kiểm thử chức năng được xây dựng nhằm đánh giá tính đúng đắn của toàn bộ luồng nghiệp vụ. Nhóm nghiên cứu đã thiết kế và thực thi 14 bộ kịch bản kiểm thử (Test Cases từ Bảng 5.6 đến Bảng 5.20 trong văn bản):
- Test case Đăng nhập (Bảng 5.6): Kiểm tra tính hợp lệ của email, mật khẩu và chuyển hướng theo vai trò.
- Test case Xác thực tài khoản (Bảng 5.8): Kiểm tra tính chính xác của mã OTP gửi qua email.
- Test case Quên mật khẩu (Bảng 5.9): Kiểm tra luồng cấp lại mật khẩu mới qua mã OTP.
- Test case Chỉnh sửa thông tin cá nhân (Bảng 5.10): Xác nhận việc cập nhật thông tin và chặn sửa email/số điện thoại.
- Test case Tìm kiếm bài đăng (Bảng 5.11): Kiểm tra bộ lọc đa tiêu chí (danh mục, giá, vị trí, diện tích).
- Test case Yêu thích bài đăng (Bảng 5.12): Kiểm tra việc lưu trữ và loại bỏ tin vào danh sách yêu thích.
- Test case Thêm bài đăng (Bảng 5.13): Kiểm tra tính đầy đủ của dữ liệu nhập và tải tệp media lên Firebase.
- Test case Thanh toán bài đăng (Bảng 5.14): Kiểm tra luồng tạo hóa đơn và phản hồi giao dịch từ cổng VNPay.
- Test case Duyệt bài đăng (Bảng 5.15): Kiểm tra chức năng phê duyệt của Moderator để hiển thị tin lên trang chủ.
- Test case Từ chối bài đăng (Bảng 5.16): Kiểm tra việc gửi thông báo cảnh báo/từ chối khi tin không hợp lệ.
- Test case Sửa bài đăng (Bảng 5.17): Kiểm tra việc tự động chuyển trạng thái bài viết về chờ duyệt sau khi sửa.
- Test case Khóa tài khoản (Bảng 5.18): Kiểm tra quyền của Admin trong việc vô hiệu hóa đăng nhập của User.
- Test case Xóa tài khoản (Bảng 5.19): Kiểm tra việc đưa tài khoản vào danh sách xóa tạm thời và xóa vĩnh viễn.
- Test case Cập nhật gói tin (Bảng 5.20): Kiểm tra các thao tác thêm, sửa, xóa cấu hình gói tin của Admin.
Hệ thống được triển khai trên môi trường phân tán: mã nguồn Frontend được đóng gói triển khai trên nền tảng GitHub Pages/Hosting; Backend API được triển khai trên máy chủ Node.js kết nối đồng thời với cơ sở dữ liệu MongoDB, Firebase Storage, tài khoản SMTP Nodemailer và môi trường thử nghiệm cổng thanh toán VNPay Sandbox.
Kết quả và đóng góp
Kết quả thực nghiệm của đề tài:
- Xây dựng hoàn chỉnh ứng dụng website tìm kiếm nhà trọ bao gồm 52 ca sử dụng nghiệp vụ được thiết kế, cài đặt và kiểm thử hoàn chỉnh.
- Thiết lập và phân quyền nghiêm ngặt 4 vai trò người dùng (Guest, User, Moderator, Admin) với 25 giao diện người dùng tương ứng cho từng tác vụ chuyên biệt.
- Đáp ứng các tiêu chí phi chức năng đề ra trong văn bản: thời gian phản hồi trang dưới 2 giây, tính sẵn sàng hệ thống đạt mục tiêu từ 99%, đảm bảo mã hóa bảo mật thông tin nhạy cảm.
- Tích hợp thành công chức năng thanh toán trực tuyến qua cổng VNPay cho các nghiệp vụ đăng tin và nâng cấp gói tin.
- Tích hợp dịch vụ Google Maps API cho phép người tìm trọ xem vị trí trực quan, đo lường khoảng cách và ước tính thời gian di chuyển từ vị trí hiện tại đến nhà trọ.
Giải pháp và đề xuất kỹ thuật của tác giả:
- Đề xuất mô hình lưu trữ phân tách: lưu dữ liệu có cấu trúc tại MongoDB và chuyển toàn bộ dữ liệu đa phương tiện (hình ảnh, video bài đăng) sang lưu trữ đám mây Firebase Storage để giảm tải dung lượng cho máy chủ và tăng tốc độ tải trang.
- Đề xuất cơ chế kiểm soát chất lượng nội dung: khi User chỉnh sửa bài đăng đã được duyệt, hệ thống tự động đưa bài đăng về trạng thái chờ duyệt nhằm ngăn chặn việc thay đổi nội dung không đúng quy định sau khi đã xuất bản.
- Đề xuất quy trình quản lý người dùng hai lớp cho Admin: tài khoản khi bị xóa sẽ được đưa vào danh sách xóa tạm thời (cho phép khôi phục) trước khi thực hiện xóa vĩnh viễn khỏi cơ sở dữ liệu.
Đóng góp so với các hệ thống khảo sát:
- Khắc phục hạn chế của các trang tìm trọ khảo sát hiện tại (phongtro123, nhatot) bằng việc tích hợp quy trình thanh toán trực tuyến tự động qua cổng VNPay ngay khi người dùng hoàn tất đăng tin hoặc có nhu cầu nâng cấp vị trí hiển thị bài viết.
- Tích hợp trực tiếp công cụ tìm đường và ước tính thời gian di chuyển trên nền tảng bản đồ số ngay tại giao diện chi tiết tin đăng, thay vì chỉ cung cấp địa chỉ dạng văn bản tĩnh.
Hạn chế và hướng nghiên cứu tiếp
Hạn chế của đề tài được xác định từ phạm vi nghiên cứu và đặc thù công nghệ trong văn bản:
- Do sử dụng cơ sở dữ liệu phi quan hệ MongoDB không có cơ chế ràng buộc toàn vẹn khóa ngoại tự động, tính toàn vẹn và nhất quán của dữ liệu phụ thuộc hoàn toàn vào logic xử lý ở tầng ứng dụng Backend.
- Kiến trúc xử lý đơn luồng của Node.js gây hạn chế nếu hệ thống phải thực hiện các tác vụ tính toán nặng phía máy chủ trong tương lai.
- Hệ thống có sự phụ thuộc lớn vào các dịch vụ bên thứ ba (Google Maps API, dịch vụ Firebase của Google và cổng thanh toán VNPay); bất kỳ sự thay đổi về chính sách, chi phí hoặc gián đoạn dịch vụ từ các đối tác này đều tác động trực tiếp đến khả năng vận hành của website.
- Đồ án mới dừng lại ở phạm vi ứng dụng nền tảng web, chưa xây dựng ứng dụng di động độc lập.
Hướng nghiên cứu và phát triển tiếp theo được tác giả đề ra:
- Mở rộng phát triển ứng dụng di động đa nền tảng (iOS và Android) bằng React Native dựa trên nền tảng các RESTful API đã được chuẩn hóa.
- Tối ưu hóa và nâng cấp cấu trúc cơ sở dữ liệu nhằm nâng cao khả năng chịu tải và phục vụ lượng người dùng truy cập lớn hơn.
- Tiếp tục hoàn thiện và phát triển các chức năng nâng cao như gợi ý tìm kiếm thông minh và phân tích dữ liệu thống kê chuyên sâu.
Giá trị tham khảo
Đồ án là tài liệu tham khảo phù hợp cho sinh viên chuyên ngành Công nghệ Thông tin, Kỹ thuật Phần mềm và Hệ thống Thông tin đang thực hiện đồ án tốt nghiệp hoặc các dự án phát triển phần mềm theo mô hình full-stack JavaScript (MERN Stack: MongoDB, Express.js, React.js, Node.js).
Những nội dung có giá trị tham khảo cụ thể bao gồm:
- Toàn bộ phương pháp phân tích yêu cầu phần mềm với 52 ca sử dụng được đặc tả theo chuẩn nghiệp vụ (Main Flow, Alternate Flows, Exception Flows) đi kèm lược đồ tuần tự (Sequence Diagram) tương ứng.
- Cấu trúc tích hợp các dịch vụ bên thứ ba trong ứng dụng web: tích hợp thanh toán VNPay, xác thực OTP qua Nodemailer, hiển thị bản đồ dẫn đường bằng Google Maps API và lưu trữ media qua Firebase Storage.
- Bản thiết kế 14 bộ kịch bản kiểm thử chức năng hộp đen (Test Cases) chi tiết với các tiêu chí đầu vào và kết quả mong đợi rõ ràng.
Câu hỏi thường gặp
1. Hệ thống phân chia người dùng thành những nhóm tác nhân nào và quyền hạn cụ thể ra sao?
Hệ thống phân chia thành 4 nhóm tác nhân chính: Khách (Guest) chỉ có quyền xem tin, tìm kiếm, đăng ký, đăng nhập và xác thực tài khoản; Người dùng (User) có quyền đăng tin, sửa, xóa, ẩn tin của mình, nâng cấp gói tin, thanh toán qua VNPay và lưu tin yêu thích; Kiểm duyệt viên (Moderator) có quyền duyệt, từ chối hoặc cảnh báo bài đăng chờ duyệt; Quản trị viên (Admin) có toàn quyền quản lý người dùng (khóa, mở khóa, xóa tạm, xóa vĩnh viễn), quản lý danh mục, gói tin, xem danh sách hóa đơn và đăng tin hộ người dùng.
2. Quy trình xác thực tài khoản và khôi phục mật khẩu của hệ thống diễn ra như thế nào?
Quy trình xác thực dựa trên mã OTP gửi qua email: Khi người dùng đăng ký tài khoản hoặc chọn quên mật khẩu, hệ thống phía Backend sử dụng thư viện Nodemailer gửi một mã OTP bất đồng bộ đến địa chỉ email đã đăng ký. Người dùng phải nhập chính xác mã OTP này trên giao diện xác thực thì hệ thống mới kích hoạt tài khoản hoặc cho phép tạo mật khẩu mới.
3. Cơ chế kiểm soát bài đăng giữa User và Moderator/Admin được vận hành ra sao?
Sau khi User tạo bài đăng và thanh toán phí thành công qua cổng VNPay, bài đăng sẽ chuyển vào danh sách chờ duyệt chứ không hiển thị ngay lên trang chủ. Moderator hoặc Admin sẽ kiểm tra nội dung và hình ảnh; nếu hợp lệ thì bấm duyệt để bài xuất hiện công khai trên trang chủ, nếu không hợp lệ thì bấm từ chối kèm cảnh báo. Đặc biệt, nếu một bài đăng đã duyệt được User chỉnh sửa thông tin, hệ thống sẽ tự động chuyển trạng thái bài đó về lại hàng đợi chờ duyệt để kiểm tra lại.
4. Chức năng bản đồ số trong đồ án cung cấp những tiện ích gì cho người tìm trọ?
Tại trang chi tiết bài đăng, hệ thống tích hợp Google Maps API để ghim vị trí chính xác của nhà trọ trên bản đồ. Khi người dùng bấm nút "Tìm đường", hệ thống sẽ xác định vị trí hiện tại của người dùng, từ đó vẽ lộ trình di chuyển trực quan trên bản đồ đồng thời tính toán chi tiết quãng đường và thời gian di chuyển đến nhà trọ.
5. Vì sao nhóm tác giả lại lựa chọn Firebase Storage song song với cơ sở dữ liệu MongoDB?
MongoDB được sử dụng để quản lý các dữ liệu có cấu trúc dưới dạng tài liệu JSON/BSON (thông tin tài khoản, thông tin bài viết, gói tin, hóa đơn). Nhóm tác giả không lưu trữ trực tiếp các tệp hình ảnh và video dung lượng lớn vào MongoDB hay máy chủ nhằm tránh gây quá tải bộ nhớ và suy giảm tốc độ truy vấn; thay vào đó, Firebase Storage được tích hợp chuyên biệt để lưu trữ và phân phối tệp đa phương tiện với hiệu năng cao và an toàn.
Kết luận
Đồ án tốt nghiệp "Xây dựng website tìm kiếm nhà trọ" của nhóm sinh viên Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh đã giải quyết trọn vẹn bài toán kết nối thông tin giữa người có nhu cầu thuê chỗ ở và chủ nhà trọ thông qua nền tảng web hiện đại. Bằng việc ứng dụng đồng bộ ngăn xếp công nghệ JavaScript (React.js, Node.js, Express.js, MongoDB) cùng các dịch vụ mở rộng như VNPay, Firebase Storage và Google Maps, đề tài đã thiết kế và hiện thực hóa thành công 52 ca sử dụng nghiệp vụ được kiểm chứng qua 14 bộ kịch bản kiểm thử chức năng. Hệ thống cung cấp giải pháp tra cứu trực quan, định vị lộ trình di chuyển, thanh toán trực tuyến tiện lợi và quy trình kiểm duyệt bài đăng rõ ràng. Đây là tài liệu đồ án kỹ thuật có cấu trúc bài bản, mang lại giá trị tham khảo thực nghiệm cho sinh viên và lập trình viên chuyên ngành công nghệ phần mềm.