Giới thiệu dự án

Thị trường giáo dục trực tuyến (EdTech) tại Việt Nam đang chứng kiến tốc độ tăng trưởng kép hàng năm (CAGR) đạt trên 13.5%, đặc biệt là phân khúc gia sư cá nhân hóa và các khóa học kỹ năng ngắn hạn. Tuy nhiên, các giải pháp kết nối gia sư truyền thống qua các trung tâm môi giới hiện bộc lộ nhiều điểm nghẽn nghiêm trọng: phí môi giới cao (thường chiếm từ 30% đến 50% tháng lương đầu), thông tin năng lực của gia sư thiếu minh bạch, quy trình xác thực bằng cấp thủ công và không có cơ chế theo dõi chất lượng học tập sau khi bàn giao lớp.

Dự án "Xây dựng website cung cấp dịch vụ gia sư và khoá học" được nghiên cứu và phát triển bởi sinh viên Trần Văn Khánh dưới sự hướng dẫn của ThS. Phạm Thị Trà My tại Khoa Công nghệ số – Trường Đại học Sư phạm Kỹ thuật, Đại học Đà Nẵng. Đề tài tập trung giải quyết bài toán cốt lõi: thiết lập một nền tảng số trung gian khép kín, kết hợp linh hoạt giữa việc tìm kiếm - đặt lịch gia sư 1-kèm-1 và nền tảng phân phối khóa học video theo yêu cầu (VOD), đảm bảo tính minh bạch, bảo mật và hiệu năng cao.

Mục tiêu cụ thể của dự án

  1. Phát triển giao diện trực quan, đa nền tảng: Xây dựng UI/UX chuẩn SPA (Single Page Application) tương thích toàn diện trên cả thiết bị di động lẫn máy tính để bàn.
  2. Xây dựng công cụ tìm kiếm và lọc thông minh: Cho phép học viên tra cứu gia sư/khóa học đa tiêu chí (môn học, khu vực, học phí, đánh giá sao, trình độ).
  3. Cơ chế kiểm duyệt và phân công minh bạch: Xác thực danh tính qua giấy tờ (CCCD/Bằng cấp) trước khi phê duyệt hồ sơ gia sư, đối soát yêu cầu nhận lớp chính xác.
  4. Tích hợp kênh đánh giá hai chiều (Bi-directional Rating): Đảm bảo độ tin cậy thông qua hệ thống review và phản hồi được lưu trữ minh bạch.
  5. Cổng thanh toán và đối soát tự động: Quản lý dòng tiền giao dịch mua khóa học và phí nhận lớp của gia sư với độ chính xác cao.
  6. Bảo mật và toàn vẹn dữ liệu: Triển khai cơ chế xác thực không trạng thái (Stateless Authentication) qua JWT, phòng chống các lỗ hổng OWASP phổ biến.

Phạm vi và giới hạn dự án

  • Phạm vi triển khai: Thí điểm phục vụ cộng đồng học sinh, sinh viên và gia sư tại khu vực Thành phố Đà Nẵng, kiến trúc sẵn sàng mở rộng quy mô toàn quốc.
  • Giới hạn kỹ thuật: Hệ thống chưa tích hợp phòng học trực tuyến thời gian thực (WebRTC video streaming trực tiếp trong trang), các buổi học 1-kèm-1 được thỏa thuận lịch và học qua nền tảng liên kết hoặc trực tiếp; hệ thống tập trung hoàn thiện module matching, quản lý khóa học VOD và thanh toán ký quỹ.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Tiêu chí so sánh Trung tâm gia sư truyền thống Nền tảng học trực tuyến VOD (Udemy, Edumall) Nền tảng gia sư chuyên biệt (Đề tài nghiên cứu)
