Bối cảnh và vấn đề nghiên cứu

Trong bối cảnh phát triển của công nghệ thông tin và thương mại điện tử, việc mua bán và trao đổi hàng hóa đã qua sử dụng (đồ cũ) trở thành nhu cầu thiết thực của xã hội. Việc xây dựng nền tảng trực tuyến chuyên biệt giúp người tiêu dùng dễ dàng tiếp cận, tìm kiếm và giao dịch từ nhiều thiết bị, đồng thời mở rộng phạm vi kết nối giữa người mua và người bán trên toàn quốc. Bên cạnh tiện ích kinh tế, việc tái sử dụng đồ cũ còn đóng góp vào mục tiêu bảo vệ môi trường, thúc đẩy kinh doanh cộng đồng và hỗ trợ các chiến dịch thiện nguyện thông qua tính năng tặng sản phẩm.

Tuy nhiên, các nền tảng thương mại điện tử và rao vặt hiện nay vẫn còn tồn tại các hạn chế:

  • Chưa kiểm soát chặt chẽ chất lượng sản phẩm và mức độ uy tín của người tham gia.
  • Nguy cơ lừa đảo khi thông tin do người bán đăng tải có thể bị làm giả.
  • Hình thức giao dịch trực tiếp tiềm ẩn rủi ro về an toàn thanh toán và xác thực đơn hàng.
  • Nguy cơ xuất hiện các hình ảnh không phù hợp, nhạy cảm hoặc bạo lực trên hệ thống.

Xuất phát từ thực trạng đó, đề tài "Xây dựng hệ thống thương mại điện tử đồ cũ" được thực hiện bởi sinh viên Lê Hải Đăng và Lương Xuân Thắng, dưới sự hướng dẫn của ThS. Nguyễn Hữu Trung tại Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh (chuyên ngành Công nghệ phần mềm, khóa 2020–2024).

Mục tiêu và nhiệm vụ nghiên cứu của đề tài bao gồm các nội dung được xác định cụ thể:

  1. Nghiên cứu thực tiễn các sàn thương mại điện tử đang hoạt động tại Việt Nam (Shopee, Chợ Tốt, Lazada) để đúc kết yêu cầu nghiệp vụ.
  2. Tìm hiểu và ứng dụng bộ công nghệ TypeScript toàn diện: ReactJS, Next.js (phiên bản 14), Tailwind CSS (phiên bản 3), Redux Toolkit, Material Tailwind, NextUI cho phần giao diện (Frontend).
  3. Tìm hiểu và ứng dụng NodeJS, NestJS (phiên bản 10), Mongoose, RESTful API để xây dựng hệ thống xử lý phía máy chủ (Backend) theo kiến trúc mô-đun và cơ chế Dependency Injection.
  4. Ứng dụng hệ quản trị cơ sở dữ liệu NoSQL MongoDB để lưu trữ dữ liệu phi cấu trúc và tài liệu JSON.
  5. Triển khai cơ chế lưu trữ đệm và xử lý trạng thái tạm thời bằng Redis cho các luồng xử lý hóa đơn, tạo/hủy đơn hàng.
  6. Ứng dụng Socket.io để xử lý chức năng nhắn tin thời gian thực giữa người dùng với nhau và giữa người dùng với cửa hàng.
  7. Xây dựng giải pháp bảo mật không trạng thái (stateless) với JSON Web Token (JWT mã hóa SHA-256), thư viện Bcrypt để mã hóa mật khẩu, kết hợp Next-Auth và Passport hỗ trợ xác thực OAuth 2.0 (Google, Facebook).
  8. Tích hợp các dịch vụ của bên thứ ba: Cloudinary (lưu trữ hình ảnh), PicPurify (quét và lọc tự động ảnh nhạy cảm, máu, vũ khí), VNPay và PayPal (thanh toán điện tử), Nodemailer (gửi email thông báo).
  9. Thiết lập Cronjob nhằm tự động hóa các tác vụ nghiệp vụ có định kỳ thời gian.
  10. Thiết kế và triển khai quy trình CI/CD sử dụng GitHub Actions, Docker và Nginx.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Quy trình tổ chức và vận hành sàn thương mại điện tử; các công nghệ phát triển ứng dụng web hiện đại (Next.js, NestJS, MongoDB, Redis, JWT, PicPurify).
  • Phạm vi nghiên cứu: Xử lý các nghiệp vụ cốt lõi của một hệ thống mua bán và trao đổi đồ cũ trực tuyến, bao gồm 6 phân hệ người dùng (Khách, Người dùng, Người bán, Người vận chuyển, Người quản lý, Quản trị hệ thống). Thời gian thực hiện đồ án từ ngày 19/02/2024 đến ngày 30/05/2024.

