MỞ ĐẦU VÀ TỔNG QUAN ĐỀ TÀI 1.1 Tổng quan - Trong môi trường học tập đại học, việc giao tiếp và trao đổi thông tin giữa sinh viên là một phần không thể thiếu. Để giải quyết nhu cầu này một cách hiệu quả, dự án của chúng tôi tập trung vào việc xây dựng một ứng dụng chat nhỏ dành riêng cho sinh viên của Trường Đại Học Tôn Đức Thắng. Ứng dụng được thiết kế để cung cấp một phương tiện giao tiếp dễ sử dụng và linh hoạt, hỗ trợ sinh viên trong việc trao đổi thông tin, học tập và kết nối với nhau. - Dựa vào những tiêu chí trên, cùng với sự góp ý từ thầy bộ môn, nhóm đã chọn đề tài quán lý dự án “Xây đựng ứng dụng chat trực tuyến”.
Dự án hoàn thành sẽ cung cấp tiện ích chat trực tuyến trên nền tảng mobile, giúp người dùng có thể trao đổi thông tin nhanh chóng trực quan.2 Mục tiêu đề tài Mục tiêu chính của dự án là cung cấp cho sinh viên một nền tảng giao tiếp thuận tiện, nhanh chóng và an toàn. Ứng dụng sẽ hỗ trợ các tính năng cơ bản như gửi tin nhắn, tạo nhóm trò chuyện, tìm kiếm bạn bè. Đồng thời, chúng tôi cũng muốn tạo ra một môi trường giao tiếp tích cực, thú vị và độc đáo, giúp sinh viên cảm thấy gần gũi và kết nối hơn với nhau.3 Phạm vi đề tài 1.1 Chức năng dành cho người dùng: - Giao diện dễ sử dụng và thân thiện, dễ thao tác và sử dụng. - Cho phép khách hàng đăng kí tài khoản - Chat nhóm và chat cá nhân.
- Xem danh sách nhóm chat, danh sách bạn bè.2 Chức năng dành cho người quản trị Ngoài các yêu cầu giống như của khách hàng, thì hệ thống phải đảm bảo những yêu cầu sau: - Cập nhật được trạng thái hoạt động của người dùng - Thống kê và tìm kiếm được tất cả người dùng theo số điện thoại.4 Mô tả yêu cầu chức năng 1.1 Phân tích yêu cầu của hệ thống - Người dùng có thể thay đổi thông tin cá nhân như hình ảnh, tên, giới tính… - Người dùng thực hiện chat trên ứng dụng, hệ thống sẽ tiếp nhận tin nhắn và gửi cho đối tượng chỉ định - Cho phép người dùng gửi tin nhắn, hình ảnh và video. - Người dùng có thể tạo nhóm chat, ghim cuộc trò chuyện - Từ mô tả trên, có thể đưa ra yêu cầu của hệ thống với hai đối tượng chính tương tác với hệ thống như sau: Đối với hệ thống: - Quản lý thông tin của người dùng và thay đổi trạng thái hoạt động. - Tìm kiếm thông tin người dùng dựa trên số điện thoại. Đối với người dùng: - Tạo tài khoản, xem và chỉnh sửa thông tin cá nhân.
- Chat cá nhân hoặc chat nhóm. - Ghim cuộc trò chuyện. - Gửi tin nhắn, hình ảnh và video… - Xem danh sách bạn bè 3 - Kết bạn bằng số điện thoại.2 Mô tả hoạt động của hệ thống - Người dùng cần phải đăng ký 1 tài khoản gồm số điện thoại và mật khẩu trước khi sử dùng ứng dụng chat. - Người dùng có thể kết bạn dựa trên số điện thoại, sau khi có bạn bè trong danh sách, người dùng có thể chat với bạn bè của mình.
- Thành viên trong hộp thoại chat có thể gửi tin nhắn văn bản, đi kèm với hình ảnh. - Ngoài ra, người dùng có thể tạo group chat để tiện trong việc trao đổi thông tin theo nhóm, với cách thức hoạt động tương tự như chat đơn CHƯƠNG 2.1 NestJS là gì? NestJS là một framework mã nguồn mở để phát triển ứng dụng server-side (backend applications) bằng ngôn ngữ TypeScript hoặc JavaScript. Nó được xây dựng trên cơ sở Node.js và sử dụng các khái niệm từ TypeScript để tạo ra một môi trường phát triển hiện đại và mạnh mẽ cho việc xây dựng ứng dụng web và API. 4 Mục tiêu chính của NestJS là cung cấp một cấu trúc ứng dụng rõ ràng và dễ quản lý, giúp tăng tính bảo trì và sự tổ chức trong mã nguồn.
Để đạt được điều này, NestJS triển khai mô hình kiến trúc lõi (core architecture) dựa trên các nguyên tắc của Angular, đặc biệt là sử dụng Dependency Injection (DI) và Modules (Các module).2 Cấu trúc của NestJS NestJS được xây dựng từ nhiều yếu tố khác nhau, tuy nhiên quan trọng nhất là ba thành phần chính sau: Modules Modules: được sử dụng để tổ chức code và chia các tính năng thành các đơn vị có thể tái sử dụng hợp lý. Các tệp TypeScript được nhóm bằng Decorator “@Module”. Decorator “@Module” cung cấp siêu dữ liệu cho NestJS giúp nó xác định các thành phần, bộ điều khiển hay những tài nguyên khác để sắp xếp cấu trúc ứng dụng khoa học, hiệu quả. Providers Một thành phần không thể thiếu ở NestJS đó là Providers.
Nó tương tự như một dịch vụ giúp xử lý những tác vụ mang tính phức tạp, logic mà các trình xử lý 5 Controller không thể làm được. Providers có thể được tạo và đưa vào Controllers hoặc Providers khác. Controllers Chức năng chính của Controllers là xử lý các yêu cầu gửi đến và đáp trả lại cho client-side. Sau khi nhận được yêu cầu HTTP nó sẽ soạn thảo câu trả lời chính xác, phù hợp nhất để gửi đi.
Mỗi Controllers sẽ có bộ lộ trình riêng để giúp nó thực hiện tốt các tác vụ khác nhau.3 Các tính năng của NestJS NestJS framework được người dùng sử dụng cực kỳ phổ biến bởi nó sở hữu những tính năng hữu ích như: - Sử dụng TypeScript và cho phép ngôn ngữ lập trình này thích ứng nhanh để đáp ứng mọi thay đổi của JavaScript. - Cài đặt đơn giản, dễ sử dụng, không mất nhiều thời gian để học hỏi, nghiên cứu. - Tăng hiệu suất và dễ dàng phát triển nhờ giao diện dòng lệnh CLI mạnh mẽ. - Nguồn tài liệu đa dạng, phong phú, chi tiết và được duy trì tốt.
- Khả năng mở rộng, phát triển và bảo trì cơ sở mã đang hoạt động. - Là mã nguồn mở của Node.js phát triển mạnh mẽ vượt bậc nhất trong vài năm trở lại đây. - Hỗ trợ mô đun giúp các ứng dụng tích hợp các công nghệ và khái niệm phổ biến như Caching, WebSockets, Logging, Validation, TypeORM, Mongoose… - Được tạo cho Micro-services và Monoliths.1 MongoDB là gì? MongoDB, được biết đến như cơ sở dữ liệu NoSQL phổ biến nhất, là cơ sở dữ liệu định hướng tài liệu mã nguồn mở. Thuật ngữ 'NoSQL' có nghĩa là 'không có mối quan hệ' (Non-relational).
Điều đó có nghĩa là MongoDB không dựa trên cấu trúc 6 cơ sở dữ liệu quan hệ giống như bảng mà cung cấp một cơ chế hoàn toàn khác để lưu trữ và truy xuất dữ liệu. Định dạng lưu trữ này được gọi là BSON (tương tự như định dạng JSON).2 Các tính năng của MongoDB Document Oriented MongoDB lưu trữ subject chính với số lượng documents tối thiểu chứ không phải bằng cách chia nó thành nhiều cấu trúc quan hệ như RDBMS. Ví dụ: nó lưu trữ tất cả thông tin của một máy tính trong một tài liệu duy nhất được gọi là Máy tính và không nằm trong các cấu trúc quan hệ riêng biệt như CPU, RAM, Đĩa cứng, v. Indexing Nếu không lập chỉ mục, CSDL sẽ không truy vấn hiệu quả vì phải quét mọi tài liệu của tập hợp để chọn những tài liệu phù hợp cho việc truy vấn đó.
Vì vậy, để tìm kiếm hiệu quả, Indexing là điều bắt buộc và MongoDB sử dụng nó để xử lý khối lượng dữ liệu khổng lồ trong thời gian rất ngắn. Scalability 7 MongoDB mở rộng quy mô theo chiều ngang bằng cách sử dụng sharding (phân vùng dữ liệu trên các máy chủ khác nhau). Dữ liệu được phân vùng thành các khối dữ liệu bằng “shard key” và các khối dữ liệu này được phân phối đều trên các phân đoạn nằm trên nhiều máy chủ vật lý. Ngoài ra, các máy mới có thể được thêm vào cơ sở dữ liệu đang chạy.
Replication and High Availability MongoDB tăng tính khả dụng của dữ liệu với nhiều bản sao dữ liệu trên các máy chủ khác nhau. Bằng cách cung cấp bản dự phòng, nó bảo vệ cơ sở dữ liệu khỏi các lỗi phần cứng. Nếu một máy chủ gặp sự cố, dữ liệu có thể được truy xuất dễ dàng từ các máy chủ đang hoạt động khác cũng có dữ liệu tương tự được lưu trữ trên chúng. Aggregation Các hoạt động tổng hợp xử lý các bản ghi dữ liệu và trả về kết quả tính toán.
Nó tương tự như mệnh đề GROUPBY trong SQL. Một vài biểu thức tổng hợp là tổng, trung bình, tối thiểu, tối đa, v.1 Koitlin là gì? Kotlin là ngôn ngữ lập trình mã nguồn mở được phát triển bởi JetBrains và công bố trên thị trường vào năm 2011. Tương tự như các ngôn ngữ lập trình quen thuộc C, C++, Java, Kotlin cũng thuộc danh mục ngôn ngữ lập trình kiểu tĩnh. Điều này đồng nghĩa với việc các biến của ngôn ngữ không cần định nghĩa trước khi sử dụng.
Kotlin dành cho Java Virtual Machine , phát hành chính thức phiên bản 1. Ngôn ngữ này chạy trên JVM và có khả năng sử dụng công cụ, thư viện hiện có của Java. Ngược lại, Java cũng có thể sử dụng những item có trong Kotlin. Kotlin hiện được Google sử dụng làm ngôn ngữ lập trình chính thức cho máy ảo Java từ tháng 5/2017.2 Điểm nổi bật của Kotlin 8 Tính đa nền tảng Kotlin là một ngôn ngữ đa nền tảng, có thể chạy trên nhiều hệ điều hành như Android, iOS, Windows, Linux và nhiều hơn nữa.
Điều này cho phép lập trình viên viết mã một lần và sử dụng lại trên nhiều nền tảng khác nhau Tương thích với Java Kotlin hoàn toàn tương thích với Java, điều này có nghĩa là bạn có thể tích hợp mã Java hiện có vào dự án Kotlin của mình mà không gặp vấn đề. Vì Kotlin chia sẻ cùng một máy ảo Java (JVM) với Java, nên các thư viện và framework Java có thể được sử dụng trong mã Kotlin. An toàn kiểu dữ liệu Kotlin cung cấp kiểm tra kiểu tĩnh mạnh mẽ, giúp ngăn chặn lỗi kiểu dữ liệu phổ biến từ quá trình biên dịch. Kiểm tra kiểu dữ liệu tĩnh cũng giúp tăng tính tin cậy và hiệu suất của mã.
Cú pháp gọn gàng Kotlin có cú pháp rõ ràng, đơn giản và ngắn gọn hơn so với Java. Việc này giúp cải thiện khả năng đọc và hiểu mã, đồng thời làm giảm lượng mã cần viết để thực hiện các tác vụ thông thường. Hỗ trợ chính thức cho Android Kotlin được công nhận là ngôn ngữ lập trình chính thức cho việc phát triển ứng dụng Android bởi Google vào năm 2017. Điều này đã tạo ra sự lan rộng nhanh chóng của Kotlin trong cộng đồng phát triển Android.