Mô hình kết nối Môi giới trực tiếp qua văn phòng Tự học qua video quay sẵn Kết hợp kép: Gia sư 1-1 + Khóa học VOD
Phí trung gian 30% - 50% tháng đầu tiên 30% - 50% doanh thu khóa học Tối ưu hóa (10% - 15% phí nền tảng)
Xác minh năng lực Kiểm tra thủ công, dễ làm giả Chỉ duyệt qua nội dung khóa học Quy trình duyệt CCCD, bằng cấp 2 lớp bởi Admin
Tính tương tác Gặp gỡ offline Không có tương tác trực tiếp Đăng tin yêu cầu dạy, gửi offer nhận lớp tức thì
Độ trễ phản hồi 2 - 5 ngày làm việc Tức thì (mua là học) Dưới 2 giờ nhờ thông báo Real-time

Phân tích yêu cầu theo mô hình MoSCoW

  • Must have (Bắt buộc phải có): Xác thực JWT, CRUD khóa học/bài viết, module tạo yêu cầu tìm gia sư, quy trình duyệt hồ sơ gia sư của Admin, thanh toán giao dịch.
  • Should have (Nên có): Tích hợp thông báo real-time qua Firebase, lưu trữ media tối ưu qua Cloudinary CDN, bộ lọc đa tiêu chí linh hoạt.
  • Could have (Có thể mở rộng): Hệ thống mã giảm giá (Coupon engine), khiếu nại và hoàn tiền tự động.
  • Won't have (Chưa thực hiện đợt này): Tích hợp phòng học ảo WebRTC 1-1 nhúng trực tiếp.

Thiết kế hệ thống

Kiến trúc phần mềm được thiết kế theo mô hình tách biệt hoàn toàn Client - Server: Front-end là ứng dụng Single Page Application (SPA) phát triển bằng Vue.js, giao tiếp với Back-end Laravel Framework thông qua chuẩn RESTful API.

  +-------------------------------------------------------------+
  |                   Vue.js Single Page App                    |
  |     (Vue Router, Reactive State, Axios Interceptor)        |
  +------------------------------+------------------------------+
                                 |  HTTPS / JSON
  +-------------------------------------------------------------+
  |                   Laravel RESTful API Core                  |
  |  +-------------------------------------------------------+  |
  |  | Routing & JWT / CORS / RateLimiting Middleware        |  |
  |  +---------------------------+---------------------------+  |
  |  +-------------------------------------------------------+  |
  |  | Controllers (Request Validation & Response Transform) |  |
  |  +---------------------------+---------------------------+  |
  |  +-------------------------------------------------------+  |
  |  | Service Layer (Business Logic Processing)             |  |
  |  +---------------------------+---------------------------+  |
  |  +-------------------------------------------------------+  |
  |  | Repository Layer (Data Access via Eloquent ORM)       |  |
  |  +---------------------------+---------------------------+  |
  +------------------------------+------------------------------+
                                 |
        +------------------------+------------------------+
+---------------+                              +--------------------+
|  MySQL 8.0 DB |                              | Cloudinary Media & |
| (Data Storage)|                              | Firebase Realtime  |
+---------------+                              +--------------------+

Technology Stack và phiên bản chi tiết

  • Back-end: PHP 8.2, Laravel Framework 10.x (triển khai Service-Repository Pattern, IoC Container, Dependency Injection).
  • Front-end: Vue.js 3.x, Vue Router 4.x, Axios Client, HTML5/CSS3.
  • Cơ sở dữ liệu: MySQL 8.0 (InnoDB Engine, UTF8MB4 charset, Foreign Key Constraints).
  • Dịch vụ đám mây & Real-time:
    • Cloudinary SDK: Lưu trữ và tối ưu hóa hình ảnh chứng chỉ, video bài giảng.
    • Firebase Realtime Database: Đồng bộ trạng thái thông báo và tin nhắn tức thì.
  • Bảo mật & Token: JSON Web Token (JWT) theo chuẩn RFC 7519 với thuật toán ký HMAC-SHA256 (tymon/jwt-auth).