Cơ sở lý thuyết và phương pháp

Đề tài kết hợp phương pháp nghiên cứu lý thuyết công nghệ phần mềm và phương pháp khảo sát, phân tích thực nghiệm các hệ thống thực tế.

Phương pháp nghiên cứu

  • Khảo sát hiện trạng: Đánh giá ưu điểm, nhược điểm và chức năng của 3 nền tảng thương mại điện tử, rao vặt phổ biến tại Việt Nam gồm Shopee, Chợ Tốt và Lazada.
  • Phân tích và thiết kế hệ thống: Áp dụng mô hình hướng đối tượng với ngôn ngữ mô hình hóa UML (Lược đồ Use Case, Lược đồ Hoạt động, Lược đồ Tuần tự) và thiết kế lược đồ cơ sở dữ liệu hướng tài liệu.
  • Phương pháp kiểm thử phần mềm: Xây dựng kịch bản kiểm thử chức năng (Functional Testing) cho từng ca sử dụng của hệ thống để phát hiện và khắc phục lỗi.

Cơ sở công nghệ và mô hình dữ liệu

  • Frontend: Next.js hỗ trợ Server-Side Rendering (SSR) và Static Site Generation (SSG) giúp tối ưu hóa SEO và tốc độ tải trang; Tailwind CSS xây dựng giao diện tiện ích nhanh; Redux Toolkit quản lý trạng thái tập trung.
  • Backend: NestJS xây dựng trên nền NodeJS, áp dụng TypeScript, kiến trúc MVC/mô-đun, Data Transfer Objects (DTO) để kiểm tra tính hợp lệ của dữ liệu đầu vào.
  • Cơ sở dữ liệu MongoDB: Lưu trữ dưới dạng Collection và Document, sử dụng trường _id làm khóa chính mặc định.
Khái niệm RDBMS Tương đương trong MongoDB Đặc điểm trong đề tài
Database Database Cơ sở dữ liệu ứng dụng
Table Collection Chứa các tập tài liệu người dùng, sản phẩm, đơn hàng
Row / Tuple Document Bản ghi dữ liệu định dạng BSON/JSON
Column Field Thuộc tính của thực thể
Table Join Embedded Documents / Reference Nhúng hoặc liên kết tài liệu qua ObjectID
Primary Key Primary Key (_id) Khóa mặc định do MongoDB tự sinh

Thiết kế và triển khai

Kiến trúc hệ thống

Hệ thống được xây dựng theo kiến trúc phân tầng tách biệt giữa Client và Server:

  • Tầng hiển thị (Client/Frontend): Ứng dụng Next.js giao tiếp với hệ thống Backend thông qua thư viện Axios bằng giao thức HTTP/HTTPS (RESTful API) và giao thức WebSocket (Socket.io) phục vụ luồng tin nhắn trực tiếp.
  • Tầng nghiệp vụ (Server/Backend): Xây dựng trên nền NestJS, đảm nhận phân quyền JWT, xử lý logic mua bán, kết nối các dịch vụ bên thứ ba (VNPay, PayPal, Cloudinary, PicPurify, Nodemailer) và điều phối các tác vụ tự động hóa qua Cronjob.
  • Tầng dữ liệu (Database & Cache): MongoDB lưu trữ dữ liệu chính; Redis đóng vai trò lưu trữ phiên ngắn hạn, hỗ trợ giữ chỗ và giải phóng trạng thái khi xử lý hóa đơn, đơn hàng.
  • Hạ tầng và Triển khai: Hệ thống sử dụng Docker container hóa ứng dụng, Nginx làm Web Server/Reverse Proxy và GitHub Actions để tự động hóa quy trình CI/CD.

