Tổng quan
ExamForge tách quy trình của người học và quản trị viên thành hai ứng dụng Next.js, dùng chung một API ASP.NET Core và mô hình dữ liệu PostgreSQL. Người học duyệt môn thi, làm bài luyện tập và xem kết quả; quản trị viên quản lý nội dung có cấu trúc phía sau các trải nghiệm đó.
Repository được thiết kế như một dự án kỹ thuật dễ kiểm tra: frontend, các tầng backend, cấu hình triển khai, kiểm thử và tài liệu quy hoạch nằm cùng nhau; CI và Docker hỗ trợ quy trình lặp lại ổn định.
Bài toán
Luyện thi không phải một quy trình CRUD đơn giản. Lượt làm bài phải bảo vệ đáp án trước khi nộp, giữ đúng quyền sở hữu, tính điểm phía server và hỗ trợ xem lại; trong khi quản trị viên cần môi trường riêng để soạn, xuất bản và duy trì nội dung đề thi.
Phạm vi kỹ thuật
Repository bao gồm frontend học tập và quản trị, API .NET chia thành Api, Application, Domain và Infrastructure, lưu trữ PostgreSQL qua Entity Framework Core, xác thực JWT, kiểm thử, Docker, CI và ghi log vận hành có cấu trúc.
Kiến trúc hệ thống
Hai frontend độc lập giúp tách biệt nhu cầu của người học và quản trị nội dung. API ánh xạ request vào các use case của tầng Application; luật nghiệp vụ được cách ly khỏi framework và persistence. Infrastructure hiện thực EF Core và PostgreSQL phía sau các ranh giới này.
Năng lực chính của hệ thống
Luyện tập cho người học
Khám phá môn và đề thi, phiên luyện tập, nộp đáp án, xem kết quả và các quy trình theo dõi tiến độ.
Quản trị nội dung
Công cụ riêng cho môn học, đề, phần thi, câu hỏi, lời giải, thẻ và trạng thái xuất bản.
Luồng đánh giá được bảo vệ
Kiểm tra quyền sở hữu, phân quyền, tính điểm phía server và chỉ hiển thị đáp án đúng sau khi nộp.
Chẩn đoán vận hành
Log JSON có cấu trúc, correlation ID, sự kiện request chậm, giới hạn xoay vòng log Docker và logging trung lập nhà cung cấp.
Quyết định kỹ thuật
Tách ứng dụng học tập và quản trị
- Vấn đề
- Luyện tập và quản trị nội dung có người dùng, quyền hạn và mật độ tương tác khác nhau.
- Quyết định
- Dùng hai ứng dụng Next.js với một hợp đồng API và domain backend chung.
- Đánh đổi
- Mỗi trải nghiệm giữ được trọng tâm, nhưng thay đổi hành vi hoặc hợp đồng dùng chung cần nhiều phối hợp hơn.
Mô hình đề thi quan hệ
- Vấn đề
- Đề thi chứa phần thi, câu hỏi, lựa chọn, phiên bản, lượt làm và trạng thái xuất bản cần luôn nhất quán.
- Quyết định
- Mô hình hóa domain trong PostgreSQL qua EF Core thay vì lưu toàn bộ đề dưới dạng JSON phi cấu trúc.
- Đánh đổi
- Schema và migration cần được quản lý rõ ràng hơn, đổi lại có ràng buộc, khả năng truy vấn và tiến hóa có kiểm soát.
Khả năng quan sát trung lập nhà cung cấp
- Vấn đề
- Request và lỗi cần truy vết ngay nhưng mã ứng dụng không nên bị khóa vào một dịch vụ telemetry.
- Quyết định
- Dùng sự kiện ILogger có cấu trúc, correlation scope và JSON console do Docker quản lý.
- Đánh đổi
- Chẩn đoán cục bộ mạnh, còn lưu trữ và truy vấn tập trung là mối quan tâm của giai đoạn triển khai sau.
Thách thức & đánh đổi
- Giữ đáp án đúng và việc tính điểm ở server nhưng vẫn đảm bảo tương tác luyện tập nhanh nhạy.
- Duy trì hướng phụ thuộc sạch giữa domain, application, infrastructure và HTTP.
- Phối hợp hai frontend có trọng tâm khác nhau trên cùng hợp đồng API có phiên bản.
- Cân bằng domain có khả năng mở rộng với phạm vi MVP có thể hoàn thành và kiểm tra.
Công nghệ
- 01Next.js
- 02TypeScript
- 03ASP.NET Core
- 04.NET 10
- 05PostgreSQL
- 06Entity Framework Core
- 07Docker
- 08GitHub Actions
Kết quả hiện tại
- Monorepo hoạt động với ranh giới rõ ràng cho study, admin, API, kiểm thử, tài liệu và triển khai.
- Solution .NET phân lớp với PostgreSQL, kiểm soát truy cập bằng JWT và chẩn đoán API có cấu trúc.
- Nền tảng đang được phát triển tích cực; không công bố số liệu người dùng, hiệu năng hay production chưa được xác minh.
Liên kết
Repository mã nguồn được công khai. Hiện chưa có địa chỉ production công khai đã được xác minh.
Xem mã nguồn