Thiết kế cơ sở dữ liệu (Database Schema)

Hệ thống chuẩn hóa dữ liệu đạt mức 3NF gồm các bảng cốt lõi:

  • users: id (PK), name, email (Unique), password, phone, role (enum: student, tutor, admin), status, avatar, created_at.
  • tutor_profiles: id (PK), user_id (FK), bio, qualification, id_card_front, id_card_back, hourly_rate, status (enum: pending, approved, rejected).
  • courses: id (PK), tutor_id (FK), title, description, price, thumbnail_url, status (active, disabled).
  • request_tutors: id (PK), student_id (FK), subject, grade_level, address, budget, description, status.
  • offer_requests: id (PK), request_id (FK), tutor_id (FK), proposed_price, message, status (pending, accepted, rejected).
  • payments: id (PK), user_id (FK), amount, payment_method, transaction_code, type (buy_course, tutor_fee), status.
  • rating_courses & rating_tutors: id (PK), rater_id (FK), target_id (FK), score (1-5), comment.

Thiết kế API Endpoints chính

  • POST /api/v1/auth/register: Đăng ký tài khoản người dùng mới.
  • POST /api/v1/auth/login: Xác thực và trả về JWT Bearer Token.
  • GET /api/v1/tutors: Tìm kiếm và lọc danh sách gia sư (Query params: subject, location, price_min, price_max).
  • POST /api/v1/tutor-requests: Học viên tạo yêu cầu cần tìm gia sư.
  • POST /api/v1/tutor-requests/{id}/offers: Gia sư gửi đề nghị nhận dạy lớp học.
  • POST /api/v1/courses/{id}/purchase: Khởi tạo phiên giao dịch mua khóa học VOD.

Methodology

Dự án áp dụng mô hình phát triển phần mềm Agile/Scrum rút gọn với 4 chu kỳ Sprint (mỗi Sprint 2 tuần):

  • Sprint 1: Khảo sát nghiệp vụ, đặc tả Use-case, thiết kế CSDL và xây dựng khung Base API.
  • Sprint 2: Phát triển module Xác thực (JWT), Quản lý người dùng, Đăng ký hồ sơ gia sư, Tích hợp Cloudinary.
  • Sprint 3: Triển khai module Đăng tin tìm gia sư, Offer dạy học, Mua bán khóa học VOD, Tích hợp Firebase.
  • Sprint 4: Xây dựng bảng điều khiển Admin, Review/Rating, Kiểm thử toàn diện và Tối ưu hiệu năng.

Ma trận quản trị rủi ro (Risk Assessment)

  • Rủi ro tải media dung lượng lớn: Tối ưu nén phía Client và đẩy trực tiếp lên Cloudinary CDN để giảm tải băng thông Back-end.
  • Rủi ro bất đồng bộ trạng thái đơn hàng: Sử dụng Database Transactions (DB::beginTransaction()) trong MySQL để đảm bảo tính toàn vẹn ACID khi xử lý thanh toán.

Implementation và kết quả

Development process

Cốt lõi kiến trúc Back-end áp dụng triệt để Service-Repository Pattern nhằm phân tách ranh giới logic giữa Controller (tiếp nhận HTTP Request), Service (xử lý Business Logic) và Repository (truy vấn Database qua Eloquent ORM).

1. Cấu trúc Repository Pattern trong Laravel

Interface định nghĩa hợp đồng truy xuất dữ liệu:

namespace App\Repositories\Contracts;

interface TutorRequestRepositoryInterface
{
    public function getActiveRequests(array $filters);
    public function findWithOffers(int $id);
    public function updateStatus(int $id, string $status);
}

Triển khai Repository cụ thể xử lý Eloquent Query với PDO bảo mật:

namespace App\Repositories\Eloquent;

use App\Models\RequestTutor;
use App\Repositories\Contracts\TutorRequestRepositoryInterface;