Phân quyền và các phân hệ tác nhân (Actors)

Hệ thống thiết lập phân quyền chặt chẽ cho 6 nhóm tác nhân:

  1. Khách (Guest): Xem danh mục, xem chi tiết sản phẩm, đăng ký tài khoản, đăng nhập hệ thống, đăng ký trở thành shipper.
  2. Người dùng (User/Buyer): Quản lý thông tin cá nhân, giỏ hàng, đặt hàng (hỗ trợ tích hợp mã khuyến mãi, xu tích lũy), thanh toán (VNPay/PayPal/COD), hủy đơn, yêu cầu hoàn đơn, đánh giá sản phẩm (xếp hạng sao, nội dung, đồng thuận), báo cáo vi phạm, nhắn tin, theo dõi cửa hàng, chia sẻ bài viết lên mạng xã hội, tạo cửa hàng cá nhân.
  3. Người bán (Seller): Quản lý sản phẩm (thêm, sửa, xóa, gắn nhãn bán hoặc tặng), quản lý đơn hàng theo luồng trạng thái, chuyển đơn cho đơn vị vận chuyển, xác nhận hoàn đơn, theo dõi thống kê doanh thu và báo cáo xuất nhập kho.
  4. Người vận chuyển (Shipper): Tiếp nhận hoặc bỏ qua đơn hàng được điều phối, cập nhật trạng thái giao hàng thành công hoặc trả hàng về người bán, quản lý lịch sử giao hàng.
  5. Người quản lý (Manager): Kiểm duyệt hồ sơ đăng ký shipper, xử lý các báo cáo vi phạm về sản phẩm/cửa hàng/người dùng, mở/khóa tài khoản, quản lý và xuất danh sách dữ liệu ra tệp Excel, thiết lập chương trình khuyến mãi.
  6. Quản trị hệ thống (Admin): Sở hữu toàn bộ quyền của Người quản lý; quản lý chính sách hệ thống (thêm/sửa/xóa chính sách cho người dùng, sản phẩm, cửa hàng); xem báo cáo thống kê tổng thể doanh thu năm, thống kê top cửa hàng và top người dùng mua sắm.

Nội dung chính theo từng chương

Chương 1: Khảo sát hiện trạng và xác định yêu cầu

Chương này phân tích chi tiết các nền tảng thương mại điện tử hiện có:

  • Shopee: Nổi bật với tính năng chat, quản lý đơn hàng tích hợp, chương trình khuyến mãi đa dạng; nhược điểm là chưa kiểm soát triệt để uy tín người bán, khó khăn khi truy cập khung giờ cao điểm và chưa quản lý chặt khâu nhận hàng từ shipper.
  • Chợ Tốt: Giao diện trực quan, danh mục phong phú, bộ lọc đa dạng; nhược điểm là định hướng rao vặt bị loãng bởi bất động sản/xe cộ giá trị cao, dễ phát sinh thông tin giả mạo và giao dịch thiếu bảo đảm.
  • Lazada: Gian hàng quy chuẩn, vận chuyển nhanh (Hỏa tốc 4H); nhược điểm là độ bắt mắt giao diện thấp hơn và hiển thị khuyến mãi chưa thực sự nổi bật.

Từ kết quả khảo sát, tác giả xác định chi tiết các yêu cầu chức năng: lưu trữ dữ liệu (người dùng, cửa hàng, sản phẩm, giỏ hàng, hóa đơn, báo cáo, đánh giá, chính sách...), tra cứu, tính toán, kết xuất tệp Excel, các ca sử dụng quản lý và hệ thống quy tắc nghiệp vụ tự động hóa:

  • Tự động cộng tiền vào ví cho người bán sau 3 ngày kể từ khi đơn hàng giao thành công.
  • Tự động xác nhận đơn hàng sau 1 ngày nếu người mua không thực hiện xác nhận.
  • Tự động xóa hồ sơ đăng ký shipper nếu chưa xác thực sau 7 ngày.
  • Tự động ẩn mã khuyến mãi khi hết thời hạn hiệu lực.
  • Tự động quét phản hồi của người dùng, xóa bỏ các phản hồi vi phạm chính sách và gửi email thông báo.

