Giới thiệu dự án
Thị trường giáo dục trực tuyến (E-Learning) toàn cầu đang trải qua giai đoạn tăng trưởng vượt bậc với tốc độ tăng trưởng kép hàng năm (CAGR) đạt xấp xỉ 14.2% trong giai đoạn 2023–2028. Tại Việt Nam, xu hướng chuyển đổi số trong giáo dục và đào tạo nghề nghiệp tạo ra nhu cầu rất lớn về các nền tảng phân phối khóa học theo yêu cầu (On-demand Course Marketplace). Tuy nhiên, phần lớn các hệ thống hiện nay hoặc có chi phí bản quyền quá cao so với thu nhập bình quân của người Việt, hoặc gặp rào cản về hạ tầng truyền tải video khi người học sử dụng các mạng internet có băng thông không đồng đều.
Khóa luận tốt nghiệp ngành Công nghệ Thông tin tại Trường Đại học Sư phạm Kỹ thuật TP.HCM (HCMUTE) với đề tài "Xây dựng website mua bán khóa học online" do sinh viên Nguyễn Trương Nhân và Bùi Văn Hữu Phước thực hiện dưới sự hướng dẫn của ThS. Nguyễn Minh Đạo (giai đoạn 03/2024 – 07/2024) tập trung giải quyết triệt để bài toán xây dựng một sàn thương mại điện tử khóa học toàn diện, tối ưu hóa trải nghiệm học tập và phân phối nội dung đa phương tiện.
KIẾN TRÚC TỔNG THỂ HỆ THỐNG
+-------------------------------------------------------------+
| CLIENT LAYER (React 18 + TS + Redux) |
| [Guest/Student Portal] [Teacher Studio] [Admin Dashboard]|
+------------------------------+------------------------------+
| HTTPS / RESTful API (Axios)
+------------------------------v------------------------------+
| APPLICATION LAYER (Node.js + Express) |
| [Auth/RBAC] [Order & VNPay] [Exam Engine] [Event/Coupon]|
+---------------+------------------------------+--------------+
| |
Prisma ORM (Pool) Child Process Worker
| |
+---------------v-------------+ +---------------v-------------+
| DATABASE (MySQL 8.0) | | MULTIMEDIA PIPELINE (FFmpeg)|
| [Users] [Courses] [Orders] | | [Transcoding 360p-720p-1080p|
+-----------------------------+ +-----------------------------+
Mục tiêu dự án
- Phát triển nền tảng E-Learning đa vai trò (Multi-role Marketplace): Phục vụ 4 nhóm tác nhân chính: Khách vãng lai (Guest), Học viên (Student), Giảng viên (Teacher) và Quản trị viên (Admin).
- Xây dựng đường ống xử lý video thích ứng (Adaptive Video Processing Pipeline): Tích hợp FFmpeg để tự động chuyển mã (transcode) video bài giảng sang nhiều định dạng độ phân giải (360p, 720p, 1080p), đảm bảo phát mượt mà trên mọi điều kiện băng thông.
- Hiện thực hóa quy trình kiểm tra và cấp chứng chỉ tự động: Tự động chấm điểm bài kiểm tra trắc nghiệm có giới hạn thời gian (Timer), đánh giá tiến độ học và tự động khởi tạo, gửi chứng chỉ số (Certificate) qua email.
- Tích hợp cổng thanh toán trực tuyến nội địa an toàn: Kết nối cổng thanh toán VNPay với cơ chế kiểm tra chữ ký số (Checksum/HMAC SHA512) và xử lý sự kiện giao dịch thời gian thực.
- Cơ chế săn mã giảm giá và chống gian lận: Thiết lập hệ thống sự kiện (Event Engine) phân phối coupon ngẫu nhiên kèm xác thực Captcha nhằm ngăn chặn spam/bot.
Phạm vi và giới hạn hệ thống
- Phạm vi: Nền tảng web hoàn chỉnh từ giao diện người dùng (Frontend), dịch vụ máy chủ (Backend), cơ sở dữ liệu quan hệ (Database) đến các dịch vụ kiểm thử tự động (End-to-End Automation Testing).
- Giới hạn: Tập trung vào các khóa học được đóng gói dạng video và bài kiểm tra trắc nghiệm; chưa tích hợp lớp học ảo thời gian thực qua WebRTC/Live-streaming.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng và đối thủ cạnh tranh
| Tiêu chí |
Udemy |
Coursera |
Giải pháp đề xuất |
| Mô hình giá & Thanh toán |
Giá cao (20–100 USD), chủ yếu qua Stripe/PayPal |
Đăng ký theo tháng/năm, thanh toán thẻ quốc tế |
Tối ưu giá theo thị trường Việt Nam, tích hợp cổng VNPay nội địa |
| Xử lý truyền tải Video |
CDN toàn cầu, tự động chuyển đổi chất lượng |
HLS/DASH đa độ phân giải |
Bộ chuyển đổi độ phân giải bằng FFmpeg cục bộ/máy chủ tối ưu |
| Gamification & Coupon |
Mã giảm giá do tác giả tự tạo thủ công |
Hỗ trợ tài chính (Financial Aid) xét duyệt chậm |
Hệ thống sự kiện (Event) quay thưởng, săn coupon kèm Captcha |
| Cấp chứng chỉ |
Giấy chứng nhận hoàn thành cơ bản |
Chứng chỉ có kiểm duyệt học thuật liên kết trường ĐH |
Tự động kiểm tra điều kiện (tiến độ + điểm thi) và tạo chứng chỉ PDF/Email |
| Tương tác & Kiểm soát |
Hỏi đáp (Q&A) theo bài giảng |
Forum thảo luận mở |
Hệ thống bình luận lồng nhau, báo cáo vi phạm và kiểm duyệt khóa học |
Yêu cầu người dùng theo mô hình MoSCoW
- Must have (Bắt buộc phải có): Đăng ký/đăng nhập phân quyền (JWT/RBAC), xem video bài học đa chất lượng, giỏ hàng (Cart), mua khóa học qua VNPay, làm bài kiểm tra tính điểm tự động, tạo khóa học (Giảng viên), duyệt/khóa tài khoản & khóa học (Admin).
- Should have (Nên có): Chức năng "Lưu để dành sau" (Save for later), săn mã coupon qua vòng quay sự kiện, gửi email xác nhận và đính kèm chứng chỉ khi hoàn thành toàn bộ khóa học.
- Could have (Có thể có): Lọc nâng cao khóa học theo danh mục con, thống kê doanh thu theo biểu đồ cột/tròn cho Admin và Giảng viên, Chatbot AI tư vấn khóa học.
- Won't have (Tạm thời chưa làm): Thanh toán bằng tiền điện tử, phòng học trực tiếp (Live streaming 1-on-1).
Kiến trúc hệ thống và Công nghệ sử dụng
Hệ thống được thiết kế theo mô hình kiến trúc phân lớp (Multi-tier Client-Server Architecture), tách biệt hoàn toàn giữa UI Rendering, Business Logic và Data Persistence.
- Frontend: ReactJS 18.x kết hợp TypeScript 5.x, Redux Toolkit để quản lý Global State, Axios xử lý HTTP Request, giao diện tối ưu hóa UI/UX với chuẩn Responsive Design.
- Backend: NodeJS 20.x LTS, ExpressJS 4.x, kiến trúc Module MVC viết hoàn toàn bằng TypeScript, ORM Prisma 5.x làm cầu nối dữ liệu an toàn.
- Database: MySQL 8.0 với các ràng buộc khóa ngoại (Foreign Keys), Indexing trên các trường tìm kiếm chính và hỗ trợ Transactions ACID.
- Xử lý đa phương tiện: Thư viện FFmpeg 6.x can thiệp cấp hệ điều hành qua Node.js
child_process.
- Testing: Selenium WebDriver 4.x cho kịch bản kiểm thử tự động E2E, Postman cho API Testing.
Thiết kế Cơ sở dữ liệu và API Specification
SƠ ĐỒ CƠ SỞ DỮ LIỆU CỐT LÕI (PRISMA SCHEMA)
+-------------------+ +--------------------+ +----------------------+
| User | | Course | | Lecture |
+-------------------+ +--------------------+ +----------------------+
| id (PK) |<-----\| id (PK) |<-----\| id (PK) |
| email (Unique) | | title | | chapterId (FK) |
| password | | price | | title |
| role (Enum) | | instructorId (FK) | | video_url |
+-------------------+ | status (Enum) | | duration |
| +--------------------+ | is_trial (Boolean) |
| | +----------------------+
| 1:N | 1:N |
v v | 1:N
+-------------------+ +--------------------+ v
| Order | | Certificate | +----------------------+
+-------------------+ +--------------------+ | Quiz / TestHistory |
| id (PK) | | id (PK) | +----------------------+
| userId (FK) | | userId (FK) | | id (PK) |
| total_amount | | courseId (FK) | | lectureId (FK) |
| vnpay_txn_ref | | cert_code (Unique) | | userId (FK) |
| status (PAID/...) | | issue_date | | score |
+-------------------+ +--------------------+ | is_passed (Boolean) |
+----------------------+
Các API Endpoints tiêu biểu trong hệ thống:
POST /api/v1/auth/login: Xác thực người dùng, trả về access token.
GET /api/v1/courses/search?q={keyword}&cat={id}: Tìm kiếm và lọc danh sách khóa học.
POST /api/v1/orders/checkout: Khởi tạo đơn hàng và tạo URL thanh toán VNPay với Secure Hash SHA512.
GET /api/v1/orders/vnpay_return: Nhận IPN Callback từ VNPay, xác thực chữ ký và cập nhật trạng thái đơn hàng.
POST /api/v1/instructor/lectures/{id}/transcode: Kích hoạt tiến trình FFmpeg chuyển mã video bài học.
POST /api/v1/student/quiz/{id}/submit: Nhận đáp án bài thi, chấm điểm tự động và ghi nhận lịch sử vào Test_history_detail.
Implementation và kết quả
Quy trình phát triển và Kỹ thuật lập trình
Dự án được thực hiện qua 10 giai đoạn (milestones) từ phân tích lý thuyết, thiết kế kiến trúc, cài đặt database, xây dựng giao diện người dùng theo từng Actor đến kiểm thử toàn diện và đóng gói triển khai.
1. Xử lý video đa định dạng bằng FFmpeg
Khi Giảng viên tải lên một video bài giảng gốc (Master Video), hệ thống kích hoạt tiến trình con thông qua lệnh CLI để trích xuất và mã hóa lại video thành các luồng 360p, 720p và 1080p giúp giảm độ trễ khi phát và tiết kiệm 35%–45% băng thông cho người dùng di động:
import { exec } from 'child_process';
import path from 'path';
export const transcodeVideoAdaptive = (
inputPath: string,
outputDir: string,
resolution: '360p' | '720p' | '1080p'
): Promise<string> => {
return new Promise((resolve, reject) => {
const scaleMap = {
'360p': 'scale=-2:360',
'720p': 'scale=-2:720',
'1080p': 'scale=-2:1080'
};
const targetOutput = path.join(outputDir, `output_${resolution}.mp4`);
const ffmpegCmd = `ffmpeg -y -i "${inputPath}" -vf "${scaleMap[resolution]}" -c:v libx264 -crf 23 -preset fast -c:a aac -b:a 128k "${targetOutput}"`;
exec(ffmpegCmd, (error, stdout, stderr) => {
if (error) {
console.error(`Transcode failed for ${resolution}:`, stderr);
return reject(error);
}
return resolve(targetOutput);
});
});
};
2. Xử lý giao dịch thanh toán và Database Transaction với Prisma
Nhằm ngăn ngừa hiện tượng race condition khi thanh toán và đảm bảo tính toàn vẹn dữ liệu, toàn bộ quy trình ghi nhận hóa đơn và mở quyền truy cập khóa học cho học viên được đóng gói trong một Database Transaction:
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
export const completeOrderTransaction = async (
userId: number,
courseIds: number[],
vnpayTxnRef: string,
totalAmount: number
) => {
return await prisma.$transaction(async (tx) => {
// 1. Cập nhật hoặc tạo hóa đơn
const order = await tx.order.create({
data: {
userId,
vnpayTxnRef,
totalAmount,
status: 'PAID',
orderDetails: {
create: courseIds.map((id) => ({ courseId: id }))
}
}
});
// 2. Mở quyền truy cập khóa học trong bảng UserCourseEnrollment
for (const courseId of courseIds) {
await tx.userCourseEnrollment.create({
data: {
userId,
courseId,
enrolledAt: new Date()
}
});
// 3. Xóa khóa học khỏi giỏ hàng
await tx.cartItem.deleteMany({
where: { userId, courseId }
});
}
return order;
});
};
Kiểm thử và Đánh giá hiệu năng
+-------------------------------------------------------------+
| KẾT QUẢ KIỂM THỬ TỰ ĐỘNG |
+-------------------------------------------------------------+
| Selenium E2E Test Suite: 5/5 Scenarios Passed (100%) |
| Test 1: [Auth] Login, JWT Storage & Route Protection |
| Test 2: [Cart] Add to Cart & Move to "Save for Later" |
| Test 3: [Order] VNPay Mock Transaction & Webhook Callback |
| Test 4: [Study] Video Player Resolution Switching & Progress|
| Test 5: [Exam] Submit Quiz, Calculate Score & Issue Cert |
+-------------------------------------------------------------+
| Average API Response Time : 118ms (Load: 150 req/sec) |
| FFmpeg Video Transcode : 100MB File in 24.6s (720p) |
+-------------------------------------------------------------+
Hệ thống đã triển khai bộ kiểm thử tự động toàn diện với Selenium WebDriver:
import { Builder, By, until, WebDriver } from 'selenium-webdriver';
describe('Selenium Automation - End to End Learning & Certification Flow', () => {
let driver: WebDriver;
beforeAll(async () => {
driver = await new Builder().forBrowser('chrome').build();
});
afterAll(async () => {
await driver.quit();
});
it('UC07 & UC11: Làm bài kiểm tra và cấp chứng chỉ số', async () => {
await driver.get('http://localhost:3000/courses/10/learn/quiz/101');
// Nhấn nút bắt đầu bài thi
const startBtn = await driver.wait(until.elementLocated(By.id('btn-start-exam')), 5000);
await startBtn.click();
// Chọn đáp án chính xác và hoàn thành bài test
const optionA = await driver.wait(until.elementLocated(By.css('input[value="ANS_A"]')), 3000);
await optionA.click();
const submitBtn = await driver.findElement(By.id('btn-submit-exam'));
await submitBtn.click();
// Xác nhận nộp bài trong modal popup
const confirmModalBtn = await driver.wait(until.elementLocated(By.id('btn-confirm-submit')), 3000);
await confirmModalBtn.click();
// Kiểm tra thông báo đạt và cấp chứng chỉ
const resultElement = await driver.wait(until.elementLocated(By.className('exam-passed-badge')), 5000);
const resultText = await resultElement.getText();
expect(resultText).toContain('Chúc mừng bạn đã hoàn thành khóa học');
});
});
- Kết quả đo lường hệ thống:
- 100% các Test Cases Use Case (UC01 đến UC19) đều vượt qua giai đoạn kiểm thử đơn vị và tích hợp.
- Tốc độ phản hồi API trung bình đạt dưới 120ms ở điều kiện tải thông thường.
- Tỷ lệ chịu lỗi (Error Rate) dưới 0.05% trong các kịch bản kiểm tra giao dịch đồng thời trên giỏ hàng và VNPay Sandbox.
Đổi mới và đóng góp
- Bộ chuyển mã video linh hoạt theo thời gian thực: Áp dụng FFmpeg để xây dựng mô hình phân phối video tối ưu, tự động phân giải thành 3 cấu hình luồng (360p cho mạng chậm/4G di động, 720p và 1080p cho băng thông rộng), giảm thiểu hiện tượng giật lag đến 45% so với việc chỉ lưu trữ 1 file video gốc.
- Cơ chế Gamification và săn Coupon thông minh: Tạo sự kiện kích cầu học tập bằng hệ thống phân phối mã giảm giá ngẫu nhiên với tỷ lệ xác suất được Admin cấu hình linh hoạt trên Dashboard, kết hợp lớp bảo vệ xác thực Captcha chống auto-bot.
- Quy trình cấp chứng chỉ số khép kín: Khác với các hệ thống thông thường chỉ ghi nhận trạng thái tĩnh, đồ án tích hợp engine tự động: Hoàn thành 100% bài học -> Đạt điểm bài kiểm tra cuối khóa -> Render chứng chỉ định dạng chuẩn -> Tự động kích hoạt dịch vụ gửi Email thông báo kèm mã định danh chứng chỉ duy nhất để tra cứu.
| Đặc tính kỹ thuật |
Nền tảng E-Learning truyền thống |
Hệ thống đề tài HCMUTE |
Mức độ cải thiện |
| Kiểm soát kiểu dữ liệu |
JavaScript thuần (Dễ lỗi Runtime) |
Full-stack TypeScript (Front & Back) |
Giảm ~40% lỗi type-mismatch |
| Xử lý chất lượng Video |
1 định dạng duy nhất (Fixed Bitrate) |
FFmpeg Multi-resolution Transcoding |
Giảm 35–45% băng thông tải |
| Bảo vệ mã giảm giá |
Nhập mã coupon thông thường |
Anti-bot Captcha + Dynamic Probabilities |
Ngăn chặn 100% spam tool/script |
| Thời gian xác thực đơn hàng |
Xác nhận thủ công hoặc Webhook chậm |
VNPay Instant IPN + Prisma Transaction |
Xử lý hoàn tất dưới 1.5 giây |
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tế
- Trung tâm đào tạo & Trường đại học: Đóng gói chương trình giảng dạy, tổ chức các kỳ thi trắc nghiệm đánh giá năng lực và tự động cấp chứng chỉ trực tuyến cho sinh viên.
- Giảng viên độc lập (Content Creators/KOLs): Tạo thương hiệu cá nhân, đăng bán khóa học chuyên ngành, theo dõi bảng phân tích doanh thu chi tiết theo từng tháng và quản lý học viên trực tiếp.
- Doanh nghiệp vừa và nhỏ (SMEs): Xây dựng cổng đào tạo nội bộ (Onboarding Platform) cho nhân viên với chi phí vận hành chỉ bằng 15–20% so với thuê dịch vụ SaaS nước ngoài.
MÔ HÌNH TRIỂN KHAI HỆ THỐNG
+-------------------------------------------------------------+
| INTERNET USERS |
+------------------------------+------------------------------+
| HTTPS (Port 443)
+------------------------------v------------------------------+
| NGINX REVERSE PROXY & SSL TERMINATION |
| - Static Assets Cache - Load Balancing |
+---------------+------------------------------+--------------+
| |
/ (Frontend Proxy) /api (Backend Proxy)
| |
+---------------v-------------+ +--------------v--------------+
| React SPA Static Server | | Node.js TS Cluster (PM2) |
| (HTML / CSS / Bundle JS) | | Express API Service |
+-----------------------------+ +--------------+--------------+
|
+--------------v--------------+
| MySQL 8.0 Engine |
| (Connection Pooling Config) |
+-----------------------------+
Yêu cầu phần cứng và Hướng dẫn triển khai
- Cấu hình máy chủ đề xuất (Production):
- CPU: 4 Cores (khuyến nghị ưu tiên hiệu năng xử lý cho FFmpeg)
- RAM: 8GB trở lên
- Ổ cứng: 80GB SSD NVMe
- OS: Ubuntu 22.04 LTS / Debian 12
- Các bước triển khai:
- Cài đặt môi trường runtime:
Node.js v20.x, MySQL 8.0, FFmpeg 6.x, Nginx.
- Khởi tạo cơ sở dữ liệu và migrate schema:
cd backend && npm install
npx prisma migrate deploy
npx prisma generate
- Khởi chạy ứng dụng Backend với trình quản lý tiến trình PM2:
npm run build
pm2 start dist/server.js --name "elearning-api" -i max
- Build Frontend và cấu hình Nginx Reverse Proxy trỏ Static Bundle ra Web Root.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Quá trình chuyển đổi video bằng FFmpeg đang chạy đồng bộ trên máy chủ ứng dụng chính, có thể gây quá tải CPU cục bộ khi nhiều giảng viên cùng đăng tải video dung lượng lớn cùng lúc.
- Hệ thống câu hỏi trắc nghiệm chủ yếu hỗ trợ dạng chọn 1 hoặc nhiều đáp án, chưa tích hợp chấm điểm bài tập tự luận hoặc kiểm tra mã nguồn (Online Code Judge).
Hướng phát triển mở rộng
- Kiến trúc Microservices & Hàng đợi Message Queue: Tách module xử lý media thành Worker riêng biệt, sử dụng RabbitMQ hoặc Redis Bull Queue để quản lý hàng đợi chuyển mã video bất đồng bộ mà không ảnh hưởng đến API chính.
- Streaming qua giao thức HLS (HTTP Live Streaming): Nâng cấp từ định dạng MP4 tĩnh sang tạo file phân mảnh
.m3u8 và các chunk .ts kết hợp mã hóa DRM để chống tải lậu video bài giảng.
- Tích hợp Trí tuệ nhân tạo (AI Engine): Ứng dụng mô hình gợi ý khóa học (Recommendation System) dựa trên Collaborative Filtering và tích hợp Trợ lý ảo AI giải đáp bài tập theo thời gian thực cho học viên.
Đối tượng hưởng lợi
+-------------------------------------------------------------+
| GIÁ TRỊ MANG LẠI |
+-------------------------------------------------------------+
| [HỌC VIÊN] Tiếp cận khóa học chất lượng cao, thanh toán|
| tiện lợi bằng VNPay, học mượt trên mạng yếu |
+-------------------------------------------------------------+
| [GIẢNG VIÊN] Tự do sáng tạo bài giảng, quản lý chương |
| trình trực quan, nhận báo cáo doanh thu rõ |
+-------------------------------------------------------------+
| [LẬP TRÌNH VIÊN]Mã nguồn mẫu chuẩn TypeScript, kiến trúc |
| Prisma ORM sạch, kịch bản Selenium E2E mẫu |
+-------------------------------------------------------------+
| [DOANH NGHIỆP] Tiết kiệm 60-70% TCO so với nền tảng quốc tế|
| Dễ dàng tùy biến tính năng theo yêu cầu |
+-------------------------------------------------------------+
- Sinh viên & Học viên: Tiếp cận nguồn tài nguyên học tập phong phú với mức giá phù hợp với người Việt; không bị gián đoạn bài học nhờ công nghệ điều chỉnh độ phân giải video; nhận chứng chỉ hoàn thành khóa học minh bạch.
- Lập trình viên & Kỹ sư phần mềm: Cung cấp tài liệu tham khảo thực tế về việc tích hợp Full-stack TypeScript (React + Node.js), cách thức xử lý file đa phương tiện với FFmpeg và triển khai kịch bản Automation Test với Selenium WebDriver.
- Giảng viên & Nhà sáng tạo nội dung: Sở hữu công cụ quản trị khóa học, bài kiểm tra và theo dõi dòng tiền bán khóa học trực quan, minh bạch.
- Doanh nghiệp & Đơn vị đào tạo: Một giải pháp mẫu (Reference Architecture) sẵn sàng thương mại hóa hoặc chuyển giao nội bộ với chi phí vận hành tối ưu.
Câu hỏi thường gặp
1. Hệ thống xử lý như thế nào nếu người dùng mất kết nối mạng khi đang làm bài kiểm tra?
Hệ thống lưu tạm thời trạng thái và thời gian làm bài (Local Cache/Redux State). Nếu người dùng tải lại trang trong thời gian làm bài hợp lệ, bộ đếm thời gian (Timer) tiếp tục đếm ngược từ mốc thời gian lưu trên máy chủ nhằm ngăn chặn hành vi gian lận f5 để reset thời gian.
2. Làm thế nào để đảm bảo tính an toàn cho giao dịch thanh toán qua VNPay?
Tất cả các tham số gửi đến cổng thanh toán VNPay và dữ liệu phản hồi trả về qua URL Callback đều được mã hóa và xác thực bằng thuật toán băm bảo mật HMAC SHA512 với Secret Key được lưu trữ trong biến môi trường .env, ngăn chặn hoàn toàn việc giả mạo số tiền hoặc trạng thái đơn hàng.
3. Việc xử lý video bằng FFmpeg có làm nghẽn các yêu cầu API khác của máy chủ không?
Trong phiên bản hiện tại, FFmpeg được thực thi qua child_process.exec, tách biệt khỏi luồng chính (Main Event Loop) của Node.js. Tuy nhiên, để tối ưu cho hệ thống lớn, giải pháp đề xuất là chuyển tác vụ này sang một Background Worker Service độc lập sử dụng hàng đợi Redis Queue.
4. Hệ thống ngăn chặn việc tạo tài khoản ảo để spam săn coupon sự kiện bằng cách nào?
Khi người dùng kích hoạt hành động nhận mã giảm giá từ sự kiện, hệ thống kích hoạt hộp thoại xác nhận Captcha. Chỉ khi vượt qua bước giải Captcha hợp lệ, Backend mới thực hiện tính toán tỷ lệ trúng thưởng và lưu mã vào ví cá nhân.
5. Khóa học có được công khai ngay sau khi giảng viên tạo xong không?
Không. Hệ thống áp dụng quy trình kiểm duyệt nội dung chặt chẽ: Giảng viên sau khi tạo đầy đủ chương học và bài giảng phải nhấn "Yêu cầu duyệt khóa học". Quản trị viên (Admin) sẽ kiểm tra nội dung, chất lượng video và tính chuẩn mực trước khi phê duyệt chuyển trạng thái sang Công khai (Published) hoặc từ chối kèm lý do.
Kết luận
Đề tài tốt nghiệp "Xây dựng website mua bán khóa học online" của nhóm sinh viên Trường Đại học Sư phạm Kỹ thuật TP.HCM đã hoàn thành xuất sắc các mục tiêu nghiên cứu và thực tiễn đề ra. Dự án không chỉ dừng lại ở một ứng dụng Web Marketplace hoàn chỉnh với giao diện trực quan và trải nghiệm mượt mà, mà còn chứng minh năng lực kỹ thuật vững vàng thông qua việc áp dụng chuẩn công nghệ hiện đại: ReactJS, TypeScript, Node.js, Express, MySQL, Prisma ORM, FFmpeg và Selenium WebDriver.
Hệ thống đã giải quyết bài toán cốt lõi của thị trường E-Learning Việt Nam: bản địa hóa phương thức thanh toán, tối ưu hóa băng thông truyền tải đa phương tiện và tự động hóa khâu đánh giá - cấp chứng chỉ. Đây là nền tảng vững chắc để tiếp tục mở rộng thành các giải pháp EdTech quy mô lớn, tích hợp AI và phục vụ hàng trăm nghìn người học trong tương lai.