CƠ SỞ LÝ THUYẾT
Tổng quan về Flutter
Flutter là UI Framework mã nguồn mở miễn phí phát triển ứng dụng đa nền tảng dành cho di động, tạo bởi Google và phát hành vào tháng 5 năm 2017
Flutter gồm 2 thành phần quan trọng:
SDK (Bộ công cụ phát triển phần mềm) là tập hợp các công cụ hỗ trợ quá trình phát triển ứng dụng, bao gồm các công cụ biên dịch mã thành mã máy gốc dành cho iOS và Android.
A UI framework, based on reusable widgets, offers a collection of UI components such as buttons, text inputs, and sliders, allowing for personalized customization to meet individual needs.
Hình 3.1: Kiến trúc của Flutter
Flutter is developed using C/C++, Dart, and the Skia 2D rendering engine It compiles code directly into ARM and x86, enabling easy access to the device's GPU and seamless integration with native APIs.
Flutter cung cấp các widgets (bao gồm cả Material Design và Cupertino (IOS styled) widgets), được quản lý và render bởi Flutter’s framework và engine
Flutter integrates animation, rendering, widgets, and gestures within its framework, allowing developers to fine-tune interfaces down to the pixel level with exceptional performance As a result, Flutter offers limitless possibilities for designing user interfaces.
Tổng quan về Dart
Dart là ngôn ngữ lập trình đa mục đích do Google phát triển và được phê chuẩn bởi Ecma (ECMA-408) như một tiêu chuẩn Ngôn ngữ này được sử dụng để phát triển ứng dụng web, server, máy tính để bàn và thiết bị di động.
Dart is an object-oriented, class-based programming language that features garbage collection and uses C-style syntax to compile code into JavaScript It supports interfaces, mixins, abstract classes, generics, static typing, and sound type checking.
Dart là ngôn ngữ mã nguồn mở và miễn phí, được phát triển trên GitHub
- Hỗ trợ lập trình hướng đối tượng OOP
- Hỗ trợ HTML DOM framework để bạn khai thác DOM đa trình duyệt
- Hỗ trợ lập trình không đồng bộ async
Hỗ trợ deferred loading từ Dart 1.6 giúp cải thiện hiệu suất khởi động ứng dụng bằng cách khởi tạo chỉ những package cần thiết đang được sử dụng.
- Tích hợp với Polymer project để bạn xây dựng các web components và tái sử dụng lại trong các ứng dụng khác trong tương lai
- Tích hợp với Angular để bạn có thể tạo ứng dụng web theo mô hình MVC có thể dễ dàng bảo trì, dễ kiểm thử và clean code hơn
- Hỗ trợ các thư viện toán học để bạn xây dựng các ứng dụng game và ứng dụng liên quan đến việc tính toán
- Hỗ trợ các kiểu dữ liệu phố biến như số nguyên, chuỗi, số thực
Tổng quan về Firebase
Firebase là dịch vụ cơ sở dữ liệu đám mây mạnh mẽ của Google, giúp người dùng lập trình ứng dụng dễ dàng hơn bằng cách đơn giản hóa các thao tác với cơ sở dữ liệu.
Gần một thập niên trước, Firebase, với tiền thân là Envolve, đã ra đời như một nền tảng đơn giản cung cấp API tích hợp tính năng chat cho trang web Ngoài ứng dụng nhắn tin trực tuyến, Envolve còn được sử dụng để truyền và đồng bộ hóa dữ liệu cho các ứng dụng khác như trò chơi trực tuyến Vì vậy, các nhà sáng lập đã quyết định tách biệt hệ thống nhắn tin trực tuyến và đồng bộ dữ liệu thời gian thực thành hai phần riêng biệt.
Năm 2012, Firebase được ra mắt với dịch vụ Backend-as-a-Service, và sau đó vào năm 2014, Google đã mua lại Firebase, phát triển nó thành một nền tảng đa chức năng được hàng triệu người dùng tin tưởng và sử dụng cho đến nay.
Khi bạn đăng ký tài khoản trên Firebase để phát triển ứng dụng, bạn sẽ có ngay một cơ sở dữ liệu thời gian thực Dữ liệu được cung cấp dưới dạng JSON và luôn được đồng bộ hóa theo thời gian thực đến tất cả các kết nối client.
Tất cả các ứng dụng đa nền tảng đều sử dụng chung một cơ sở dữ liệu, tự động cập nhật dữ liệu mới nhất khi các lập trình viên phát triển ứng dụng Dữ liệu được truyền qua kết nối an toàn SSL với chứng nhận 2048 bit, đảm bảo tính bảo mật cho thông tin.
Khi mất kết nối mạng, dữ liệu sẽ được lưu trữ tại local, và mọi thay đổi sẽ tự động được cập nhật lên Server của Firebase Đồng thời, dữ liệu cũ hơn tại local cũng sẽ được tự động đồng bộ hóa với Server để đảm bảo có được thông tin mới nhất.
Firebase Authentication cung cấp dịch vụ backend, SDKs sẵn sàng sử dụng, và các thư viện UI được làm sẵn để giúp ứng dụng xác thực người dùng.
Sử dụng Firebase giúp đơn giản hóa quá trình xây dựng hệ thống xác thực, chỉ cần dưới 10 dòng code để xử lý mọi thao tác, bao gồm cả việc sát nhập tài khoản Người dùng có thể được xác thực qua nhiều phương thức khác nhau như Email, số điện thoại, Facebook, Google và Twitter.
Sử dụng Firebase Authentication giúp dễ dang hơn cho việc xây dựng hệ thống xác thực an toàn, trong khi cũng cải thiện trải nghiệm cho người dùng
Với firebase storage các lập trình viên có thể lưu trữ dữ liệu trực tiếp trên server của firebase như hình ảnh, video, tập tin một cách dễ dàng
Firebase cung cấp tính năng bảo mật của Google cho việc tải lên và tải về ứng dụng, cho phép người dùng lưu trữ hình ảnh, âm thanh, video và nội dung do người dùng tạo ra Đây là một dịch vụ lưu trữ đối tượng mạnh mẽ, đơn giản và tiết kiệm chi phí.
Firebase Cloud Messaging là giải pháp kết nối hiệu quả và đáng tin cậy giữa server và thiết bị, cho phép gửi và nhận tin nhắn cũng như thông báo trên iOS, Android và Web mà không tốn chi phí Bạn có thể gửi tin nhắn thông báo với giới hạn 2KB hoặc tin nhắn dữ liệu lên đến 4KB.
FCM cho phép gửi tin nhắn ngay lập tức hoặc theo lịch trình trong tương lai dựa trên múi giờ của người dùng Người dùng có thể tùy chỉnh dữ liệu như cài đặt độ ưu tiên, âm thanh thông báo, ngày hết hạn và theo dõi các sự kiện một cách linh hoạt.
FCM được tích hợp hoàn toàn với Firebase Analytics, cho phép bạn khả năng theo dõi chi tiết các hoạt động
NestJS is an efficient and scalable NodeJS framework designed for developing server-side applications It integrates Object-Oriented Programming (OOP), Functional Programming (FP), and Functional Reactive Programming (FRP) While NestJS is primarily developed using TypeScript, it also offers support for JavaScript.
NestJS enforces a specific architecture for developers by introducing modules, providers, and controllers, ensuring that applications are highly scalable, testable, and easy to maintain Its strict guidelines facilitate a well-structured project setup.
PostgreSQL là một hệ thống quản trị cơ sở dữ liệu quan hệ và đối tượng mã nguồn mở, nổi bật với tính năng mở rộng và tuân thủ các tiêu chuẩn kỹ thuật cao Hệ thống này được thiết kế để xử lý nhiều khối lượng công việc khác nhau, từ máy tính cá nhân đến kho dữ liệu và dịch vụ web với nhiều người dùng đồng thời.
PostgreSQL là một hệ quản trị cơ sở dữ liệu mạnh mẽ với nhiều tính năng nổi bật, hỗ trợ nhà phát triển xây dựng ứng dụng phức tạp, thực hiện truy vấn nhanh chóng và đảm bảo bảo mật cũng như tính toàn vẹn Hệ thống này cung cấp nhiều tùy chọn bảo mật, xác thực và khôi phục thảm họa, giúp tăng cường độ tin cậy Bên cạnh đó, PostgreSQL đã được chứng minh là có khả năng mở rộng cao, đáp ứng nhu cầu về số lượng dữ liệu và số lượng người dùng đồng thời.
HIỆN THỰC HỆ THỐNG
Phân tích yêu cầu hệ thống
Tính năng lưu trữ đóng vai trò quan trọng, ảnh hưởng trực tiếp đến các chức năng của hệ thống Để đảm bảo hệ thống hoạt động hiệu quả và đáp ứng yêu cầu, việc lưu trữ thông tin là cần thiết.
- Thông tin về các món ăn: Tên món ăn, hình ảnh, nguyên liệu, cách nấu, thông tin tác giả, đường dẫn đến video hướng dẫn nấu ăn
- Thông tin đánh giá món ăn: Bao gồm các đánh giá, bình luận của người dùng về món ăn
- Thông tin nội dung đăng tải: Các bài đăng, bình luận của người dùng
- Thông tin cá nhân: Tên tài khoản, ảnh đại diện, thông tin thêm, cân nặng, chiều cao, giới tính của người dùng
- Thông tin cuộc trò chuyện: Bao gồm thời gian, nội dung cuộc trò chuyện
4.1.1.2 Yêu cầu về tính năng Ứng dụng di động chạy trên nền tảng Android, có khả năng truy cập ở mọi vị trí, thời điểm với kết nối Internet Một vài yêu cầu mà hệ thống cần đáp ứng:
- Chức năng truy vấn: Đáp ứng yêu cầu truy vấn của người dùng như: Tìm kiếm các người dùng khác trong ứng dụng, tìm kiếm món ăn
- Chức năng cập nhật: Cập nhật các bài đăng, thông tin cá nhân người dùng
- Chức năng tự động: Ứng dụng tự động gửi thông báo đến người dùng
4.1.2 Phân tích yêu cầu phi chức năng
Tốc độ phản hồi các thao tác của người dùng nhanh, độ trễ thấp
Tận dụng các công cụ, tài nguyên miễn phí và giá thành phù hợp ngân sách để triển
Các thông tin của người dùng được bảo mật và bảo đảm chỉ có những người có quyền có thể try cập vào các tài nguyên cụ thể
4.1.3 Phân tích yêu cầu người dùng
Hệ thống dựa trên kết quả khảo sát và nghiên cứu hiện trạng để phân tích yêu cầu và chức năng, được thể hiện qua ngôn ngữ mô hình hóa UML.
4.1.3.1 Mô hình Use case toàn hệ thống
Hình 4.1: Sơ đồ Use case hệ thống
1 Người dùng Những người có nhu cầu sử dụng ứng dụng và đã thực hiện đăng ký tài khoản Có quyền truy cập vào tài nguyên chung và
20 ứng dụng được sở hữu bởi tài khoản đã đăng ký
Chuyên gia dinh dưỡng không chỉ là những người dùng thông thường mà còn sở hữu kiến thức sâu rộng về lĩnh vực dinh dưỡng, cho phép họ đưa ra những lời khuyên hữu ích cho người khác.
Người quản trị và vận hành hệ thống
Bảng 4.1: Danh sách các Actor trong hệ thống
4.1.3.3 Danh sách các Use case
STT Tên Use case Mô tả Use case
1 Đăng ký Cho phép người dùng đăng ký tài khoản dùng để truy cập và sử dụng các chức năng của hệ thống
2 Đăng nhập Người dùng có thể đăng nhập vào hệ thống bằng tài khoản đã đăng ký hoặc đăng nhập thông qua tài khoản Google
Cho phép lấy lại mật khẩu thông qua email đã đăng ký
Cho phép người dùng cập nhật các thông tin liên quan đến tài khoản
5 Cập nhật thông tin cá nhân
Là use case mở rộng của Quản lý tài khoản Cho phép người dùng cập nhật các thông tin trên trang cá nhân
Là use case mở rộng của Quản lý tài khoản Cho phép người dùng thay đổi mật khẩu truy cập
7 Bảng tin Cho phép người dùng khám phá các bài viết của người dùng khác
8 Tạo, cập nhật bài viết
Là use case mở rộng của Bảng tin Cho phép người dùng đăng, chỉnh sửa bài viết lên trang tin của mình và bạn bè
Người dùng có thể tương tác với bài viết bằng cách bình luận hoặc nhấn yêu thích
10 Lưu bài viết Người dùng có thể lưu bài viết để có thể xem lại nếu cần
11 Xem danh sách bài viết đã lưu
Là use case mở rộng của Lưu bài viết Cho phép người dùng xem lại danh sách bài viết đã lưu
12 Kết nối Cho phép người dùng tương tác với các người dùng khác trong hệ thống
13 Theo dõi trang cá nhân
Là use case mở rộng của Kết nối Người dùng có thể theo dõi người dùng khác để có thể nhận các thông tin mới nhất từ họ
Chat Là là một tính năng mở rộng của Kết nối, cho phép người dùng giao tiếp với nhau hoặc với Bot của hệ thống thông qua tin nhắn.
Xem và xử lý các thông tin món ăn có trong hệ thống
16 Tạo món ăn mới Là use case mở rộng của Khám phá món ăn Người dùng có thể tạo món ăn và lưu vào kho chung của hệ thống
Là use case mở rộng của Khám phá món ăn Cho phép người dùng tìm kiếm các món ăn
18 Lưu món ăn Là use case mở rộng của Khám phá món ăn Cho phép người dùng lưu món ăn vào danh sách của riêng mình
Là use case mở rộng của Khám phá món ăn Người dùng có thể đánh giá và để lại bình luận cho món ăn
20 Xem danh sách món ăn đã lưu
Là use case mở rộng của Lưu món ăn Cho phép người dùng xem lại danh sách các món ăn đã lưu
21 Quản lý món ăn Cho phép người quản trị quản lý các thông tin món ăn có trong hệ thống
Người quản trị có thể duyệt các món ăn do người dùng tạo nhằm đảm bảo chất lượng cho kho thông tin chung
23 Quản lý user Người quản trị có quyền kiểm soát thông tin các user trong hệ thống
24 Quản lý role Cho phép người quản trị gán các vai trò cho người dùng
25 Tạo bài viết khuyên dùng
Cho phép chuyên gia tạo bài viết dạng khuyên dùng
Bảng 4.2: Danh sách các Use case trong hệ thống
Phân tích thiết kế hệ thống
4.2.1.1 Sơ đồ tuần tự Đăng ký
Hình 4.2: Sơ đồ tuần tự Đăng ký
Mô tả: Cho phép người dùng đăng ký tài khoản trong hệ thống
- Người dùng nhập các thông tin cần thiết (tên đăng nhập, mật khẩu, ) và gửi yêu cầu (1-2)
- Hệ thống kiểm tra thông tin người dùng gửi xuống (3)
- Hệ thống kiểm tra xem tài khoản đã tồn tại hay chưa (4-5) Nếu có thì trả về lỗi
- Hệ thống tiến hành lưu thông tin tài khoản và thông tin người dùng vào database (6-7)
- Hệ thống gửi email chứa mã xác thực đến email đã đăng ký của người dùng (8)
- Nếu không nhận được email, người dùng có thể yêu cầu hệ thống gửi lại email xác thực (9-10)
- Hệ thống xác thực yêu cầu của người dùng qua access token, tiến hành tạo lại mã xác thực (11-13)
- Hệ thống gửi lại email chứa mã xác thực cho người dùng
- Sau khi nhận được email, người dùng nhập mã xác nhận và gửi yêu cầu xác thực (15-16)
- Hệ thống tiến hành kiểm tra và xác thực mã mà người dùng gửi xuống (17-19)
- Hệ thống trả về kết quả và hiển thị cho người dùng (20-21)
4.2.1.2 Sơ đồ tuần tự Đăng nhập
Hình 4.3: Sơ đồ tuần tự Đăng Nhập
Mô tả: Người dùng sử dụng tài khoản đã đăng ký để đăng nhập vào hệ thống
- Người dùng nhập thông tin đăng nhập và gửi yêu cầu (1-2)
- Hệ thống xác thực thông tin đăng nhập của người dùng (3)
- Hệ thống truy vấn thông tin tài khoản từ thông tin đăng nhập của người dùng (4-5)
- Hệ thống tiến hành so khớp mật khẩu (6)
- Hệ thống tạo access token cho người dùng (7)
- Hệ thống phản hồi với access token và chuyển người dùng vào trang chủ (8-9)
4.2.1.3 Sơ đồ tuần tự Đăng nhập với Google account
Hình 4.4: Sơ đồ tuần tự Đăng nhập với Google Account
Mô tả: Người dùng đăng nhập vào hệ thống sử dụng tài khoản của Google
- Người dùng nhấn yêu cầu đăng nhập (1)
Hệ thống sẽ chuyển người dùng đến trang đăng nhập của Google, nơi người dùng thực hiện việc đăng nhập và cấp quyền để hệ thống có thể truy cập thông tin tài khoản Google của họ.
- Máy chủ Google trả về mã truy cập (5)
- Hệ thống sử dụng mã truy cập để trao đổi access token dùng để truy vẫn thông tin tài khoản ở máy chủ Google (6-7-8-9)
- Hệ thống sử dụng access token để truy vấn thông tin tài khoản Google của người dùng (10-11)
- Hệ thống tạo mới tài khoản nếu chưa tồn tại (12-13)
- Hệ thống tạo access token cho người dùng và phản hồi (14-15-16)
4.2.1.4 Sơ đồ tuần tự Quên mật khẩu
Hình 4.5: Sơ đồ tuần tự Quên mật khẩu
Mô tả: Hệ thống cho phép người dùng lấy lại mật khẩu thông qua email đã đăng ký trong trường hợp người dùng quên mật khẩu
- Người dùng nhập thông tin email đã dùng để đăng ký và gửi yêu cầu (1-
- Hệ thống xác thực thông tin người dùng gửi xuống (3-4-5)
- Hệ thống tạo mới mã thay đổi mật khẩu (6-7-8)
- Hệ thống tạo link thay đổi mật khẩu chứa mã thay đổi mật khẩu và gửi đến email của người dùng
- Người dùng sau khi nhận email sẽ nhấn vào link, tiến hành nhập mật khẩu mới và gửi yêu cầu (12-13-14)
- Hệ thống xác thực mã thay đổi mật khẩu đính kèm trong yêu cầu gửi xuống (15-16-17)
- Hệ thống lưu lại mật khẩu mới (18-19)
- Hệ thống phản hồi kết quả cho người dùng (20-21)
4.2.1.5 Sơ đồ tuần tự Thay đổi mật khẩu
Hình 4.6: Sơ đồ tuần tự Thay đổi mật khẩu
Mô tả: Hệ thống cho phép người dùng thay đổi thông tin mật khẩu đăng nhập của mình
- Người dùng nhập thông tin mật khẩu hiện tại, mật khẩu mới và gửi yêu cầu (1-2)
- Hệ thống định danh và xác thực thông tin người dùng gửi xuống (3-4)
- Hệ thống truy vấn thông tin người dùng và tiến hành so khớp mật khẩu hiện tại (5-6-7)
- Hệ thống cập nhật mật khẩu mới cho người dùng (8-9)
- Hệ thống phản hồi kết quả cho người dùng (10)
4.2.1.6 Sơ đồ tuần tự cập nhật thông tin
Hình 4.7: Sơ đồ tuần tự Cập nhật thông tin
Mô tả: Hệ thống cho phép người dùng cập nhật các thông tin cá nhân của mình trên trang cá nhân như họ tên, tên hiển thị, ngày sinh,
- Người dùng nhập thông tin cần cập nhật và gửi yêu cầu (1-2)
- Hệ thống định danh và xác thực thông tin người dùng gửi xuống (3)
- Hệ thống truy vấn thông tin người dùng và kiểm tra quyền của người dùng
- Hệ thống cập nhật thông tin thay đổi cho người dùng (8-9)
- Hệ thống phản hồi kết quả cho người dùng (10)
4.2.1.7 Sơ đồ tuần tự Upload file
Hình 4.8: Sơ đồ tuần tự Upload file
Mô tả: Các bước xử lý upload file của hệ thống, dùng trong một số luồng có liên quan đến hình ảnh (tạo bài viết, tạo món ăn, )
- Người dùng chọn file ảnh và gửi yêu cầu (1-2)
- Server định danh và xác thực yêu cầu của người dùng (3-4)
- Server truy vấn Upload presigned link của FireStorage (5-6)
- Server phản hồi cho Mobile thông tin vè Upload presigned link (7)
- Mobile sử dụng Presigned link để upload ảnh lên FireStorage (8-9)
- Mobile tiến hành các luồng đang thực hiện (10)
4.2.1.8 Sơ đồ tuần tự Tạo bài viết
Hình 4.9: Sơ đồ tuần tự Tạo bài viết
Mô tả: Người dùng có thể tạo bài viết mới, bài viết sẽ xuất hiện trên trang tin của người dùng và những người dùng đã theo dõi họ
- Người dùng nhập các thông tin bài viết và gửi yêu cầu (1-2-3)
- Hệ thống định danh và xác thực yêu cầu của người dùng (4-5)
- Hệ thống kiểm tra hình ảnh mà người dùng đã upload và tiến hành di chuyển hình ảnh vào địa chỉ cố định (6-7-8-9)
- Hệ thống lưu bài viết mới vào database (10-11)
- Hệ thống đẩy bài viết vào trang tin của các người dùng khác (14-15)
- Hệ thống gửi thông báo bài viết mới đến các người dùng khác (16)
- Hệ thống phản hồi cho người dùng kết quả (17-18)
4.2.1.9 Sơ đồ tuần tự Cập nhật bài viết
Hình 4.10: Sơ đồ tuần tự Cập nhật bài viết
Mô tả: Người dùng có thể cập nhật lại bài viết của mình sau khi đã tạo
- Người dùng nhập các thông tin cần thay đổi và gửi yêu cầu (1-2)
- Hệ thống định danh và xác thực yêu cầu của người dùng (3-4)
- Hệ thống truy vấn thông tin bài viết cần cập nhật (5-6)
- Hệ thống tiến hành cập nhật các thông tin thay đổi (7-8)
- Hệ thống phản hồi kết quả cho người dùng (9-10)
4.2.1.10 Sơ đồ tuần tự Lưu bài viết
Hình 4.11: Sơ đồ tuần tự Lưu bài viết
Mô tả: Hệ thống cho phép người dùng lưu lại bài viết của người khác để có thể xem lại sau
- Người dùng chọn lưu bài viết cần lưu trữ và gửi yêu cầu (1-2)
- Hệ thống định danh và xác thực yêu cầu của người dùng (3-4)
- Hệ thống truy vấn thông tin bài viết cần lưu (5-6)
- Hệ thống tiến hành tiến hành lưu bài viết vào danh sách lưu trữ của người dùng (7-8)
- Hệ thống phản hồi kết quả cho người dùng (9-10)
4.2.1.11 Sơ đồ tuần tự Tạo món ăn
Hình 4.12: Sơ đồ tuần tự Tạo món ăn
Hệ thống cho phép người dùng tự tạo và lưu món ăn của riêng mình vào kho thức ăn chung Sau khi hoàn tất việc tạo món, món ăn sẽ được đưa vào hàng chờ để chờ xét duyệt.
- Người dùng nhập các thông tin món và gửi yêu cầu (1-2)
- Hệ thống định danh và xác thực yêu cầu của người dùng (3-4)
- Hệ thống kiểm tra hình ảnh mà người dùng đã upload và tiến hành di chuyển hình ảnh vào địa chỉ cố định (6-7-8-9)
- Hệ thống tiến hành lưu trữ món ăn mới (10-11)
- Hệ thống phản hồi kết quả cho người dùng (12-13)
4.2.1.12 Sơ đồ tuần tự Lưu món ăn
Hình 4.13: Sơ đồ tuần tự Lưu món ăn
Hệ thống cho phép người dùng lưu lại các món ăn để dễ dàng truy cập sau này Người dùng có thể phân loại món ăn thành hai chế độ: "Nên ăn" và "Không nên ăn", giúp họ quản lý chế độ dinh dưỡng hiệu quả hơn.
- Người dùng chọn món ăn cần lưu, chế độ lưu và gửi yêu cầu (1-2)
- Hệ thống định danh và xác thực yêu cầu của người dùng (3-4)
- Hệ thống truy vấn thông tin món ăn cần lưu (5-6)
- Hệ thống tiến hành tiến hành lưu món ăn vào danh sách lưu trữ của người dùng (7-8)
- Hệ thống phản hồi kết quả cho người dùng (9-10)
4.2.1.13 Sơ đồ tuần tự Đánh giá món ăn
Hình 4.14: Sơ đồ tuần tự Đánh giá món ăn
Mô tả: Hệ thống cho phép người dùng đánh giá chất lượng món ăn để người dùng khác có thể tham khảo
- Người dùng chọn số sao đánh giá, nhập bình luận và gửi yêu cầu (1-2)
- Hệ thống định danh và xác thực yêu cầu của người dùng (3-4)
- Hệ thống truy vấn thông tin món ăn cần đánh giá (5-6)
- Hệ thống tiến hành tiến hành lưu đánh giá của người dùng vào database (7-8)
- Hệ thống phản hồi kết quả cho người dùng (9-10)
4.2.1.14 Sơ đồ tuần tự Yêu thích bài viết
Hình 4.15: Sơ đồ tuần tự Yêu thích bài viết
Mô tả: Người dùng có thể tương tác với bài viết bằng cách nhấn thả yêu thích
- Người dùng chọn nút yêu thích trên bài viết và gửi yêu cầu (1-2)
- Hệ thống định danh và xác thực yêu cầu của người dùng (3-4)
- Hệ thống truy vấn thông tin bài viết (5-6)
- Hệ thống tiến hành tiến hành lưu tương tác của người dùng vào database (7-8)
- Hệ thống tự cập nhật số lượt yêu thích của bài viết (9)
- Hệ thống gửi thông báo đến chủ bài viết (10)
- Hệ thống phản hồi kết quả cho người dùng (11-12)
4.2.1.15 Sơ đồ tuần tự Bình luận cho bài viết, hướng dẫn nấu ăn
Hình 4.16: Sơ đồ tuần tự Bình luận cho bài viết, hướng dẫn nấu ăn
Mô tả: Người dùng có thể bình luận, phản hồi bình luận vào bài viết của mình hoặc người khác
- Người dùng nhập bình luân của mình và gửi yêu cầu (1-2)
- Hệ thống định danh và xác thực yêu cầu của người dùng (3-4)
- Hệ thống truy vấn thông tin bài viết (5-6)
- Hệ thống tiến hành tiến hành lưu bình luận của người dùng vào database (7-8)
- Hệ thống tự cập nhật số bình luận của bài viết (9)
- Hệ thống gửi thông báo đến chủ bài viết (10)
- Hệ thống phản hồi kết quả cho người dùng (11-12)
4.2.1.16 Sơ đồ tuần tự Tạo album
Hình 4.17: Sơ đồ tuần tự Tạo album
Mô tả: Hệ thống cho phép người dùng tạo album ảnh của mình
- Người dùng nhập các thông tin album và gửi yêu cầu (1-2-3)
- Hệ thống định danh và xác thực yêu cầu của người dùng (4-5)
- Hệ thống kiểm tra hình ảnh mà người dùng đã upload và tiến hành di chuyển hình ảnh vào địa chỉ cố định (6-7-8-9)
- Hệ thống lưu album vào database (10-11)
- Hệ thống phản hổi cho người dùng kết quả (12-13)
4.2.1.17 Sơ đồ tuần tự Nhắn tin với người dùng
Hình 4.18: Sơ đồ tuần tự Nhắn tin với người dùng
Mô tả: Hệ thống cho phép người dùng trao đổi thông tin với người dùng khác thông qua tin nhắn
- Người dùng chọn phòng chat, nhập tin nhắn và gửi yêu cầu (1-2)
- Hệ thống định danh và xác thực yêu cầu của người dùng (3-4)
- Hệ thống truy vấn thông tin phòng chat (5-6-7-8)
- Hệ thống tiến hành tiến hành tin nhắn của người dùng vào database (9)
- Hệ thống tự cập nhật tin nhắn cuối cùng của phòng và tin nhắn cuối cùng đã xem của người dùng trong phòng chat (10-11-12)
- Hệ thống gửi thông tin tin nhắn mới đến các người dùng đang online
- Hệ thống phản hồi kết quả cho người dùng (14-15)
4.2.1.18 Sơ đồ tuần tự Trò chuyện với chatbot
Hình 4.19: Sơ đồ tuần tự Trò chuyện với chatbot
Hệ thống chatbot cho phép người dùng dễ dàng trò chuyện và thực hiện các thao tác đơn giản như truy vấn thông tin về cách làm món ăn và tìm hiểu các thông tin liên quan đến món ăn.
- Người dùng nhập tin nhắn và gửi yêu cầu (1-2)
- Hệ thống định danh và xác thực yêu cầu của người dùng (3-4)
- Hệ thống xác định ý định của người dùng sử dụng dịch vụ Dialogflow (5-
- Hệ thống sử dụng hành động của người dùng để truy vấn các dữ liệu cần thiết (7-8)
- Hệ thống phản hồi kết quả cho người dùng (9-10)
4.2.1.19 Sơ đồ tuần tự Duyệt món ăn
Hình 4.20: Sơ đồ tuần tự Duyệt món ăn
Mô tả: Hệ thống cho phép admin xét duyệt các món ăn đã được tạo
- Admin chọn xác nhận hoặc hủy bỏ và gửi yêu cầu (1-2)
- Hệ thống định danh, kiểm tra quyền và xác thực yêu cầu (3-4-5)
- Hệ thống truy vấn món ăn cần xét duyệt (6-7)
- Hệ thống cập nhật trạng thái xét duyệt của món ăn vào database (8-9)
- Hệ thống gửi thông báo kết quả xét duyệt đến cho người tạo món ăn (9)
- Hệ thống gửi thông báo đến người theo dõi của người tạo món ăn nếu món ăn được duyệt (10)
- Hệ thống lưu trữ thông tin món ăn lên search engine dùng cho tìm kiếm sau này (11)
- Hệ thống phản hổi cho người dùng kết quả (12-13)
4.2.1.20 Sơ đồ tuần tự Tạo mới đơn vị
Hình 4.21: Sơ đồ tuần tự Tạo mới đơn vị
Mô tả: Hệ thống cho phép admin tạo một đơn vị mới dùng để tính toán số lượng các nguyên liệu
- Admin nhập các thông tin cần thiết và gửi yêu cầu (1-2)
- Hệ thống định danh, kiểm tra quyền và xác thực yêu cầu (3-4-5)
- Hệ thống lưu đơn vị mới vào database nếu chưa tồn tại (6-7)
- Hệ thống phản hổi cho admin kết quả (8-9)
4.2.1.21 Sơ đồ tuần tự Tạo mới nguyên liệu
Hình 4.22: Sơ đồ tuần tự Tạo mới nguyên liệu
Mô tả: Hệ thống cho phép admin tạo một nguyên liệu mới dùng để mô tả thành phần của một món ăn
- Admin nhập các thông tin cần thiết và gửi yêu cầu (1-2)
- Hệ thống định danh, kiểm tra quyền và xác thực yêu cầu (3-4-5)
- Hệ thống lưu nguyên liệu mới vào database nếu chưa tồn tại (6-7)
- Hệ thống phản hổi cho admin kết quả (8-9)
4.2.1.22 Sơ đồ tuần tự Tạo chủ đề mới
Hình 4.23: Sơ đồ tuần tự Tạo chủ đề mới
Mô tả: Hệ thống cho phép admin tạo một chủ đề mới mà người dùng có thể yêu thích, và dùng để đánh dấu bài viết theo chủ đề
- Admin nhập các thông tin cần thiết và gửi yêu cầu (1-2-3)
- Hệ thống định danh, kiểm tra quyền và xác thực yêu cầu (4-5-6)
- Hệ thống lưu chủ đề mới vào database nếu chưa tồn tại (7-8)
- Hệ thống phản hồi cho admin kết quả (9-10)
4.2.2.1 Sơ đồ cơ sở dữ liệu
Hình 4.24: Sơ đồ cơ sở dữ liệu
4.2.2.2 Danh sách các bảng dữ liệu
Dựa trên việc phân tích và xác định yêu cầu, cơ sở dữ liệu của ứng dụng bao gồm những bảng sau:
1 users Lưu trữ thông tin cá nhân của người dùng
2 accounts Lưu trữ thông tin tài khoản của người dùng
3 feeds Lưu trữ thông tin trang tin của người dùng
4 interactions Lưu trữ thông tin của các đối tượng có thể bình luận và tương tác
5 posts Lưu trữ thông tin các bài viết
6 post_medias Lưu trữ thông tin hình ảnh của bài viết
7 saved_posts Lưu trữ thông tin các bài viết đã lưu của người dùng
8 comments Lưu trữ thông tin bình luận của bài viết
9 comment_medias Lưu trữ thông tin hình ảnh của bình luận
10 reactions Lưu trữ thông tin yêu thích của bài viết
11 albums Lưu trữ thông tin album của người dùng
12 album_medias Lưu trữ thông tin hình ảnh của album
13 follows Lưu thông tin các lượt theo dõi
14 topics Lưu trữ thông tin các chủ đề của hệ thống
15 interested_topics Lưu trữ thông tin các chủ đề yêu thích của người
16 foods Lưu trữ thông tin các món ăn
17 food_medias Lưu trữ thông tin hình ảnh của món ăn
18 food_ingredients Lưu trữ thông tin thành phần của món ăn
19 recipe_steps Lưu trữ thông tin các bước thực hiện của món ăn
20 food_votes Lưu trữ thông tin các đánh giá món ăn
21 saved_foods Lưu trữ thông tin các món ăn đã lưu
22 conversations Lưu trữ thông tin phòng chat
23 conversation_members Lưu trữ thông tin các người dùng tham gia phòng chat
24 messages Lưu trữ thông tin các tin nhắn trong phòng chat
25 ingredients Lưu trữ thông tin nguyên liệu
26 units Lưu trữ thông tin các đơn vị
27 providers Lưu trữ thông tin Google của người dùng
28 roles Lưu trữ thông tin các vai trò trong hệ thống
29 permissions Lưu trữ các quyển trong hệ thống
30 role_permissions Lưu trữ các quyền của các vai trò
Bảng 4.3: Danh sách các bảng dữ liệu
4.2.2.3 Chi tiết các bảng dữ liệu
STT Tên trường Kiểu dữ liệu
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 avatar string Ảnh đại diện
6 bio string Thông tin mô tả
7 birth_date timestamp Ngày sinh
8 display_name string Không null Tên hiển thị
9 first_name string Tên người dùng
10 last_name string Họ người dùng
14 n_followers integer Mặc định là
Số người đang theo dõi
15 n_followees integer Mặc định là
16 n_posts integer Mặc định là
Bảng 4.4: Danh sách thuộc tính bảng user
STT Tên trường Kiểu dữ liệu
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 email string Không null Địa chỉ mail
6 email_verified boolean Mặc định là
False Không null Đã xác thực email hay chưa?
7 password string Mật khẩu (đã hash)
8 phone string Số điện thoại
9 reset_password_token string Mã thay đổi mật khẩu
10 role_id uuid Khóa ngoại của bảng roles(id)
11 user_id uuid Khóa ngoại của bảng users(id) Không null
12 username string Là duy nhất
Bảng 4.5: Danh sách thuộc tính bảng accounts
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 post_id uuid Khóa ngoại của bảng posts(id) Không null
6 user_id uuid Khóa ngoại của bảng users(id) Không null
Bảng 4.6: Danh sách thuộc tính bảng feeds
STT Tên trường Kiểu dữ liệu
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 n_comments integer Mặc định là
6 n_reactions integer Mặc định là
Bảng 4.7: Danh sách thuộc tính bảng interactions
STT Tên trường Kiểu dữ liệu
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 author_id uuid Khóa ngoại của bảng users(id)
6 content string Không null Nội dung bài viết
7 food_ref_id uuid Khóa ngoại của bảng foods(id)
Dùng cho bài viết dạng chia sẻ món ăn
8 kind string Không null Loại bài viết
9 location string Địa điểm đăng bài
10 recommendation jsonb Dùng cho bài viết recommendation
11 tags jsonb Không null Tag của bài viết
Bảng 4.8: Danh sách thuộc tính bảng posts
Khóa ngoại của bảng interactions(id)
Mã định danh duy nhất dùng để phân biệt
2 key string Không null Object key của hình ảnh
3 post_id uuid Khóa ngoại của bảng posts(id) Không null
4 type string Không null Loại file
Bảng 4.9: Danh sách thuộc tính bảng post_medias
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 post_id uuid Khóa ngoại của bảng posts(id)
6 user_id uuid Khóa ngoại của bảng users(id)
ID của người lưu trữ
Bảng 4.10: Danh sách thuộc tính bảng saved_posts
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 content string Không null Nội dung bình luận
6 parent_id uuid Khóa ngoại của bảng comments(id)
ID của bình luận được phản hồi
7 target_id uuid Khóa ngoại của bảng interactions(id) Không null
ID của đối tượng được bình luận
8 user_id uuid Khóa ngoại của bảng users(id) Không null
ID của người bình luận
Bảng 4.11: Danh sách thuộc tính bảng comments
STT Tên trường Kiểu dữ liệu
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 key string Không null Object key của hình ảnh
6 type string Không null Loại file
7 comment_id uuid Khóa ngoại của bảng comments(id) Không null
Bảng 4.12: Danh sách thuộc tính bảng comment_medias
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 type string Không null Loại tương tác
6 user_id uuid Khóa ngoại của bảng users(id) Không null
7 target_id uuid Khóa ngoại của bảng interactions(id) Không null
ID của đối tượng được tương tác
Bảng 4.13: Danh sách thuộc tính bảng reactions
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
3 name string Không null Tên album
4 owner_id uuid Khóa ngoại của bảng users(id) Không null
ID của người tạo album
Bảng 4.14: Danh sách thuộc tính bảng albums
Khóa ngoại của bảng interactions(id)
Mã định danh duy nhất dùng để phân biệt
2 key string Không null Object key của hình ảnh
3 album_id uuid Khóa ngoại của bảng albums(id) Không null
4 type string Không null Loại file
Bảng 4.15: Danh sách thuộc tính bảng album_medias
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 follower_id uuid Khóa ngoại của bảng users(id) Không null
ID của người theo dõi
6 followee_id uuid Khóa ngoại của bảng users(id) Không null
ID của người được theo dõi
Bảng 4.16: Danh sách thuộc tính bảng follows
Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null
3 updated_at timestamp Không null
4 deleted_at timestamp Ngày xóa
Bảng 4.17: Danh sách thuộc tính bảng topics
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 topic_id uuid Khóa ngoại của bảng topics(id) Không null
6 user_id uuid Khóa ngoại của bảng users(id) Không null
Bảng 4.18: Danh sách thuộc tính bảng interested_topic
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 author_id uuid Khóa ngoại của bảng users(id) Không null
6 description string Mô tả món ăn
7 name string Không null Tên món ăn
8 rating float Đánh giá trung bình
9 servings integer Không null Số lượng người dùng
10 status string Không null Trạng thái xét duyệt
11 total_time integer Không null Thời gian nấu
Bảng 4.19: Danh sách thuộc tính bảng foods
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 key string Không null Object key của hình ảnh
6 type string Không null Loại file
7 food_id uuid Khóa ngoại của bảng foods(id) Không null
Bảng 4.20: Danh sách thuộc tính bảng food_medias
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 food_id uuid Khóa ngoại của bảng foods(id) Không null
6 ingredient string Không null Tên nguyên liệu
7 quantity integer Số lượng nguyên liệu
8 unit string Đơn vị tính nguyên liệu
Bảng 4.21: Danh sách thuộc tính bảng food_ingredients
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 food_id uuid Khóa ngoại của bảng foods(id) Không null
3 content string Không null Nội dung bước thực hiện
Bảng 4.22: Danh sách thuộc tính bảng recipe_steps
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 food_id uuid Khóa ngoại của bảng foods(id) Không null
6 star integer Không null Số sao đánh giá
7 author_id uuid Khóa ngoại của bảng ID của người đánh giá
Bảng 4.23: Danh sách thuộc tính bảng food_votes
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 food_id uuid Khóa ngoại của bảng foods(id) Không null
6 user_id uuid Khóa ngoại của bảng users(id) Không null
ID của người lưu trữ
7 type string Không null Loại lưu trữ
Bảng 4.24: Danh sách thuộc tính bảng saved_foods
STT Tên Kiểu dữ Ràng buộc Ý nghĩa
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 last_msg_id uuid Khóa ngoại của bảng messages(id)
ID của tin nhắn cuối cùng
6 type string Không null Loại phòng chat
Bảng 4.25: Danh sách thuộc tính bảng conversations
STT Tên trường Kiểu dữ liệu
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 last_seen_msg_id uuid Khóa ngoại của bảng messages(id)
ID của tin nhắn đã xem cuối cùng
6 user_id uuid Khóa ngoại của bảng users(id) Không null
ID của thành viên phòng chat
Bảng 4.26: Danh sách thuộc tính bảng conversation_members
STT Tên trường Kiểu dữ liệu
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 content string Không null Nội dung tin nhắn
6 content_type string Không null Loại tin nhắn
7 conversation_id uuid Khóa ngoại của bảng conversations(id) Không null
8 sender_id uuid Khóa ngoại của bảng users(id)
ID của người gửi tin nhắn Bảng 4.27: Danh sách thuộc tính bảng messages
Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null
3 updated_at timestamp Không null
4 deleted_at timestamp Ngày xóa
Bảng 4.28: Danh sách thuộc tính bảng ingredients
Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null
3 updated_at timestamp Không null
4 deleted_at timestamp Ngày xóa
Bảng 4.29: Danh sách thuộc tính bảng units
STT Tên trường Kiểu dữ liệu
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 account_id uuid Khóa ngoại của bảng accounts(id) Không null
6 external_id string Không null ID của hệ thống ngoài
7 provider_type string Không null Loại hệ thống
Bảng 4.30: Danh sách thuộc tính bảng providers
Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null
3 updated_at timestamp Không null
4 deleted_at timestamp Ngày xóa
Ký hiệu của vai trò
Bảng 4.31: Danh sách thuộc tính bảng roles
Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null
3 updated_at timestamp Không null
4 deleted_at timestamp Ngày xóa
Bảng 4.32: Danh sách thuộc tính bảng permissions
STT Tên trường Kiểu dữ liệu
1 id uuid Khóa chính Mã định danh duy nhất dùng để phân biệt
2 created_at timestamp Không null Ngày tạo
3 updated_at timestamp Không null Ngày cập nhật
4 deleted_at timestamp Ngày xóa
5 role_id uuid Khóa ngoại của roles(id)
6 permission_id uuid Khóa ngoại của bảng permissions(id) Không null
Bảng 4.33: Danh sách thuộc tính bảng role_permissions
4.2.3 Thiết kế kiến trúc hệ thống
Hình 4.25: Sơ đồ kiến trúc hệ thống
Admin: Người quản trị hệ thống
User: Bao gồm người dùng thông thường và các chuyên gia, là những người sử dụng hệ thống.
Single-page Application: Trang web dành cho người quản trị.
Mobile Application: Ứng dụng di động mà người dùng sử dụng để tương tác với hệ thống.
API Application: API server của hệ thống, có nhiệm vụ cung cấp các API cho
Single-page Application và Mobile Application cũng như gọi đến các dịch vụ bên ngoài.
Database: Là nơi lưu trữ chính của hệ thống
Firestore: Dịch vụ Real-time database của Firebase
Firestorage: Dịch vụ lưu trữ file của Firebase, dùng lưu trữ các file của hệ thống MongoDB Atlat: Sử dụng như một search engine
OneSignal: Dịch vụ gửi push notification
Google SMTP Server: Máy chủ mail của Google dùng để gửi email đến người dùng
STT Tên màn hình Mô tả chức năng
1 Đăng nhập Đăng nhập vào hệ thống
2 Đăng ký Đăng ký tài khoản mới
3 Xác thực email Xác thực email bằng đoạn mã 6 kí tự số được gửi tới email đăng ký của người dùng
4 Chọn chủ đề Người dùng chọn chủ đề mà mình quan tâm, qua đó ứng dụng sẽ hiển thị các bài đăng theo chủ đề người dùng đã chọn
5 Tìm kiếm người dùng Tìm kiếm các người dùng khác trong ứng dụng
6 Bảng tin Hiển thị các bài đăng
7 Tạo bài viết Người dùng tạo bài viết mới
8 Chỉnh sửa bài viết Người dùng chỉnh sửa thông tin bài viết (hình ảnh, nội dung)
9 Xem chi tiết bài viết có Hiển thị chi tiết bài viết có nhiều hình ảnh
72 nhiều hình ảnh dưới dạng lướt dọc
10 Bình luận Hiển thị các bình luận của người dùng
11 Danh sách món ăn Hiển thị danh sách các món ăn có hướng dẫn trong ứng dụng
12 Chi tiết hướng dẫn nấu món ăn
Hiển thị chi tiết hướng dẫn nấu món ăn (tên, nguyên liệu, bước, video)
13 Chia sẻ món ăn Tạo bài đăng đính kèm đường dẫn tới món ăn người dùng muốn chia sẻ
14 Đánh giá món ăn Người dùng đánh giá món ăn (người dùng cho điểm từ 1 đến 5 kèm theo bình luận)
15 Xem các đánh giá món ăn của người dùng
Xem các đánh giá về món ăn của tất cả người dùng
16 Tạo hướng dẫn nấu ăn Người dùng tạo công thức hướng dẫn nấu ăn của mình
17 Danh sách các cuộc trò chuyện
Danh sách các tin nhắn của người dùng
18 Nhắn tin Hiển thị tin nhắn của người dùng với người dùng khác hoặc với chatbot
19 Thông báo Hiển thị những thông báo của người dùng
20 Trang cá nhân Hiển thị thông tin cá nhân của người dùng
(ảnh đại diện, tên, danh sách bài đăng, album)
21 Tạo album Người dùng tạo album
22 Thông tin album Hiển thị thông tin album
23 Xem danh sách bài đăng, Hiển thị danh sách các bài đăng, món ăn mà
73 món ăn đã lưu người dùng đã lưu
24 Chỉnh sửa thông tin cá nhân Chỉnh sửa thông tin cá nhân của người dùng
25 Cài đặt thông báo Người dùng bật tắt tính năng nhận thông báo
26 Đổi mật khẩu Người dùng thay đổi mật khẩu tài khoản
27 Quên mật khẩu Người dùng nhập email đã dùng để đăng ký tài khoản để hệ thống gửi email xác nhận thiết lập lại mật khẩu
28 Thay đổi danh sách chủ đề quan tâm
Người dùng thay đổi danh sách chủ đề mà mình quan tâm
Bảng 4.34: Danh sách màn hình
4.2.4.2 Giao diện một số màn hình của ứng dụng
74 Hình 4.26: Màn hình đăng nhập Hình 4.27: Màn hình đăng ký
Hình 4.28: Màn hình xác thực email Hình 4.29: Màn hình chọn chủ đề
Hình 4.30: Màn hình bảng tin Hình 4.31: Màn hình xem bài đăng theo chủ đề
Hình 4.32: Màn hình tìm kiếm người dùng Hình 4.33: Màn hình tạo bài đăng
Hình 4.34: Màn hình tạo bài đăng kèm đường dẫn đến hướng dẫn nấu món ăn
Hình 4.35: Màn hình tạo bài đăng gợi ý món ăn nên và không nên sử dụng
Hình 4.36: Màn hình bình luận Hình 4.37: Màn hình hiển thị danh sách các món ăn
Hình 4.38: Màn hình hiển thị chi tiết hướng dẫn nấu ăn (1)
Hình 4.39: Màn hình hiển thị chi tiết hướng dẫn nấu ăn (2)
Hình 4.40: Màn hình đánh giá món ăn Hình 4.41: Màn hình hiển thị các đánh giá món ăn của người dùng
Hình 4.42: Màn hình tạo hướng dẫn nấu ăn
Hình 4.43: Màn hình hiển thị danh sách bài đăng đã lưu
Hình 4.44: Màn hình hiển thị danh sách món ăn nên sử dụng đã lưu
Hình 4.45: Màn hình hiển thị danh sách món ăn không nên sử dụng đã lưu
Hình 4.46: Màn hình hiển thị các thông báo
Hình 4.47: Màn hình hiển thị danh sách các cuộc trò chuyện
Hình 4.48: Màn hình nhắn tin Hình 4.49: Màn hình trang cá nhân người dùng
Hình 4.50: Màn hình chỉnh sửa thông tin cá nhân
Hình 4.51: Màn hình tạo album
Hình 4.52: Màn hình xem album Hình 4.53: Màn hình thay đổi mật khẩu
Hình 4.54: Màn hình bật tắt tính năng nhận thông báo
Hình 4.55: Màn hình chỉnh sửa các chủ đề người dùng theo dõi
Triển khai hệ thống
Hình 4.56: Sơ đồ triển khai hệ thống
Máy chủ API được triển khai trên hệ thống đám mây Heroku, có thể hoạt động
Hệ thống cho phép người dùng truy cập tối đa 1000 giờ mỗi tháng Sau 30 phút không hoạt động, hệ thống sẽ tự động chuyển sang trạng thái ngủ và cần một khoảng thời gian ngắn để đánh thức trước khi sử dụng lại.
Hình 4.57: Thông tin máy chủ đã triển khai
The application utilizes Heroku's PostgreSQL Add-ons, specifically the Hobby-Dev plan, which supports up to 10,000 rows of data, offers a storage capacity of 1GB, and allows a maximum of 20 simultaneous connections.
Hình 4.58: Thông tin cơ sở dữ liệu đã triển khai
Hệ thống sử dụng MongoDB Atlat như một search engine, phiên bản Shared với các thiết lập cơ bản, sức chứa tối đa 512MB, RAM dùng chung
Hình 4.59: Thông tin thiết lập của MongoDB Atlat
Ngoài ra, hệ thống còn sử dụng 2 dịch vụ của Firebase là Firestorage và Firestore với các thông số:
- Firestorage: sức chứa tối đa 5GB, giới hạn số lượt tải xuống 50K/ngày, giới hạn số lượt tải lên 20K/ngày
- Firestore: sức chứa tối đa 1GB, số lượt đọc, ghi và xóa lần lượt là 50K/ngày, 20K/ngày và 20K/ngày