Bối cảnh và vấn đề nghiên cứu
Đồ án được thực hiện trong bối cảnh công nghệ thông tin phát triển mạnh mẽ, smartphone và internet trở nên phổ biến rộng rãi, tạo điều kiện cho các hình thức tương tác xã hội trực tuyến phát triển. Nhóm tác giả nhận định rằng thị trường mạng xã hội và ứng dụng hẹn hò ngày càng mở rộng, nhưng vẫn tồn tại nhiều thách thức về tính tương tác, an toàn thông tin, và sự đa dạng trong cách kết nối. Nhu cầu thực tiễn xuất phát từ nhóm người dùng ngại giao tiếp xã hội trực tiếp, không có nhiều thời gian giao lưu trong cuộc sống bận rộn, hoặc đơn giản là muốn mở rộng quan hệ bạn bè và tìm kiếm đối tác trong không gian số.
Mục tiêu của đề tài:
- Tìm hiểu và ứng dụng các công nghệ lập trình frontend: React, NextJS.
- Tìm hiểu và ứng dụng công nghệ lập trình backend: NodeJS, NestJS, Golang, Fiber.
- Tìm hiểu và tích hợp Google Maps Platform vào hệ thống.
- Xây dựng website kết bạn hẹn hò Finder với đầy đủ các chức năng cốt lõi phục vụ người dùng cuối và hệ thống quản trị.
Đối tượng và phạm vi:
- Đối tượng người dùng: Người có nhu cầu kết bạn, hẹn hò trực tuyến; đặc biệt là những ai ngại giao tiếp trực tiếp hoặc bận rộn với công việc.
- Phạm vi hệ thống: Gồm 3 module — trang web client cho người dùng cuối, trang web admin để quản lý thông số hoạt động, và module xử lý backend.
- Thời gian thực hiện: 15 tuần, bắt đầu từ ngày 21/08/2023, hoàn thành tháng 12/2023.
Cơ sở lý thuyết và phương pháp
Khung công nghệ và lý thuyết nền tảng
Nhóm tác giả xây dựng hệ thống dựa trên kiến trúc Client–Server, trong đó máy khách và máy chủ trao đổi dữ liệu qua các giao thức như HTTP và TCP/IP. Các công nghệ cụ thể được lựa chọn như sau:
| Tầng |
Công nghệ |
Vai trò |
| Frontend |
React, NextJS |
Xây dựng giao diện người dùng; NextJS cung cấp Server-Side Rendering (SSR) và tối ưu hóa SEO |
| Backend chính |
NestJS (NodeJS + TypeScript) |
Xử lý logic nghiệp vụ, API; thiết kế theo module, hỗ trợ Dependency Injection, Middleware, Interceptors |
| Backend xử lý ảnh/video |
Golang + Fiber |
Xử lý HTTP hiệu suất cao, sử dụng goroutines; tích hợp gocv (liên kết Golang cho OpenCV) để xác thực khuôn mặt |
| Cơ sở dữ liệu |
MongoDB |
NoSQL lưu trữ tài liệu dạng BSON, phù hợp với dữ liệu phi cấu trúc và thời gian thực |
| Dịch vụ bản đồ |
Google Maps Platform |
Tích hợp Places API, Geocoding API, Maps JavaScript API để gợi ý và tìm kiếm địa điểm hẹn hò |
Ghi chú công nghệ đặc thù: Tính năng xác thực khuôn mặt sử dụng gocv — gói liên kết Golang cho thư viện OpenCV — để ghi nhận và kiểm tra khuôn mặt qua video realtime. Hệ thống ghi nhận đủ 50 thông tin khuôn mặt trước khi cập nhật trạng thái xác thực cho tài khoản.
Phương pháp nghiên cứu và phát triển
Nhóm áp dụng quy trình phát triển phần mềm theo các bước:
- Phân tích yêu cầu nghiệp vụ thông qua khảo sát thị trường (nghiên cứu Tinder, Bumble, Badoo).
- Nghiên cứu công nghệ và hệ thống hiện có trên thị trường.
- Thiết kế hệ thống, bao gồm thiết kế cơ sở dữ liệu, giao diện và luồng xử lý.
- Phát triển và cài đặt hệ thống.
- Tinh chỉnh và kiểm thử.
Nguồn dữ liệu
Dữ liệu được xây dựng mới hoàn toàn trong quá trình phát triển. Thông tin địa điểm hẹn hò được lấy từ Google Maps Platform thông qua các API tích hợp.
Nội dung chính theo từng chương
Chương 1 — Cơ sở lý thuyết
Chương này trình bày nền tảng lý thuyết cho toàn bộ hệ thống. Kiến trúc Client–Server được mô tả là mô hình cốt lõi, trong đó máy khách gửi yêu cầu và máy chủ phản hồi thông qua giao thức chuẩn. Nhóm lần lượt trình bày đặc điểm, ưu điểm và lý do lựa chọn từng công nghệ: React với cú pháp JSX và khả năng quản lý thành phần giao diện; NextJS với SSR và hệ thống routing động; MongoDB với cấu trúc tài liệu BSON linh hoạt; NestJS theo hướng module và nguyên lý OOP/FP/FRP; Golang với khả năng xử lý đồng thời qua goroutines; Fiber là framework web hiệu suất cao trên nền Golang; gocv cho xử lý ảnh và nhận diện khuôn mặt; Google Maps Platform với tập hợp các API bản đồ và địa điểm.
Chương 2 — Xác định và mô hình hóa yêu cầu
Chương này bắt đầu bằng khảo sát ba ứng dụng cạnh tranh chính là Tinder (ra mắt 2012), Bumble (ra mắt 2014) và Badoo. Kết quả khảo sát được tổng hợp qua hai bảng so sánh:
Bảng so sánh đặc điểm chính:
| Tiêu chí |
Tinder |
Bumble |
Badoo |
| Đối tượng |
Tất cả |
Phụ nữ chủ động |
Tất cả |
| Thị trường |
Toàn cầu |
Toàn cầu |
Toàn cầu |
| Nền tảng |
App + Web |
App + Web |
App + Web |
| Chi phí |
Freemium |
Freemium |
Freemium |
Điểm khác biệt của Finder so với ba ứng dụng trên: Cả Tinder, Bumble và Badoo đều không có chức năng gợi ý địa điểm hẹn hò, tạo lời mời hẹn hò, và gợi ý tiến tới — đây là ba tính năng mà nhóm xác định là điểm phân biệt của Finder.
Hệ thống có hai actor: User (người dùng cuối, tạo và quản lý hồ sơ, tìm kiếm và tương tác) và Admin (quản lý hoạt động và thông tin hệ thống). Chương đặc tả chi tiết 15 use case, bao gồm toàn bộ luồng chính và luồng thay thế cho từng chức năng, từ đăng nhập bằng OTP/Google đến mua gói bổ sung.
Chương 3 — Thiết kế hệ thống
Chương trình bày thiết kế cơ sở dữ liệu MongoDB với các collection chính:
| Collection |
Chức năng chính |
| User |
Lưu thông tin cá nhân, cài đặt bộ lọc, tọa độ địa lý, trạng thái tài khoản, quyền truy cập tính năng, thông tin boost |
| Conversation |
Quản lý hội thoại giữa các cặp đã ghép đôi |
| Message |
Lưu tin nhắn văn bản, hình ảnh, thông tin cuộc gọi video (startTime, endTime, reviews) |
| Match Request |
Theo dõi yêu cầu ghép đôi, trạng thái boost khi like |
| Schedule |
Quản lý lịch hẹn: địa điểm (locationDating), thời gian, trạng thái (Accept/Decline/Wait for approval/Cancel), đánh giá sau hẹn |
| Report |
Lưu báo cáo vi phạm từ người dùng |
| Billing |
Quản lý giao dịch mua gói nâng cấp |
Thiết kế giao diện bao gồm các màn hình: trang chủ, đăng nhập, người dùng mới, nhập hình ảnh và thông tin, chọn tiêu chí, yêu cầu quyền truy cập vị trí, gợi ý người dùng, cài đặt tiêu chí, báo cáo, cài đặt thông tin cá nhân, xác thực tài khoản, nhắn tin, gọi video (bao gồm màn hình chờ, cấp quyền camera/microphone, giao diện gọi video, đánh giá chất lượng cuộc gọi), và tạo lời mời hẹn hò.
Phần thiết kế xử lý thể hiện qua các lược đồ sequence cho 15 luồng nghiệp vụ, trong đó đáng chú ý là luồng like, boost, gọi video và xác thực khuôn mặt.
Chương 4 — Cài đặt và thử nghiệm
Chương mô tả kết quả cài đặt ba thành phần: backend (FinderBE), frontend client và frontend admin. Phần thử nghiệm trình bày kết quả kiểm thử chức năng gửi tin nhắn (bao gồm giao diện nhắn tin và kết quả sau khi gửi tin nhắn thành công) cùng các chức năng khác. Kết quả kiểm thử được tổng hợp trong hai bảng riêng biệt: Bảng tổng hợp thử nghiệm trang client và Bảng tổng hợp thử nghiệm trang admin.
Thiết kế và triển khai
Kiến trúc hệ thống
Hệ thống gồm ba thành phần độc lập triển khai song song:
- FinderBE (Backend chính): Xây dựng bằng NestJS trên nền NodeJS với TypeScript, kết nối MongoDB. Đảm nhiệm toàn bộ logic nghiệp vụ: xác thực người dùng, quản lý ghép đôi, nhắn tin, lịch hẹn, thanh toán.
- Backend xử lý media: Xây dựng bằng Golang và framework Fiber, tích hợp gocv để thực hiện xác thực khuôn mặt realtime. Sử dụng goroutines xử lý đồng thời nhiều yêu cầu.
- Frontend client: NextJS (React + SSR), phục vụ người dùng cuối với toàn bộ các chức năng tương tác.
- Frontend admin: NextJS, cung cấp giao diện quản trị hệ thống.
Các công nghệ tích hợp đặc thù
- Google Maps Platform: Tích hợp Places API, Geocoding API, Maps JavaScript API cho chức năng tìm kiếm và gợi ý địa điểm hẹn hò; hệ thống hiển thị bản đồ tương tác để người dùng tìm và chọn địa điểm.
- Gọi video (WebRTC): Hệ thống hỗ trợ gọi video giữa hai người dùng đã ghép đôi, yêu cầu cấp quyền camera và microphone, có màn hình chờ, giao diện gọi và đánh giá chất lượng cuộc gọi sau khi kết thúc.
- Xác thực khuôn mặt: Sử dụng gocv/OpenCV để ghi nhận video realtime, hệ thống ghi lại và kiểm tra có khuôn mặt hợp lệ, ghi nhận đủ 50 thông tin khuôn mặt thì cập nhật trạng thái verified cho các ảnh của người dùng.
- Xác thực OTP: Hệ thống gửi mã OTP đến số điện thoại, kiểm tra định dạng và tính hợp lệ; hỗ trợ gửi lại OTP và thay đổi số điện thoại trong luồng đăng nhập/đăng ký.
- Tích hợp Instagram: Cho phép liên kết tài khoản Instagram để hiển thị hình ảnh bổ sung trên trang cá nhân.
Kiểm thử
Nhóm thực hiện kiểm thử chức năng theo bảng tổng hợp riêng cho trang client và trang admin, bao gồm các luồng đăng nhập, nhắn tin, gửi tin nhắn, và các chức năng chính khác. Kết quả chạy server backend, frontend client và frontend admin được xác nhận thành công qua màn hình terminal.
Kết quả và đóng góp
Kết quả về mặt lý thuyết
- Nhóm đã tìm hiểu và nắm vững các công nghệ: React, NextJS (frontend); NodeJS, NestJS (backend); Golang, Fiber (backend hiệu suất cao); MongoDB (cơ sở dữ liệu NoSQL); Google Maps Platform (dịch vụ bản đồ); gocv/OpenCV (xử lý ảnh và nhận diện khuôn mặt).
Kết quả về mặt sản phẩm
Website Finder được xây dựng hoàn chỉnh với các chức năng đã đề ra:
- Xác thực người dùng qua tài khoản Google và số điện thoại (OTP).
- Cài đặt và chỉnh sửa thông tin cá nhân, tiêu chí gợi ý (khoảng cách, độ tuổi, giới tính, sở thích).
- Gợi ý kết bạn hẹn hò; tương tác Like, bỏ qua, tua lại.
- Nhắn tin và gọi video giữa các cặp đã ghép đôi.
- Tìm kiếm địa điểm hẹn hò qua Google Maps Platform; tạo và quản lý lời mời hẹn hò.
- Tính năng Boost đẩy hồ sơ lên đầu danh sách gợi ý để tăng tỉ lệ ghép đôi.
- Xác thực khuôn mặt realtime qua gocv, cấp nhãn verified cho ảnh.
- Liên kết tài khoản Instagram.
- Báo cáo người dùng vi phạm.
- Hủy ghép đôi, nâng cấp tài khoản và mua gói bổ sung.
- Trang admin quản lý hoạt động hệ thống.
Đóng góp so với các ứng dụng đã khảo sát
Ba chức năng mà Tinder, Bumble và Badoo đều chưa có, được Finder bổ sung: gợi ý địa điểm hẹn hò (sử dụng AI tạo danh sách địa điểm dựa trên câu hỏi tiêu chí), tạo lời mời hẹn hò (gửi thông báo và nhắc nhở tới đối phương trước buổi hẹn), và tính năng gợi ý tiến tới trong quy trình kết bạn.
Hạn chế và hướng nghiên cứu tiếp
Hạn chế được nhóm tự nhận
Nhóm tác giả thừa nhận hạn chế về kiến thức chuyên môn và kinh nghiệm thực tế trong quá trình nghiên cứu và phát triển, dẫn đến khả năng tồn tại sai sót trong thiết kế hoặc cài đặt. Phạm vi kiểm thử chủ yếu là kiểm thử chức năng, chưa bao quát kiểm thử tải, kiểm thử bảo mật chuyên sâu, hoặc kiểm thử trên đa dạng thiết bị và trình duyệt.
Hướng phát triển tiếp theo
Nhóm đề xuất các hướng mở rộng dưới đây:
- Hoàn thiện và mở rộng các tính năng an toàn thông tin, bảo mật dữ liệu người dùng.
- Nâng cấp thuật toán gợi ý kết bạn hẹn hò để tăng độ chính xác và cá nhân hóa.
- Mở rộng sang nền tảng ứng dụng di động (mobile app).
- Tối ưu hiệu năng hệ thống để phục vụ lượng người dùng lớn hơn.
- Hoàn thiện tính năng gợi ý địa điểm hẹn hò bằng AI.
Giá trị tham khảo
Đồ án này có giá trị tham khảo cho các đối tượng sau:
- Sinh viên ngành Công nghệ phần mềm và Công nghệ thông tin đang tìm hiểu kiến trúc ứng dụng web hiện đại theo mô hình Client–Server với stack công nghệ React/NextJS, NestJS, Golang và MongoDB.
- Sinh viên thực hiện đồ án xây dựng hệ thống mạng xã hội hoặc nền tảng kết nối người dùng, có thể tham khảo phần xác định yêu cầu (use case với đầy đủ luồng chính, luồng thay thế, ngoại lệ) và phần thiết kế cơ sở dữ liệu MongoDB với 8 collection được mô tả chi tiết.
- Người làm đề tài tích hợp Google Maps Platform có thể tham khảo cách nhóm tích hợp Places API và Maps JavaScript API vào luồng nghiệp vụ tìm kiếm và gợi ý địa điểm.
- Người nghiên cứu xác thực sinh trắc học trên web có thể tham khảo phần xác thực khuôn mặt realtime sử dụng gocv/OpenCV trên backend Golang.
- Phần thiết kế cơ sở dữ liệu (Chương 3) và phần đặc tả use case (Chương 2) là hai phần có mật độ thông tin kỹ thuật cao, phù hợp để tham chiếu khi xây dựng hệ thống có tính năng tương tự.
Câu hỏi thường gặp
1. Finder khác gì so với Tinder và Bumble về mặt chức năng?
Dựa trên bảng so sánh trong đồ án, cả Tinder, Bumble lẫn Badoo đều không có ba chức năng: gợi ý địa điểm hẹn hò, tạo lời mời hẹn hò, và gợi ý tiến tới. Finder bổ sung cả ba chức năng này, trong đó gợi ý địa điểm được hỗ trợ bởi AI tạo danh sách địa điểm dựa trên câu trả lời của người dùng, tích hợp với Google Maps Platform.
2. Hệ thống xác thực khuôn mặt hoạt động như thế nào?
Theo use case ID 17 trong đồ án, người dùng quay video realtime bằng camera, hệ thống (backend Golang + gocv) ghi lại video và kiểm tra tính hợp lệ của khuôn mặt. Hệ thống ghi nhận đủ 50 thông tin khuôn mặt mới cập nhật trạng thái verified. Nếu video có hai khuôn mặt hoặc không có khuôn mặt nào, hệ thống thông báo lỗi và yêu cầu quay lại.
3. Tính năng Boost hoạt động như thế nào và người dùng cần điều kiện gì?
Theo use case ID 8, người dùng cần đã đăng nhập và có sẵn lượt Boost. Khi kích hoạt, hồ sơ của người dùng được xuất hiện ở vị trí cao trong danh sách gợi ý của những người khác trong suốt thời gian Boost. Cơ sở dữ liệu lưu thông tin boostsSession trong collection User, gồm amount (số lượng còn lại) và expiredDate (thời gian hết hiệu lực).
4. Lịch hẹn (Schedule) có những trạng thái nào và được quản lý ra sao?
Theo thiết kế cơ sở dữ liệu collection Schedule trong đồ án, trạng thái cuộc hẹn (status) gồm: Accept, Decline, Wait for approval, Cancel. Sau khi cuộc hẹn diễn ra, trạng thái đánh giá (reviewDatingStatus) gồm: Success, Wait for review, Failed, Notjoining. Hệ thống thông báo nhắc nhở người dùng trước khi buổi hẹn diễn ra và lưu địa điểm hẹn dưới dạng danh sách ID Google Maps (locationDating).
5. Gọi video được thiết kế như thế nào và có xử lý trường hợp mạng bị gián đoạn không?
Theo use case ID 16, luồng gọi video gồm 9 bước: người dùng chọn đối tượng, hệ thống yêu cầu backend (FinderBE) xác nhận và thiết lập kết nối, mở giao diện gọi, hai bên giao tiếp, một trong hai bên kết thúc thì hệ thống gửi tin nhắn kết thúc cuộc gọi. Đồ án liệt kê hai trường hợp ngoại lệ: kết nối video bị gián đoạn do vấn đề mạng hoặc lỗi hệ thống, và người dùng hủy cuộc gọi trước khi kết nối được thiết lập. Thông tin cuộc gọi (startTime, endTime, reviews với rating và content) được lưu trong collection Message.
Kết luận
Đồ án "Xây dựng website kết bạn, hẹn hò Finder" của nhóm sinh viên Nguyễn Đắc Thắng, Nguyễn Trường Giang và Phạm Minh Phát (Khoa Công nghệ Thông tin, Trường Đại học Sư phạm Kỹ thuật TP.HCM, khóa 2019) xây dựng một nền tảng kết bạn hẹn hò trực tuyến hoàn chỉnh với stack công nghệ hiện đại gồm React/NextJS, NestJS, Golang/Fiber và MongoDB. Điểm nổi bật của hệ thống là ba chức năng chưa có ở các ứng dụng tương tự đã khảo sát: gợi ý địa điểm hẹn hò bằng AI kết hợp Google Maps Platform, tạo và quản lý lời mời hẹn hò, cùng tính năng xác thực khuôn mặt realtime qua gocv/OpenCV. Hệ thống được phát triển trong 15 tuần, bao gồm trang web client cho người dùng và trang admin quản trị, với thiết kế cơ sở dữ liệu MongoDB chi tiết gồm 8 collection và đặc tả đầy đủ 15 use case. Nhóm thừa nhận hạn chế về kinh nghiệm thực tế và mở ra hướng phát triển tiếp theo về tối ưu thuật toán gợi ý, mở rộng sang nền tảng di động và tăng cường bảo mật hệ thống.