CHƯƠNG 1. GIỚI THIỆU CHUNG 1. Thực trạng hiện nay 1. Thực trạng các sàn TMĐT ở Việt Nam Trong những năm gần đây, thương mại điện tử (TMĐT) đã phát triển mạnh mẽ ở Việt Nam.
Theo báo cáo của Hiệp hội Thương mại điện tử Việt Nam (VECOM), năm 2022, tổng mức bán lẻ hàng hóa và doanh thu dịch vụ thương mại điện tử đạt 17,8 tỷ USD, tăng 27,6% so với năm 2021. Dự kiến, năm 2023, tổng mức bán lẻ hàng hóa và doanh thu dịch vụ thương mại điện tử đạt 20,7 tỷ USD, tăng 17,3% so với năm 2022 [1]. Sự phát triển của TMĐT đã kéo theo sự ra đời của hàng loạt sàn thương mại điện tử (TMĐT) lớn nhỏ. Theo thống kê của VECOM, hiện nay có khoảng 500 sàn TMĐT đang hoạt động tại Việt Nam.
Trong đó, có thể kể đến một số sàn TMĐT lớn như: - Shopee - Tiki - Lazada - Sendo Các sàn TMĐT đã tạo ra một môi trường giao thương thuận lợi, giúp người mua dễ dàng tiếp cận với nhiều sản phẩm, dịch vụ đa dạng với giá cả cạnh tranh. Bên cạnh đó, các sàn TMĐT cũng mang lại nhiều lợi ích cho người bán, giúp họ gia tăng doanh số, tiếp cận với nhiều khách hàng tiềm năng hơn. Thực trạng các sàn TMĐT trên Thế giới Trên thế giới, TMĐT cũng đang phát triển mạnh mẽ. Theo báo cáo của Statista, năm 2022, tổng doanh thu TMĐT toàn cầu đạt 5,72 nghìn tỷ USD, tăng 10% so với năm 2021.
Dự kiến, năm 2023, tổng doanh thu TMĐT toàn cầu đạt 6,3 nghìn tỷ USD, tăng 10% so với năm 2022 [2]. Các sàn TMĐT lớn trên thế giới bao gồm: Vũ Duy Nguyên – B19DCCN481 10 ĐỒ ÁN TỐT NGHIỆP GIỚI THIỆU CHUNG - Amazon - Alibaba - eBay Các sàn TMĐT này đã trở thành những gã khổng lồ trong lĩnh vực TMĐT, có tầm ảnh hưởng lớn đến thị trường toàn cầu. Mục tiêu của đề tài Mục tiêu là xây dựng một hệ thống sàn TMĐT đáp ứng các yêu cầu sau: - Cung cấp đầy đủ thông tin về sản phẩm, dịch vụ cho người mua. - Cho phép người mua thực hiện các giao dịch mua bán trực tuyến một cách dễ dàng, thuận tiện.
- Đảm bảo an toàn, bảo mật thông tin cho người mua và người bán. Phạm vi nghiên cứu Đề tài tập trung nghiên cứu và xây dựng hệ thống website sàn TMĐT theo mô hình B2C (Business-to-Consumer), trong đó sàn TMĐT đóng vai trò là trung gian kết nối giữa người bán và người mua. Phương pháp nghiên cứu Để thực hiện đề tài, em đã sử dụng các phương pháp nghiên cứu sau: - Nghiên cứu lý luận: Nghiên cứu các tài liệu, giáo trình liên quan đến TMĐT, sàn TMĐT, hệ thống website,. - Nghiên cứu thực tiễn: Khảo sát thực trạng hoạt động của các sàn TMĐT hiện nay, thực hiện các bài test, thử nghiệm để đánh giá tính khả thi của hệ thống.
Các công nghệ được sử dụng Để thực hiện đề tài và xây dựng hệ thống, em quyết định sử dụng các công nghệ phổ biến trong thời điểm hiện tại như ngôn ngữ Javascript, NodeJS, NestJS, NextJS, Redis, AWS S3, MongoDB, TailwindCSS, OpenAI, … Vũ Duy Nguyên – B19DCCN481 11 ĐỒ ÁN TỐT NGHIỆP GIỚI THIỆU CHUNG 5. Tổng quan về Javascript Javascript là một ngôn ngữ lập trình, ban đầu nó được tạo ra để giúp cho các trang web trở nên sống động hơn và được sử dụng chủ yếu phía trình duyệt. Các tập lệnh javascript được cung cấp và thực thi dưới dạng văn bản thuần túy, không cần chuẩn bị hay biên dịch để chạy. Hiện nay, javascript không chỉ được thực thi ở phía trình duyệt mà còn trên phía máy chủ hoặc trên thực tế là trên bất cứ thiết bị nào có chương trình đặc biệt được gọi là công cụ Javascript.
Quá trình phát triển của javascript: - Năm 1995, javascript được phát minh bởi Brendan Eich. - Năm 1996, Netscape 2 được phát hành với javascript 1.0 - Năm 1997, javascript trở thành tiêu chuẩn ECMA-262 - Trải qua nhiều giai đoạn, Javascript ngày càng phát triển mạnh mẽ và được hỗ trợ ngày càng nhiều trên các trình duyệt khác nhau. - Cho đến năm 2018, Javascript phiên bản ECMAScript 6 được hỗ trợ trên tất cả các trình duyệt thông dụng: Chrome, FireFox, Safari. - Hiện nay, Javascript vẫn đang là một trong những ngôn ngữ phổ biến nhất thế giới Hình 1-1 Những ngôn ngữ được sử dụng phổ biến nhất năm 2023 [3] Ưu điểm của javascript: Vũ Duy Nguyên – B19DCCN481 12 ĐỒ ÁN TỐT NGHIỆP GIỚI THIỆU CHUNG - Javascript là ngôn ngữ lập trình có cấu trúc rất đơn giản, mã javascript dễ hiểu và dễ tiếp thu.
- Javascript là ngôn ngữ thông dịch, không cần biên dịch để thực thi nên tốc độ thực thi chương trình nhanh. - Bất kể JavaScript được lưu trữ ở đâu, nó luôn chạy trong môi trường máy khách để giảm mức sử dụng băng thông và tăng tốc độ thực thi. - Javascript hoạt động được trên nhiều trình duyệt, nền tảng. - Thật dễ dàng trong việc giải quyết các vấn đề thắc mắc bởi Javascript được sử dụng bởi rất nhiều nhà phát triển.
Nhược điểm của javascript: - Khó khăn trong việc gỡ lỗi. - Người dùng có thể xem được mã javascript phía máy khách, nó có thể bị người khác lạm dụng. Ngoài ra không khó để chèn mã vào trang web làm suy giảm tính bảo mật. - Kiểu dữ liệu trong javascript ở dạng kiểu dữ liệu động nên khả năng gặp những lỗi tiềm ẩn là rất cao.
Tổng quan về NestJS NestJS là một framework Node.JS cho phép xây dựng ứng dụng phía server. Nest mở rộng các framework Node.js như Express hay Fastify để bổ sung thêm nhiều module hay thư viện hỗ trợ việc xử lý tác vụ. Đây là một framework mã nguồn mở, sử dụng TypeScript và rất linh hoạt để xây dựng các hệ thống backend. [4] Vũ Duy Nguyên – B19DCCN481 13 ĐỒ ÁN TỐT NGHIỆP GIỚI THIỆU CHUNG Hình 1-2 Ngôn ngữ NestJS Bên cạnh đó, NestJS còn giúp mở rộng các server Node để hỗ trợ những cơ sở dữ liệu như MongoDB, Redis hay Apache Cassandra Cấu trúc của Nestjs: - Module (Các module): Module là một phần cơ bản trong cấu trúc NestJS.
Mỗi ứng dụng NestJS bao gồm ít nhất một module gốc (root module) và có thể có nhiều module con. Module là nơi tổ chức các thành phần của ứng dụng như Controllers, Providers và các thành phần khác. Mỗi module đại diện cho một phần chức năng cụ thể của ứng dụng. - Controller (Bộ điều khiển): Controllers là thành phần chịu trách nhiệm xử lý các yêu cầu HTTP từ phía client và trả về kết quả tương ứng.
Controllers là nơi xử lý các request và trả về các response. Các phương thức của controller được chú thích (decorated) bằng các decorator như `@Get()`, `@Post()`, `@Put()`, v., để chỉ định các route và phương thức HTTP tương ứng. - Provider (Các nhà cung cấp): Providers là thành phần chịu trách nhiệm cung cấp các dịch vụ cho ứng dụng. Đây có thể là các service, repository, logger, v.
Providers sử dụng dependency injection để chèn vào các thành phần khác và có thể được sử dụng bởi các controllers hoặc các providers khác. Vũ Duy Nguyên – B19DCCN481 14 ĐỒ ÁN TỐT NGHIỆP GIỚI THIỆU CHUNG - Middleware (Trung gian): Middleware là các hàm xử lý mà NestJS sử dụng để xử lý các yêu cầu HTTP trước khi chúng đến các route xử lý chính. Middleware có thể được sử dụng để thực hiện các thao tác chung như xác thực, ghi log, xử lý lỗi, v. - Filter (Bộ lọc): Filters được sử dụng để xử lý các exception (ngoại lệ) xảy ra trong ứng dụng.
Filters cho phép bạn xử lý và thay đổi response trước khi gửi về client khi có exception xảy ra. - Guard (Bảo vệ): Guards được sử dụng để kiểm tra xem một yêu cầu có thể được xử lý hoặc không. Guards cho phép bạn thực hiện các kiểm tra xác thực hoặc kiểm tra quyền trước khi xử lý một yêu cầu. - Interceptor (Bộ chặn): Interceptors là các hàm xử lý mà NestJS sử dụng để chặn và thay đổi response trước khi nó được gửi về client.
Interceptors có thể được sử dụng để thực hiện các thao tác chung trên response trước khi nó đi ra ngoài. - Exception (Ngoại lệ): Exception handling (xử lý ngoại lệ) là một phần quan trọng của cấu trúc NestJS. Exception handling cho phép bạn xử lý các exception xảy ra trong ứng dụng và trả về các thông báo lỗi thích hợp cho client. NestJS là một framework phát triển backend mã nguồn mở đáng chú ý, được xây dựng dựa trên Node.js và sử dụng ngôn ngữ TypeScript hoặc JavaScript.
Đặc điểm nổi bật của NestJS là mô hình kiến trúc lõi giúp tổ chức ứng dụng một cách rõ ràng và dễ quản lý, giúp lập trình viên xây dựng các ứng dụng server-side hiện đại và phức tạp một cách hiệu quả. Một trong những ưu điểm nổi bật của NestJS là việc hỗ trợ cả TypeScript và JavaScript. Lập trình viên có thể lựa chọn ngôn ngữ phù hợp với nhu cầu và kinh nghiệm của họ. TypeScript là một ngôn ngữ mở rộng của JavaScript, cung cấp kiểu dữ liệu tĩnh và các tính năng nâng cao, giúp mã nguồn dễ đọc và dễ bảo trì hơn.
NestJS triển khai mô hình kiến trúc lõi, trong đó mỗi ứng dụng bao gồm ít nhất một module gốc và có thể có nhiều module con. Mỗi module đại diện cho một phần chức năng cụ thể của ứng dụng, giúp mã nguồn trở nên rõ ràng, tổ chức tốt hơn và dễ quản lý. Vũ Duy Nguyên – B19DCCN481 15 ĐỒ ÁN TỐT NGHIỆP GIỚI THIỆU CHUNG Với NestJS, việc sử dụng Dependency Injection (DI) là một cách hiệu quả để giảm sự phụ thuộc cứng giữa các thành phần của ứng dụng. DI giúp bạn tạo ra mã linh hoạt, tái sử dụng và dễ kiểm thử.
Các decorator (chú thích) trong NestJS giúp xác định vai trò và mục đích của từng thành phần trong mã nguồn như Controllers, Providers, Middleware, v., giúp bạn dễ dàng hiểu và bảo trì mã nguồn. NestJS hỗ trợ Middleware và Interceptors, giúp bạn thực hiện các thao tác chung trước và sau khi xử lý yêu cầu HTTP. Điều này giúp bạn xử lý các yêu cầu HTTP trước khi chúng đến các route xử lý chính và thay đổi response trước khi nó được gửi về client. Exception handling (xử lý ngoại lệ) là một phần quan trọng trong NestJS, giúp bạn xử lý các exception xảy ra trong ứng dụng và trả về các thông báo lỗi thích hợp cho client khi có lỗi xảy ra.
Tổng quan về NextJS NextJS là framework mã nguồn mở được xây dựng trên nền tảng của React, cho phép chúng ta xây dựng các trang web tĩnh có tốc độ siêu nhanh và thân thiện với người dùng, cũng như xây dựng các ứng dụng web React. [5] NextJS được ra đời vào năm 2016, thuộc sở hữu của Vercel.