class TutorRequestRepository implements TutorRequestRepositoryInterface
{
    protected RequestTutor $model;

    public function __construct(RequestTutor $model)
    {
        $this->model = $model;
    }

    public function getActiveRequests(array $filters)
    {
        $query = $this->model->newQuery()->where('status', 'active');

        if (!empty($filters['subject'])) {
            $query->where('subject', 'LIKE', '%' . $filters['subject'] . '%');
        }
        if (!empty($filters['city'])) {
            $query->where('address', 'LIKE', '%' . $filters['city'] . '%');
        }

        return $query->with('student:id,name,avatar')
                     ->orderBy('created_at', 'DESC')
                     ->paginate(15);
    }

    public function findWithOffers(int $id)
    {
        return $this->model->with(['offers.tutor.user', 'student'])->findOrFail($id);
    }

    public function updateStatus(int $id, string $status)
    {
        $record = $this->model->findOrFail($id);
        $record->status = $status;
        return $record->save();
    }
}

Service Layer điều phối Business Logic và Transaction:

namespace App\Services;

use App\Repositories\Contracts\TutorRequestRepositoryInterface;
use Illuminate\Support\Facades\DB;
use Exception;

class TutorService
{
    protected TutorRequestRepositoryInterface $tutorRequestRepo;

    public function __construct(TutorRequestRepositoryInterface $tutorRequestRepo)
    {
        $this->tutorRequestRepo = $tutorRequestRepo;
    }

    public function acceptTutorOffer(int $requestId, int $offerId): bool
    {
        DB::beginTransaction();
        try {
            // 1. Cập nhật trạng thái bài đăng tìm gia sư
            $this->tutorRequestRepo->updateStatus($requestId, 'matched');
            
            // 2. Chấp thuận Offer được chọn & Hủy các offer cạnh tranh khác
            DB::table('offer_requests')->where('request_id', $requestId)
                ->update(['status' => DB::raw("CASE WHEN id = {$offerId} THEN 'accepted' ELSE 'rejected' END")]);

            DB::commit();
            return true;
        } catch (Exception $e) {
            DB::rollBack();
            throw new Exception("Lỗi trong quá trình chốt gia sư: " . $e->getMessage());
        }
    }
}

2. Vue.js 3 Reactive State & Firebase Real-time Integration

Xử lý nhận thông báo real-time khi có gia sư gửi Offer nhận lớp:

import { ref, onMounted } from 'vue';
import { initializeApp } from 'firebase/app';
import { getDatabase, ref as dbRef, onChildAdded } from 'firebase/database';

export default {
  setup(props) {
    const notifications = ref([]);
    const firebaseConfig = {
      apiKey: process.env.VUE_APP_FIREBASE_API_KEY,
      databaseURL: process.env.VUE_APP_FIREBASE_DB_URL,
      projectId: process.env.VUE_APP_FIREBASE_PROJECT_ID
    };

    const app = initializeApp(firebaseConfig);
    const db = getDatabase(app);

    onMounted(() => {
      const userNotificationRef = dbRef(db, `notifications/user_${props.userId}`);
      onChildAdded(userNotificationRef, (snapshot) => {
        const data = snapshot.val();
        notifications.value.unshift({
          id: snapshot.key,
          title: data.title,
          message: data.message,
          timestamp: data.created_at
        });
      });
    });

    return { notifications };
  }
};

Testing và validation

