1. Trang chủ
  2. » Cao đẳng - Đại học

Xây dựng ứng dụng mạng xã hội chia sẻ phương pháp nấu ăn dinh dưỡng (khóa luận tốt nghiệp)

100 8 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Xây dựng ứng dụng mạng xã hội chia sẻ phương pháp nấu ăn dinh dưỡng
Tác giả Trương Bá Cường, Trương Hữu Minh Đức
Người hướng dẫn Ths. Lê Thanh Trọng
Trường học Đại học Quốc gia TP. Hồ Chí Minh
Chuyên ngành Kỹ thuật phần mềm
Thể loại khóa luận tốt nghiệp
Năm xuất bản 2022
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 100
Dung lượng 4,73 MB

Cấu trúc

  • Chương 1. MỞ ĐẦU (0)
    • 1.1. Lí do chọn đề tài (17)
    • 1.2. Mục đích (17)
    • 1.3. Đối tượng (18)
    • 1.4. Phạm vi nghiên cứu (18)
  • Chương 2. TỔNG QUAN ĐỀ TÀI (0)
    • 2.1. Thực trạng bài toán (20)
    • 2.2. Khảo sát ứng dụng (21)
      • 2.2.1. Ứng dụng CookBook – Nấu ăn ngon mỗi ngày (21)
      • 2.2.2. Ứng dụng I’m hungry (23)
    • 2.3. Vấn đề tồn tại và hướng giải quyết (24)
      • 2.3.1. Vấn đề tồn tại (24)
      • 2.3.2. Hướng giải quyết (24)
  • Chương 3. CƠ SỞ LÝ THUYẾT (0)
    • 3.1. Tổng quan về Flutter (25)
      • 3.1.1. Khái niệm (25)
      • 3.1.2. Kiến trúc (25)
    • 3.2. Tổng quan về Dart (26)
      • 3.2.1. Khái niệm (26)
      • 3.2.2. Đặc điểm (26)
    • 3.3. Tổng quan về Firebase (27)
      • 3.3.1. Khái niệm (27)
      • 3.3.2. Lịch sử phát triển (27)
      • 3.3.3. Cách thức hoạt động (27)
        • 3.3.3.1. Firebase Realtime Database (27)
        • 3.3.3.2. Firebase Authentication (28)
        • 3.3.3.3. Firebase storage (28)
        • 3.3.3.4. Firebase Cloud Messaging (29)
      • 3.3.4. Tổng quan về NestJs (29)
      • 3.3.5. Tổng quan về Postgresql (29)
  • Chương 4. HIỆN THỰC HỆ THỐNG (0)
    • 4.1. Phân tích yêu cầu hệ thống (31)
      • 4.1.1. Yêu cầu chức năng (31)
        • 4.1.1.1. Yêu cầu lưu trữ (31)
        • 4.1.1.2. Yêu cầu về tính năng (31)
      • 4.1.2. Phân tích yêu cầu phi chức năng (31)
      • 4.1.3. Phân tích yêu cầu người dùng (32)
        • 4.1.3.1. Mô hình Use case toàn hệ thống (33)
        • 4.1.3.2. Danh sách các Actor (33)
        • 4.1.3.3. Danh sách các Use case (34)
    • 4.2. Phân tích thiết kế hệ thống (37)
      • 4.2.1. Thiết kế xử lý (37)
        • 4.2.1.1. Sơ đồ tuần tự Đăng ký (37)
        • 4.2.1.2. Sơ đồ tuần tự Đăng nhập (39)
        • 4.2.1.3. Sơ đồ tuần tự Đăng nhập với Google account (40)
        • 4.2.1.4. Sơ đồ tuần tự Quên mật khẩu (41)
        • 4.2.1.5. Sơ đồ tuần tự Thay đổi mật khẩu (42)
        • 4.2.1.6. Sơ đồ tuần tự cập nhật thông tin (43)
        • 4.2.1.7. Sơ đồ tuần tự Upload file (44)
        • 4.2.1.8. Sơ đồ tuần tự Tạo bài viết (45)
        • 4.2.1.9. Sơ đồ tuần tự Cập nhật bài viết (46)
        • 4.2.1.10. Sơ đồ tuần tự Lưu bài viết (47)
        • 4.2.1.11. Sơ đồ tuần tự Tạo món ăn (48)
        • 4.2.1.12. Sơ đồ tuần tự Lưu món ăn (49)
        • 4.2.1.13. Sơ đồ tuần tự Đánh giá món ăn (50)
        • 4.2.1.14. Sơ đồ tuần tự Yêu thích bài viết (51)
        • 4.2.1.15. Sơ đồ tuần tự Bình luận cho bài viết, hướng dẫn nấu ăn (52)
        • 4.2.1.16. Sơ đồ tuần tự Tạo album (53)
        • 4.2.1.17. Sơ đồ tuần tự Nhắn tin với người dùng (54)
        • 4.2.1.18. Sơ đồ tuần tự Trò chuyện với chatbot (55)
        • 4.2.1.19. Sơ đồ tuần tự Duyệt món ăn (56)
        • 4.2.1.20. Sơ đồ tuần tự Tạo mới đơn vị (57)
        • 4.2.1.21. Sơ đồ tuần tự Tạo mới nguyên liệu (58)
        • 4.2.1.22. Sơ đồ tuần tự Tạo chủ đề mới (59)
      • 4.2.2. Thiết kế dữ liệu (60)
        • 4.2.2.1. Sơ đồ cơ sở dữ liệu (60)
        • 4.2.2.2. Danh sách các bảng dữ liệu (61)
        • 4.2.2.3. Chi tiết các bảng dữ liệu (62)
      • 4.2.3. Thiết kế kiến trúc hệ thống (84)
      • 4.2.4. Thiết kế giao diện (85)
        • 4.2.4.1. Danh sách màn hình (85)
        • 4.2.4.2. Giao diện một số màn hình của ứng dụng (87)
    • 4.3. Triển khai hệ thống (95)
  • Chương 5. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN (0)
    • 5.1. Đánh giá (98)
      • 5.1.1. Thuận lợi (98)
      • 5.1.2. Khó khăn (98)
    • 5.2. Kết quả đạt được (98)
    • 5.3. Hướng phát triển (99)

Nội dung

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

Ngày đăng: 16/06/2022, 21:08

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w