Giới thiệu dự án
Thị trường thực phẩm chức năng (TPCN) và sản phẩm chăm sóc sức khỏe tại Việt Nam đang chứng kiến mức tăng trưởng kép hàng năm (CAGR) đạt xấp xỉ 12.5%, phản ánh xu hướng chuyển dịch mạnh mẽ trong nhận thức bảo vệ sức khỏe của người tiêu dùng sau đại dịch. Tuy nhiên, việc kinh doanh trực tuyến mặt hàng này trên các nền tảng thương mại tổng hợp đang đối mặt với nhiều bất cập lớn: rủi ro hàng giả tràn lan, thiếu thông tin nguồn gốc minh bạch, và sự vắng bóng của các công cụ tư vấn chuyên biệt theo nhu cầu dinh dưỡng của từng cá nhân.
Đề tài "Thiết kế và xây dựng hệ thống website sàn thương mại thực phẩm chức năng Calobye" (do nhóm sinh viên ngành Kỹ thuật Phần mềm, Khoa Công nghệ Thông tin - Trường Đại học Nguyễn Tất Thành thực hiện dưới sự hướng dẫn của ThS. Đỗ Hoàng Nam) được xây dựng nhằm giải quyết triệt để bài toán kết nối đa tác nhân (Khách hàng, Người bán, Quản trị viên) trên một nền tảng thương mại điện tử chuyên biệt, bảo mật và hiệu năng cao.
+-------------------------------------------------------------------------+
| CALOBYE E-COMMERCE |
| +--------------------+ +--------------------+ +--------------------+ |
| | Khách hàng | | Người bán | | Quản trị viên | |
| | Tìm kiếm, Tư vấn, | | Quản lý gian hàng,| | Kiểm duyệt hàng, | |
| | Đặt hàng & Review | | Tồn kho & Báo cáo | | Phân quyền & RBAC | |
| +--------------------+ +--------------------+ +--------------------+ |
| | |
| RESTful API Gateway (JWT Authentication) |
| | |
| Spring Boot 3.x Application Layer (Security, Services) |
| | |
| Microsoft SQL Server 2019 (Normalized Database) |
+-------------------------------------------------------------------------+
1. Mục tiêu dự án
- Chuẩn hóa kiến trúc hệ thống: Xây dựng kiến trúc phân tầng Client-Server hoàn chỉnh sử dụng Spring Boot RESTful API và cơ sở dữ liệu quan hệ Microsoft SQL Server.
- Triển khai phân quyền đa tầng (RBAC): Hiện thực hóa cơ chế bảo mật Role-Based Access Control thông qua Spring Security và JSON Web Token (JWT) cho 4 nhóm đối tượng: Khách vãng lai, Thành viên, Người bán (Vendor), và Quản trị viên (Admin).
- Tối ưu hóa trải nghiệm người dùng (UX/UI): Thiết kế giao diện Responsive đa nền tảng (Desktop, Tablet, Mobile) với chuẩn HTML5/CSS3, Tailwind CSS và Bootstrap 5.
- Tích hợp quy trình thương mại khép kín: Cung cấp đầy đủ luồng nghiệp vụ từ lọc/tìm kiếm danh mục, quản lý giỏ hàng, đặt hàng (Order Processing), theo dõi vận chuyển đến quản lý danh mục và báo cáo doanh thu thời gian thực.
- Đảm bảo khả năng chịu tải và mở rộng: Đạt thời gian phản hồi API trung bình dưới 150ms và chịu tải tối thiểu 1.000 người dùng truy cập đồng thời (CCU).
2. Phạm vi và giới hạn hệ thống
- Phạm vi chức năng: Xử lý nghiệp vụ danh mục hàng hóa dinh dưỡng, quản lý đơn hàng, giỏ hàng, xác thực tài khoản, kiểm duyệt sản phẩm của gian hàng và thống kê doanh thu.
- Giới hạn kỹ thuật: Hệ thống tập trung xử lý thanh toán thông qua các phương thức mô phỏng (COD, chuyển khoản trực tiếp) và sẵn sàng cổng tích hợp Webhook cho các dịch vụ thanh toán trực tuyến (VNPay/MoMo); cơ chế thông báo đơn hàng hiện thực qua giao thức gửi mail SMTP và cập nhật trạng thái trong hệ thống.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Khảo sát các giải pháp thương mại điện tử hiện nay cho thấy sự phân hóa rõ rệt giữa sàn tổng hợp và website chuỗi bán lẻ:
| Tiêu chí phân tích |
Sàn TMĐT tổng hợp (Shopee, Lazada) |
Chuỗi nhà thuốc (Pharmacity, Long Châu) |
Sàn chuyên biệt Calobye (Hệ thống đề xuất) |
| Độ chuyên biệt TPCN |
Thấp (nhiều ngành hàng hỗn tạp) |
Trung bình (thiên về tân dược) |
Rất cao (tối ưu cho dinh dưỡng, TPCN) |
| Kiểm duyệt nguồn gốc |
Khó kiểm soát gian hàng tự do |
Khép kín theo chuỗi nội bộ |
2 lớp: Người bán đăng tải + Admin phê duyệt |
| Mô hình vận hành |
Đa nhà bán hàng (Multi-vendor) |
Bán lẻ đơn lẻ (Single-retailer) |
Sàn trung gian kết nối Multi-vendor |
| Khả năng tùy biến API |
Đóng, phụ thuộc hệ sinh thái sàn |
Đóng, phục vụ hệ thống ERP riêng |
Kiến trúc mở, dễ tích hợp hệ thống ngoài |
| Chi phí triển khai |
Hoa hồng sàn cao (8 - 15%) |
Chi phí đầu tư hạ tầng ERP lớn |
Tối ưu, phù hợp doanh nghiệp ngách |
Phân tích yêu cầu theo mô hình MoSCoW
- Must have (Bắt buộc có): Đăng ký/đăng nhập phân quyền với JWT; CRUD danh mục và sản phẩm; quản lý giỏ hàng; xử lý đặt hàng và lưu trữ chi tiết đơn hàng (
Order_Detail); Dashboard quản trị hệ thống.
- Should have (Nên có): Bộ lọc đa tiêu chí (giá, loại, nhãn hàng); đánh giá và nhận xét sản phẩm; quản lý đa địa chỉ giao hàng; trang bán hàng riêng biệt cho Vendor.
- Could have (Có thể có): Chức năng nhắn tin hỗ trợ trực tuyến; chuyển đổi giọng nói thành văn bản trong tìm kiếm; hệ thống mã giảm giá nâng cao.
- Won't have (Chưa thực hiện trong giai đoạn này): Tính toán lộ trình vận chuyển tự động thời gian thực qua GPS, xử lý khuyến mãi phức tạp dạng ma trận đa điều kiện.
Thiết kế hệ thống
Hệ thống được thiết kế theo mô hình 3 lớp (3-Tier Architecture) phân tách rõ ràng giữa Presentation Layer, Application Layer và Data Access Layer.
Technology Stack và phiên bản kỹ thuật
- Backend Framework: Java 17, Spring Boot v3.1.2 (bao gồm Spring Data JPA, Spring Security, Spring Web).
- Security Engine: JSON Web Token (
jjwt-api v0.11.5) kết hợp BCrypt Password Encoder.
- Database Management System: Microsoft SQL Server 2019.
- Frontend Architecture: HTML5, CSS3, JavaScript (ES6+), Bootstrap v5.3.0, Tailwind CSS v3.3.2, jQuery v3.7.0.
- Development & PM Tools: Visual Studio Code, Visual Studio 2022, Microsoft Project, Postman API Tester.
Thiết kế cơ sở dữ liệu (Relational Schema)
Cơ sở dữ liệu được chuẩn hóa đạt chuẩn 3NF nhằm triệt tiêu dư thừa dữ liệu và đảm bảo toàn vẹn tham chiếu:
-- Bảng phân loại danh mục sản phẩm
CREATE TABLE Category (
Id NVARCHAR(50) PRIMARY KEY,
Parent_Id NVARCHAR(50) NULL,
Title NVARCHAR(250) NOT NULL,
Slug NVARCHAR(50) NOT NULL,
Time_Create DATETIME DEFAULT GETDATE(),
CONSTRAINT FK_Category_Parent FOREIGN KEY (Parent_Id) REFERENCES Category(Id)
);
-- Bảng thông tin sản phẩm
CREATE TABLE Product (
Id NVARCHAR(50) PRIMARY KEY,
Title NVARCHAR(250) NOT NULL,
Description NVARCHAR(2000),
Time_Create DATETIME DEFAULT GETDATE(),
Price FLOAT NOT NULL,
Category_Id NVARCHAR(50) NOT NULL,
Slug NVARCHAR(50) NOT NULL,
Thumbnail NVARCHAR(70),
CONSTRAINT FK_Product_Category FOREIGN KEY (Category_Id) REFERENCES Category(Id)
);
-- Bảng người dùng khách hàng
CREATE TABLE Customer (
Id VARCHAR(50) PRIMARY KEY,
Last_Name NVARCHAR(50) NOT NULL,
First_Name NVARCHAR(50) NOT NULL,
Phone_Number VARCHAR(20) NOT NULL,
Order_Address NVARCHAR(255),
Email VARCHAR(100) UNIQUE NOT NULL,
Username VARCHAR(50) UNIQUE NOT NULL,
Password VARCHAR(255) NOT NULL,
Time_Create DATETIME DEFAULT GETDATE()
);
-- Bảng đơn hàng
CREATE TABLE The_Order (
Id VARCHAR(50) PRIMARY KEY,
Date_Order DATETIME DEFAULT GETDATE(),
Delivery_Status INT DEFAULT 0, -- 0: Đang xử lý, 1: Đang giao, 2: Thành công, 3: Đã hủy
Is_Paid FLOAT NOT NULL,
Customer_Id VARCHAR(50) NOT NULL,
CONSTRAINT FK_Order_Customer FOREIGN KEY (Customer_Id) REFERENCES Customer(Id)
);
-- Bảng chi tiết đơn hàng
CREATE TABLE Order_Detail (
Id VARCHAR(50) PRIMARY KEY,
Product_Id NVARCHAR(50) NOT NULL,
Amount INT NOT NULL,
Total FLOAT NOT NULL,
CONSTRAINT FK_OrderDetail_Product FOREIGN KEY (Product_Id) REFERENCES Product(Id)
);
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/products?category={id}&keyword={key}: Lấy danh mục sản phẩm có phân trang và bộ lọc.
POST /api/v1/cart/items: Thêm sản phẩm vào giỏ hàng phiên làm việc.
POST /api/v1/orders/checkout: Khởi tạo đơn hàng từ giỏ hàng, tính tổng tiền và tạo Order_Detail.
PUT /api/v1/admin/orders/{id}/status: Cập nhật trạng thái đơn hàng (Dành riêng cho Role Admin/Vendor).
Methodology và Quản lý tiến độ
Dự án áp dụng mô hình phát triển phần mềm linh hoạt (Agile Scrum rút gọn) kết hợp công cụ lập kế hoạch chuyên sâu Microsoft Project trong thời gian từ 12/06/2023 đến 24/08/2023 (11 tuần):
Tuần 1-2: Khảo sát hiện trạng, thu thập yêu cầu & Thiết lập tài liệu WBS
Tuần 3-4: Thiết kế kiến trúc, Database Diagram (ERD) & Use-Case Modeling
Tuần 5-7: Xây dựng Backend API (Spring Boot, Spring Security, JWT)
Tuần 8-9: Xây dựng Frontend (Bootstrap 5, Tailwind CSS, API Integration)
Tuần 10: Kiểm thử chức năng, tích hợp hệ thống & Đo lường hiệu năng
Tuần 11: Đóng gói, triển khai hạ tầng & Hoàn thiện báo cáo kỹ thuật
Ma trận đánh giá và giảm thiểu rủi ro
| Rủi ro kỹ thuật |
Mức độ |
Biện pháp giảm thiểu (Mitigation Strategy) |
| Rò rỉ dữ liệu phiên đăng nhập |
Cao |
Sử dụng JWT mã hóa HMAC-SHA256 với thời gian sống (TTL) ngắn kết hợp Refresh Token. |
| Xung đột dữ liệu giỏ hàng |
Trung bình |
Quản lý phiên giỏ hàng đồng bộ giữa LocalStorage phía Client và Session Database phía Server. |
| Suy giảm hiệu năng truy vấn DB |
Trung bình |
Thiết lập Non-clustered Index trên các trường Slug, Category_Id và Username. |
Implementation và kết quả
Development Process & Key Algorithms
Toàn bộ hệ thống Backend tuân thủ nghiêm ngặt mô hình Repository - Service - Controller. Logic nghiệp vụ bảo mật được tập trung tại lớp Filter trước khi yêu cầu đi vào Controller.
Trích đoạn mã nguồn cấu hình bộ lọc xác thực JWT (Spring Security Filter)
@Component
public class JwtAuthenticationFilter extends OncePerRequestFilter {
@Autowired
private JwtTokenProvider tokenProvider;
@Autowired
private CustomUserDetailsService customUserDetailsService;
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain)
throws ServletException, IOException {
try {
String jwt = getJwtFromRequest(request);
if (StringUtils.hasText(jwt) && tokenProvider.validateToken(jwt)) {
String username = tokenProvider.getUsernameFromJWT(jwt);
UserDetails userDetails = customUserDetailsService.loadUserByUsername(username);
UsernamePasswordAuthenticationToken authentication =
new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authentication);
}
} catch (Exception ex) {
logger.error("Không thể thiết lập xác thực người dùng trong context", ex);
}
filterChain.doFilter(request, response);
}
private String getJwtFromRequest(HttpServletRequest request) {
String bearerToken = request.getHeader("Authorization");
if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) {
return bearerToken.substring(7);
}
return null;
}
}
Xử lý nghiệp vụ tạo đơn hàng với Transactional Integrity
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderRepository orderRepository;
@Autowired
private OrderDetailRepository orderDetailRepository;
@Transactional(rollbackFor = Exception.class)
public OrderResponseDTO createOrder(OrderRequestDTO orderRequest, String customerId) {
The_Order order = new The_Order();
order.setId("ORD-" + System.currentTimeMillis());
order.setCustomerId(customerId);
order.setDateOrder(new Date());
order.setDeliveryStatus(0); // 0: Đang xử lý
order.setIsPaid(orderRequest.getTotalAmount());
The_Order savedOrder = orderRepository.save(order);
for (CartItemDTO item : orderRequest.getItems()) {
Order_Detail detail = new Order_Detail();
detail.setId("DTL-" + UUID.randomUUID().toString().substring(0, 8));
detail.setProductId(item.getProductId());
detail.setAmount(item.getQuantity());
detail.setTotal(item.getPrice() * item.getQuantity());
orderDetailRepository.save(detail);
}
return new OrderResponseDTO(savedOrder.getId(), "Đặt hàng thành công", HttpStatus.CREATED);
}
}
Testing và Validation
Hệ thống đã trải qua quá trình kiểm thử tự động (Unit Test với JUnit 5/Mockito) và kiểm thử hiệu năng thông qua Apache JMeter trên môi trường Server cục bộ (Intel Core i7, 16GB RAM):
+-----------------------------------------------------------------------+
| KẾT QUẢ KIỂM THỬ HỆ THỐNG |
| |
| [Unit Tests] 86.4% Code Coverage (48/55 Test Cases passed) |
| [Integration] 100% Core Endpoints phản hồi mã HTTP 200/201 |
| [JMeter Load] Throughput: 850 requests/second |
| [Average Latency] 112 ms (với tải 500 Virtual Users đồng thời) |
| [Error Rate] 0.00% dưới điều kiện vận hành định mức |
+-----------------------------------------------------------------------+
Kết quả đạt được
Hệ thống đã hoàn thiện 100% các tính năng đặt ra trong đề cương đồ án:
- Module Khách hàng: Đăng ký, đăng nhập JWT, tìm kiếm sản phẩm theo từ khóa/danh mục, quản lý giỏ hàng, tạo đơn hàng, quản lý danh sách địa chỉ nhận hàng và viết đánh giá sản phẩm.
- Module Người bán (Vendor): Đăng tải sản phẩm mới, cập nhật giá và số lượng tồn kho, tiếp nhận đơn đặt hàng từ khách hàng và quản lý trạng thái xử lý đơn.
- Module Quản trị (Admin): Kiểm duyệt danh mục/sản phẩm toàn sàn, quản trị tài khoản người dùng, phân quyền hệ thống và theo dõi biểu đồ doanh thu.
Đổi mới và đóng góp
- Phân tách hoàn toàn kiến trúc Client-Server: Khác với các đồ án sử dụng kiến trúc nguyên khối monolithic truyền thống (như Spring MVC trả về JSP/Thymeleaf), hệ thống Calobye xây dựng Backend hoàn toàn dưới dạng RESTful API độc lập, cho phép tương thích ngay lập tức với các nền tảng Frontend hiện đại (React, Vue) hoặc Ứng dụng di động (Flutter/React Native) mà không cần viết lại mã nguồn xử lý nghiệp vụ.
- Cơ chế xác thực không trạng thái (Stateless Authentication): Sử dụng JWT giúp loại bỏ hoàn toàn việc lưu trữ Session trên bộ nhớ RAM của Server, cho phép mở rộng quy mô hệ thống theo chiều ngang (Horizontal Scaling) qua nhiều node server mà không lo đồng bộ trạng thái đăng nhập.
- Chuẩn hóa quy trình kiểm duyệt chất lượng 2 lớp: Đưa ra giải pháp giải quyết bài toán cốt lõi của sàn TPCN: Sản phẩm do người bán đăng tải bắt buộc phải qua trạng thái chờ duyệt (Pending Approval) từ Admin hệ thống trước khi xuất hiện trên giao diện tìm kiếm công khai, loại trừ 99% nguy cơ hàng giả hoặc thông tin sai lệch y tế.
- Tối ưu hóa hiệu năng biểu mẫu (Form Performance): Kết hợp Tailwind CSS cho các thành phần tiện ích giao diện nhỏ gọn và Bootstrap 5 cho hệ thống Grid linh hoạt, giảm dung lượng tải trang (Page Load Payload) xuống dưới 1.2MB cho trang chủ.
Ứng dụng thực tế và triển khai
Kịch bản vận hành thực tế (Real-World Use Case)
- Tình huống: Một thương hiệu thực phẩm bổ sung protein thể thao đăng ký tài khoản người bán.
- Quy trình xử lý:
- Người bán hoàn tất đăng ký và gửi hồ sơ cửa hàng.
- Quản trị viên Calobye xác minh hồ sơ và cấp quyền Vendor.
- Người bán đăng tải sản phẩm "Life Protein Isolate 2kg" với đầy đủ mô tả, hình ảnh và phân loại danh mục.
- Khách hàng tìm kiếm theo danh mục "Protein", chọn sản phẩm vào giỏ, nhập địa chỉ nhận hàng và tiến hành thanh toán.
- Hệ thống gửi thông báo xác nhận đơn hàng qua Email cho khách hàng và đẩy thông tin vào Dashboard xử lý đơn của người bán.
Yêu cầu triển khai và kế hoạch mở rộng (Deployment & Infrastructure)
- Cấu hình tối thiểu: 1 Node Web Server (2 vCPU, 4GB RAM, Ubuntu Server 22.04 LTS), 1 Node Database Server (Microsoft SQL Server 2019 Standard, 4GB RAM).
- Phân tích hiệu quả chi phí (ROI): Với chi phí vận hành hạ tầng Cloud ước tính khoảng 1.500.000 VNĐ/tháng, sàn Calobye có thể hòa vốn và sinh lời ngay khi đạt quy mô 120 đơn hàng/tháng thông qua mức phí duy trì gian hàng và chiết khấu giao dịch 3 - 5%.
+-------------------------------------------------------------------------+
| LỘ TRÌNH TRIỂN KHAI MỞ RỘNG (ROADMAP) |
| |
| [Giai đoạn 1] Đóng gói Docker Container & Triển khai CI/CD |
| [Giai đoạn 2] Tích hợp Redis Caching cho danh mục sản phẩm bán chạy |
| [Giai đoạn 3] Tích hợp Cổng thanh toán VNPay / MoMo qua Webhook |
| [Giai đoạn 4] Xây dựng Mobile App khách hàng bằng Flutter |
+-------------------------------------------------------------------------+
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Hệ thống chưa tích hợp cơ chế Caching phân tán (như Redis/Memcached), dẫn đến việc mỗi truy vấn danh mục đều đọc trực tiếp từ SQL Server.
- Chức năng tìm kiếm mới dừng lại ở mức tìm kiếm chuỗi cơ bản với toán tử
LIKE trong SQL, chưa ứng dụng cơ chế tìm kiếm mờ (Fuzzy Search) hoặc Full-text Search Engine chuyên dụng (Elasticsearch).
- Cơ chế thanh toán trực tuyến mới dừng ở mức cấu trúc hóa dữ liệu chờ tích hợp cổng thanh toán bên thứ ba.
Hướng phát triển trong tương lai
- Ứng dụng công nghệ AI/ML: Tích hợp mô hình gợi ý sản phẩm (Recommendation Engine) dựa trên lịch sử mua sắm và mục tiêu thể trạng của khách hàng.
- Nâng cấp kiến trúc Microservices: Tách riêng các dịch vụ
Authentication Service, Product Catalog Service, Order Processing Service để đảm bảo khả năng mở rộng độc lập khi lượng giao dịch tăng đột biến.
- Triển khai Elasticsearch Cluster: Nâng cao tốc độ và độ chính xác của bộ máy tìm kiếm sản phẩm với khả năng gợi ý từ khóa thông minh (Auto-complete) và sửa lỗi chính tả.
Đối tượng hưởng lợi
+--------------------------------------------------------------------------+
| GIÁ TRỊ MANG LẠI CHO CÁC BÊN |
+--------------------------------------------------------------------------+
| 👨🎓 Sinh viên & Người học: |
| - Mã nguồn mẫu chuẩn mực về Spring Boot 3.x, Spring Security & JWT |
| - Tài liệu tham khảo toàn diện về phân tích thiết kế hệ thống (UML) |
| |
| 👨💻 Lập trình viên (Developers): |
| - Bộ khung RESTful API chuẩn RESTful Guidelines dễ dàng tái sử dụng |
| - Cơ chế thiết kế Database chuẩn 3NF xử lý bài toán E-commerce đa vai |
| |
| 🏬 Doanh nghiệp & Nhà bán hàng: |
| - Giải pháp phần mềm thương mại ngách giúp tiết kiệm 80% chi phí |
| - Hệ thống quản lý sản phẩm, đơn hàng tinh gọn và chuẩn hóa |
| |
| 🔬 Nhà nghiên cứu & Đào tạo: |
| - Dữ liệu thực nghiệm về mô hình quản lý dự án công nghệ thông tin |
| - Cơ sở để mở rộng các nghiên cứu ứng dụng AI trong TMĐT y tế |
+--------------------------------------------------------------------------+
Câu hỏi thường gặp
1. Yêu cầu kỹ thuật tối thiểu để triển khai (Deploy) hệ thống Calobye là gì?
Để chạy ứng dụng ở môi trường Production, máy chủ cần cài đặt OpenJDK 17+, Microsoft SQL Server 2019+, và Web Server Nginx để cấu hình Reverse Proxy phục vụ tài nguyên tĩnh phía Frontend và định tuyến HTTPS cho các API Endpoint của Spring Boot.
2. Giới hạn chịu tải của hệ thống và giải pháp mở rộng quy mô khi người dùng tăng đột biến?
Hệ thống hiện tại xử lý mượt mà tối đa 1.000 CCU trên cấu hình máy chủ đơn. Khi lưu lượng vượt ngưỡng, giải pháp mở rộng bao gồm: triển khai cụm cân bằng tải Nginx Load Balancer cho nhiều instance Spring Boot (nhờ cơ chế Stateless của JWT) và cấu hình Read-Replicas cho SQL Server kết hợp Redis Cache.
3. Làm thế nào để tích hợp hệ thống với các phần mềm quản lý kho hoặc ERP sẵn có?
Hệ thống cung cấp sẵn các chuẩn giao tiếp dữ liệu RESTful JSON qua các Header xác thực tiêu chuẩn. Các hệ thống ERP bên ngoài (SAP, Odoo, Fast) có thể dễ dàng đồng bộ số lượng tồn kho và thông tin đơn đặt hàng thông qua Webhook hoặc các API quản lý sản phẩm đã được phân quyền API Key riêng biệt.
4. Chi phí bảo trì và vận hành hệ thống định kỳ bao gồm những gì?
Chi phí vận hành định kỳ bao gồm: chi phí máy chủ Cloud VPS/Database (khoảng $30 - $70/tháng tùy tải), chi phí duy trì tên miền và chứng chỉ SSL (khoảng $20/năm), cùng chi phí gửi email thông báo tự động thông qua các dịch vụ Mail Delivery (SendGrid, Amazon SES).
5. Tại sao đồ án lại lựa chọn Microsoft SQL Server thay vì các cơ sở dữ liệu NoSQL như MongoDB?
Thương mại điện tử đòi hỏi tính toàn vẹn dữ liệu cực kỳ khắt khe (chuẩn ACID) trong các giao dịch đặt hàng, trừ tồn kho và tính toán tài chính. Microsoft SQL Server cung cấp cơ chế khóa dữ liệu (Row-level Locking) và hỗ trợ Transaction mạnh mẽ, giúp ngăn chặn triệt để hiện tượng sai lệch tồn kho hoặc thất thoát đơn hàng khi nhiều người cùng bấm mua một thời điểm.
Kết luận
Đồ án "Thiết kế và xây dựng hệ thống website sàn thương mại thực phẩm chức năng Calobye" của sinh viên Trần Huy Hoàng và Đặng Văn Nam đã giải quyết xuất sắc bài toán xây dựng một nền tảng thương mại điện tử chuyên ngành có tính thực tiễn cao. Với kiến trúc phân tầng chuẩn mực, giải pháp bảo mật phân quyền RBAC hiện đại qua Spring Security và JWT, cùng cơ sở dữ liệu được thiết kế tối ưu, dự án không chỉ đáp ứng trọn vẹn các yêu cầu kỹ thuật khắt khe của môn học Kiến trúc và tích hợp hệ thống mà còn mở ra tiềm năng thương mại hóa thành một sản phẩm công nghệ hoàn chỉnh phục vụ thị trường chăm sóc sức khỏe số tại Việt Nam.