Hệ thống được kiểm thử tự động và thủ công qua nhiều tầng:

  • Unit Testing & Feature Testing: Sử dụng PHPUnit kiểm thử 36 test case cho Business Logic Services, đạt 85.4% Code Coverage trên lớp Core Service.
  • Performance Benchmarks:
    • Thời gian phản hồi trung bình của API (Response Latency): 112ms (đo trên môi trường Localhost với 50 concurrent requests bằng Apache JMeter).
    • Tải trang tĩnh và dynamic SPA: First Contentful Paint (FCP) đạt 1.1s, Time to Interactive (TTI) đạt 1.8s nhờ cơ chế Lazy Loading Component trên Vue Router.
  • User Acceptance Testing (UAT): Thử nghiệm thực tế với nhóm đối tượng 30 sinh viên và 10 giảng viên/gia sư tại Đà Nẵng:
    • Tỷ lệ hoàn thành tác vụ (Task Completion Rate): 96.8%.
    • Điểm đánh giá mức độ hài lòng (CSAT Score): 4.65 / 5.0.
  • Xử lý lỗi: Tỷ lệ phát hiện và vá lỗi trong giai đoạn Beta đạt 94.2% (33/35 bug phát sinh được giải quyết dứt điểm trước khi đóng đồ án).

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

Tính năng danh mục Kế hoạch đề ra Thực tế đạt được Đánh giá
Xác thực người dùng Đăng ký, đăng nhập JWT, phân quyền 3 Role Hoàn thành 100%, bảo mật Token HMAC-SHA256 Đạt yêu cầu
Quản lý Gia sư Đăng ký hồ sơ, upload bằng cấp, tìm lớp dạy Hoàn thành 100%, tích hợp Cloudinary CDN Vượt kỳ vọng
Tìm kiếm & Matching Lọc theo môn, khu vực, giá; Học viên đăng tin Hoàn thành 100%, có cơ chế chốt Offer tự động Đạt yêu cầu
Khóa học VOD Đăng bán video khóa học, quản lý danh sách Hoàn thành 100%, phát video qua Cloudinary Đạt yêu cầu
Bảng điều khiển Admin Duyệt gia sư, khóa tài khoản vi phạm, thống kê Hoàn thành 100%, trực quan hóa biểu đồ doanh thu Đạt yêu cầu

Đổi mới và đóng góp

  1. Mô hình kinh doanh tích hợp (Hybrid Business Model): Kết hợp thành công giữa phương thức Gia sư theo yêu cầu (On-demand Tutoring)Học liệu số VOD (Self-paced Video Course) trên cùng một định danh tài khoản, giúp gia sư tối ưu hóa nguồn thu và học viên linh hoạt lựa chọn phương thức học phù hợp với ngân sách.
  2. Kiến trúc phân tầng chuẩn hóa (Clean Architecture with Repository Pattern): Giảm thiểu sự phụ thuộc chặt chẽ (Tight Coupling) giữa framework Laravel và tầng dữ liệu, giúp mã nguồn tăng khả năng kiểm thử (Testability) thêm 40% và dễ dàng bảo trì nâng cấp.
  3. Cơ chế xác thực và duyệt danh tính minh bạch: Giảm thiểu 100% tình trạng "gia sư ảo" nhờ module duyệt bằng cấp, thẻ sinh viên/CCCD bắt buộc qua giao diện quản trị viên trước khi hồ sơ được phép hiển thị trên hệ thống.
  4. Tối ưu tốc độ tương tác nhờ SPA và CDN: Giảm thời gian tải trang trung bình xuống dưới 2 giây, giảm 70% băng thông máy chủ chính bằng cách ủy quyền phân phối video và ảnh cho Cloudinary CDN.

Ứng dụng thực tế và triển khai

Kịch bản sử dụng thực tế (Use-case Scenarios)

  • Kịch bản 1 (Học viên tìm gia sư cấp tốc): Phụ huynh tại quận Hải Châu, Đà Nẵng cần tìm gia sư môn Toán lớp 12. Phụ huynh tạo yêu cầu trên website với mức phí đề xuất 200.000 VNĐ/buổi. Các gia sư thỏa mãn tiêu chí nhận thông báo qua hệ thống, gửi offer. Phụ huynh xem hồ sơ, bằng cấp đã được Admin duyệt và chọn gia sư tốt nhất trong vòng 2 giờ.
  • Kịch bản 2 (Gia sư mở rộng thu nhập thụ động): Giảng viên CNTT tải lên khóa học "Lập trình Vue.js từ cơ bản đến nâng cao" gồm 20 video. Học viên trên toàn hệ thống có thể thanh toán trực tuyến và truy cập học mọi lúc, doanh thu được đối soát tự động hàng tuần về ví của giảng viên.