Chương 2: Kiến trúc hệ thống và các công nghệ áp dụng

Chương 2 trình bày kiến trúc tổng thể của hệ thống và cơ sở lý thuyết của các công nghệ:

  • Trình bày cơ chế hoạt động của Next.js (SSR, SSG, tối ưu hình ảnh tự động), Tailwind CSS, NestJS (Dependency Injection, mô hình mô-đun, DTO).
  • So sánh sự khác biệt giữa cơ sở dữ liệu quan hệ (RDBMS) và cơ sở dữ liệu hướng tài liệu MongoDB.
  • Trình bày giải pháp xác thực stateless qua JWT mã hóa SHA-256, OAuth 2.0 qua Google/Facebook với Next-Auth/Passport.
  • Tích hợp PicPurify để kiểm duyệt tự động hình ảnh tải lên, ngăn chặn các nội dung phản cảm, hình ảnh vũ khí, súng hoặc máu.

Chương 3: Thiết kế phần mềm

Tác giả chi tiết hóa thiết kế hệ thống thông qua các công cụ mô hình hóa:

  • Xây dựng hệ thống Lược đồ Use Case tổng quát và Lược đồ Use Case chi tiết cho 6 phân hệ tác nhân.
  • Xây dựng bảng đặc tả Use Case chi tiết (từ UC-1 đến UC-37) bao gồm: Định danh, Tên, Tác nhân, Tiền điều kiện, Hậu điều kiện, Luồng sự kiện chính (Basic Flow), Luồng sự kiện thay thế (Alternate Flows) và Luồng ngoại lệ (Exception Flows).
  • Xây dựng hệ thống Lược đồ Hoạt động (Activity Diagrams) và Lược đồ Tuần tự (Sequence Diagrams) cho các quy trình nghiệp vụ quan trọng: Đăng ký (xác thực qua OTP gửi về email), Đăng nhập, Thêm sản phẩm, Quản lý giỏ hàng, Đặt hàng và thanh toán (PayPal, VNPay), Hủy/Hoàn đơn, Xử lý giao hàng của Shipper, Xử lý báo cáo và thống kê của Quản lý/Admin.
  • Thiết kế Lược đồ Cơ sở dữ liệu (Database Schema) trên MongoDB với các collection lưu trữ thực thể và mối quan hệ giữa chúng.

Chương 4: Thiết kế giao diện

Chương 4 mô tả thiết kế luồng màn hình (Screen Flow) và chi tiết giao diện cho từng đối tượng người dùng:

  • Luồng màn hình khách và người dùng: Tìm kiếm/lọc sản phẩm, xem chi tiết, giỏ hàng, luồng thanh toán đơn hàng, giao diện quản lý thông tin cá nhân.
  • Luồng màn hình người bán: Giao diện mở cửa hàng, giao diện tạo mới và cập nhật sản phẩm, giao diện quản lý kho hàng và danh sách đơn mới.
  • Luồng màn hình shipper: Tiếp nhận đơn, bỏ qua đơn, cập nhật trạng thái đơn đã giao/đã trả.
  • Luồng màn hình quản lý và admin: Danh sách quản lý người dùng, cửa hàng, sản phẩm, shipper, giao diện duyệt báo cáo, trang thiết lập mã khuyến mãi, giao diện cấu hình chính sách và trang thống kê biểu đồ doanh thu.

Chương 5: Cài đặt và kiểm thử