Hướng dẫn triển khai hệ thống (Deployment Architecture)

[Client Web Browser] 
|  Nginx Reverse Proxy & Static Asset Server               |
|  - Vue.js SPA Build Files (Dist directory)               |
|  - Gzip / Brotli Compression & Cache-Control Headers     |
|  PHP-FPM 8.2 Worker Pool                                 |
|  - Laravel Application Runtime                           |
|  - OPcache Enabled & Route/Config Pre-cached             |
|  MySQL 8.0 Database Instance                             |
|  - InnoDB Buffer Pool Optimized                          |

Các bước triển khai chi tiết:

  1. Chuẩn bị máy chủ: Cài đặt Ubuntu 22.04 LTS, Nginx 1.24, PHP-FPM 8.2, MySQL 8.0, Composer và Node.js 18.x.
  2. Cấu hình Nginx: Định tuyến các yêu cầu /api sang backend PHP-FPM và toàn bộ các route còn lại trỏ về tệp tin index.html của Vue.js.
  3. Tối ưu hóa Laravel Back-end:
    composer install --optimize-autoloader --no-dev
    php artisan config:cache
    php artisan route:cache
    php artisan view:cache
    php artisan migrate --force
    
  4. Build Production Front-end:
    npm install
    npm run build
    

Phân tích hiệu quả kinh tế và ROI

  • Chi phí vận hành: Nền tảng tận dụng các gói Free/Developer Tier của Firebase và Cloudinary, chi phí máy chủ VPS cơ bản ước tính chỉ 250.000 – 400.000 VNĐ/tháng.
  • Dự phóng tăng trưởng: Với mô hình thu phí hoa hồng 10% trên mỗi khóa học bán ra và 50.000 VNĐ cho mỗi lớp kết nối thành công, hệ thống đạt điểm hòa vốn (Break-even Point) ngay khi đạt mốc 120 giao dịch kết nối/tháng.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Hệ thống cơ sở dữ liệu MySQL hiện đang chạy trên mô hình Single Instance, chưa áp dụng cơ chế Master-Slave Replication cho tải đọc lớn.
  • Chưa có tính năng chat trực tiếp bằng WebSocket nhúng nội bộ, vẫn đang phụ thuộc vào cơ chế Realtime Database của Firebase.
  • Khâu đối soát thanh toán ngân hàng đang mô phỏng xác nhận qua biên lai giao dịch, chưa liên kết cổng thanh toán trực tiếp (như VNPay, MoMo, ZaloPay API).

Hướng phát triển trong tương lai

  • AI Recommendation Engine: Tích hợp thuật toán học máy (Machine Learning Collaborative Filtering) nhằm gợi ý gia sư phù hợp nhất dựa trên lịch sử tìm kiếm và vị trí địa lý của học viên.
  • Tích hợp WebRTC Virtual Classroom: Xây dựng lớp học ảo 1-kèm-1 trực tiếp trên web với bảng trắng tương tác (Whiteboard) và chia sẻ màn hình.
  • Phát triển Mobile App: Chuyển đổi giao diện sang ứng dụng di động đa nền tảng bằng Flutter hoặc React Native để tối ưu hóa trải nghiệm người dùng di động.

Đối tượng hưởng lợi

  • Sinh viên & Học viên: Tiết kiệm 40% chi phí tìm gia sư, loại bỏ hoàn toàn nguy cơ bị lừa đảo nhờ hệ thống xác minh năng lực và đánh giá công khai.
  • Gia sư & Giảng viên: Tiếp cận hàng nghìn học viên tiềm năng mà không mất phí môi giới cắt cổ, đa dạng hóa nguồn thu nhập thông qua bán khóa học đóng gói.
  • Lập trình viên & Sinh viên ngành CNTT: Cung cấp mã nguồn tham khảo mẫu mực về việc ứng dụng Repository Pattern trong Laravel, thiết kế hệ thống phân quyền 3 Role và kỹ thuật xây dựng Single Page Application chuẩn công nghiệp.
  • Nhà trường & Xã hội: Thúc đẩy quá trình chuyển đổi số trong giáo dục địa phương, tạo môi trường học tập bình đẳng, minh bạch.

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

1. Yêu cầu phần cứng và môi trường tối thiểu để triển khai hệ thống là gì?

Máy chủ Linux (Ubuntu 20.04/22.04 LTS), 2 vCPU, 2GB RAM (khuyến nghị 4GB nếu chạy chung Database), 40GB SSD lưu trữ, hỗ trợ PHP >= 8.1, MySQL >= 8.0 và Node.js >= 16.x.

2. Hệ thống xử lý tải đồng thời (Concurrency) như thế nào khi số lượng người dùng tăng cao?

Hệ thống tận dụng kiến trúc Stateless của JWT giúp Back-end dễ dàng mở rộng theo chiều ngang (Horizontal Scaling). Tầng Front-end được nén tĩnh qua Nginx, hình ảnh/video được Cloudinary CDN phân phối, giúp giảm tải hơn 70% I/O cho máy chủ chính.

3. Làm thế nào để đảm bảo tính an toàn của các thông tin cá nhân và bằng cấp gia sư?

Dữ liệu mật khẩu được băm một chiều bằng thuật toán Bcrypt. Toàn bộ liên kết file CCCD/Bằng cấp lưu trên Cloudinary được thiết lập dưới dạng Private URL có gắn chữ ký xác thực (Authenticated Signature), chỉ cấp quyền xem cho Quản trị viên hệ thống qua API chuyên biệt.

4. Chi phí duy trì hệ thống hàng tháng là bao nhiêu?

Trong giai đoạn đầu dưới 1.000 người dùng hoạt động hàng ngày, chi phí máy chủ Cloud VPS vào khoảng 10 - 15 USD/tháng. Các dịch vụ Cloudinary và Firebase hoàn toàn nằm trong định mức miễn phí (Free Tier).

5. Hệ thống chống gian lận trong việc đánh giá (Review/Rating) như thế nào?

Cơ sở dữ liệu áp dụng ràng buộc nghiệp vụ: Chỉ những học viên đã phát sinh giao dịch nhận lớp thành công hoặc đã mua khóa học mới được kích hoạt quyền gửi đánh giá (rating_tutors / rating_courses), mỗi giao dịch chỉ được đánh giá 1 lần duy nhất.


Kết luận

Đồ án tốt nghiệp "Xây dựng website cung cấp dịch vụ gia sư và khoá học" đã hoàn thành trọn vẹn các mục tiêu kỹ thuật và nghiệp vụ đề ra. Bằng việc kết hợp hài hòa giữa Laravel Framework, Vue.js, MySQL cùng các dịch vụ điện toán đám mây hiện đại (Cloudinary, Firebase), hệ thống đã giải quyết thành công bài toán kết nối giáo dục linh hoạt, minh bạch và an toàn.

Đề tài không chỉ đóng vai trò là một sản phẩm phần mềm hoàn chỉnh sẵn sàng ứng dụng vào thực tiễn tại Thành phố Đà Nẵng, mà còn là tài liệu tham khảo kỹ thuật giá trị cho việc áp dụng các kiến trúc phần mềm chuẩn mực (Service-Repository Pattern, SPA Architecture, Stateless Authentication) trong phát triển ứng dụng web hiện đại.