Chương 5 trình bày cấu trúc thư mục triển khai Backend (NestJS), Frontend (Next.js) và kết quả kiểm thử chức năng:

  • Thiết lập môi trường hệ thống và cấu trúc mã nguồn theo chuẩn mô-đun hóa.
  • Thực hiện kiểm thử các kịch bản chức năng quan trọng: đăng ký form hệ thống, đăng nhập qua Google, chỉnh sửa thông tin cá nhân, tạo mới và cập nhật sản phẩm, đặt hàng, duyệt hồ sơ shipper, duyệt báo cáo vi phạm, kiểm tra tính năng ngăn chặn khi tải lên ảnh súng/máu qua PicPurify, thêm và chỉnh sửa chính sách hệ thống.

Kết quả và đóng góp

Kết quả đạt được

  • Xây dựng hoàn chỉnh ứng dụng website thương mại điện tử chuyên biệt cho đồ cũ với đầy đủ 6 phân hệ chức năng hoạt động đồng bộ.
  • Xây dựng và kiểm thử thành công hệ thống RESTful API trên NestJS kết hợp cơ sở dữ liệu MongoDB và bộ nhớ đệm Redis.
  • Tích hợp thành công các cổng thanh toán điện tử VNPay và PayPal, hỗ trợ xác thực đăng nhập bên thứ ba (Google, Facebook) và xác thực tài khoản qua OTP email.
  • Triển khai thành công tính năng kiểm duyệt hình ảnh tự động theo thời gian thực với PicPurify, loại bỏ nguy cơ xuất hiện ảnh nhạy cảm, bạo lực hoặc vũ khí khi người dùng đăng bán sản phẩm.
  • Tự động hóa các nghiệp vụ vận hành thông qua hệ thống Cronjob (tự động cộng tiền ví sau 3 ngày, tự động xác nhận đơn sau 1 ngày, tự động xóa shipper chưa xác thực sau 7 ngày, tự động quét vi phạm phản hồi).
  • Hoàn thành đầy đủ bộ tài liệu thiết kế phần mềm gồm 37 ca sử dụng (Use Case), hệ thống lược đồ UML (Use case, Activity, Sequence) và thiết kế chi tiết giao diện cho tất cả các phân hệ.

Đóng góp thực tiễn

  • Đề xuất mô hình sàn thương mại điện tử đồ cũ có sự tham gia của quy trình kiểm duyệt nội dung tự động bằng trí tuệ nhân tạo (PicPurify), giải quyết bài toán kiểm soát chất lượng hình ảnh trên các trang rao vặt truyền thống.
  • Cung cấp mô hình quy trình xử lý đơn hàng khép kín có sự tham gia trực tiếp của vai trò Shipper độc lập trên hệ thống cùng cơ chế hoàn tiền/hủy đơn minh bạch.
  • Tích hợp mục đích thiện nguyện và kinh doanh cộng đồng thông qua việc hỗ trợ phân loại sản phẩm đăng bán hoặc tặng miễn phí.

Hạn chế và hướng nghiên cứu tiếp

Hạn chế

  • Hệ thống mới chỉ tập trung xử lý các nghiệp vụ trên nền tảng ứng dụng Website, chưa phát triển ứng dụng di động (Mobile App).
  • Cơ chế kiểm duyệt nội dung tự động hiện chủ yếu tập trung vào kiểm duyệt hình ảnh (qua PicPurify), phần kiểm duyệt nội dung văn bản phản hồi dựa trên từ khóa chính sách còn ở mức cơ bản.
  • Dung lượng lưu trữ hình ảnh trên Cloudinary đối với gói miễn phí còn hạn chế (1GB).

Hướng phát triển

  • Phát triển ứng dụng trên nền tảng di động (Android và iOS) để tăng tính tiện lợi cho người dùng và shipper khi giao nhận hàng ngoài thực địa.
  • Ứng dụng các mô hình học máy và trí tuệ nhân tạo chuyên sâu hơn vào việc gợi ý sản phẩm theo hành vi người dùng và phân tích tự động chất lượng mô tả sản phẩm đồ cũ.
  • Mở rộng quy mô lưu trữ hình ảnh và tối ưu hóa hạ tầng máy chủ khi lượng người dùng tăng cao.

Giá trị tham khảo

Đồ án là tài liệu tham khảo cho các đối tượng và mục đích cụ thể:

  • Sinh viên ngành Công nghệ thông tin, Kỹ thuật phần mềm: Tham khảo cách phân tích, thiết kế hệ thống thương mại điện tử hoàn chỉnh theo mô hình UML; cấu trúc dự án fullstack hiện đại sử dụng đồng nhất ngôn ngữ TypeScript trên cả Frontend (Next.js) và Backend (NestJS).
  • Người phát triển ứng dụng web thương mại điện tử: Tham khảo tài liệu đặc tả 37 ca sử dụng (Use Case) chi tiết, luồng xử lý giỏ hàng, tích hợp thanh toán (VNPay, PayPal), cơ chế bảo mật stateless qua JWT, quy trình tích hợp API kiểm duyệt ảnh PicPurify và cấu hình các tác vụ định kỳ qua Cronjob.

Câu hỏi thường gặp

1. Hệ thống giải quyết vấn đề kiểm soát hình ảnh nhạy cảm và sản phẩm không phù hợp bằng cách nào?
Hệ thống tích hợp API của dịch vụ PicPurify vào quy trình tải ảnh lên khi người dùng cập nhật ảnh đại diện hoặc tạo mới sản phẩm. Dịch vụ này tự động quét và phân tích ảnh theo thời gian thực nhằm phát hiện và ngăn chặn các nội dung phản cảm, hình ảnh khiêu dâm, bạo lực, ma túy, vũ khí hoặc máu.

2. Quy trình tự động hóa xử lý đơn hàng và quyết toán tiền cho người bán được thiết lập như thế nào?
Hệ thống sử dụng Cronjob để tự động hóa: sau khi đơn hàng được Shipper cập nhật trạng thái "giao hàng thành công" trong vòng 3 ngày, hệ thống sẽ tự động chuyển tiền vào ví của người bán. Đồng thời, nếu người mua chưa bấm xác nhận đã nhận hàng thì hệ thống sẽ tự động xác nhận sau 1 ngày.

3. Cơ chế xác thực và bảo mật người dùng trong hệ thống được triển khai bằng công nghệ gì?
Hệ thống áp dụng kiến trúc không trạng thái (stateless) với JSON Web Token (JWT) được mã hóa bằng thuật toán SHA-256 kèm mã hóa mật khẩu Bcrypt. Đối với đăng nhập mạng xã hội, hệ thống sử dụng Next-Auth và Passport (Passport Google OAuth 2.0, Passport Facebook). Khi đăng ký tài khoản mới qua biểu mẫu, hệ thống gửi mã OTP về email người dùng để xác thực.

4. Phân hệ Shipper đóng vai trò gì và có những chức năng chính nào?
Shipper là một phân hệ tác nhân độc lập trong hệ thống. Người dùng có thể nộp hồ sơ đăng ký làm shipper để Quản lý xét duyệt (nếu không xác thực sau 7 ngày sẽ tự động bị xóa). Sau khi được duyệt, Shipper có các chức năng: nhận hoặc bỏ qua đơn hàng được chuyển từ người bán, cập nhật trạng thái giao hàng thành công hoặc trả hàng, xem danh sách đơn đã giao/đã trả và quản lý thông tin cá nhân.


Kết luận

Khóa luận tốt nghiệp "Xây dựng hệ thống thương mại điện tử đồ cũ" của sinh viên Lê Hải Đăng và Lương Xuân Thắng đã giải quyết trọn vẹn mục tiêu xây dựng một nền tảng mua bán, trao đổi và tặng đồ cũ trực tuyến. Đề tài áp dụng ngăn xếp công nghệ TypeScript đồng bộ (Next.js, NestJS, Tailwind CSS, MongoDB, Redis) cùng quy trình thiết kế phần mềm chi tiết với 37 ca sử dụng và các kịch bản kiểm thử rõ ràng. Việc tích hợp thành công thanh toán trực tuyến, kiểm duyệt ảnh tự động với PicPurify và tự động hóa vận hành qua Cronjob mang lại giá trị ứng dụng thực tiễn cao cho mô hình kinh doanh tuần hoàn và tái sử dụng sản phẩm.