PHÂN TÍCH HỆ THỐNG
Sơ đồ Use case tổng quát
Đặc tả use case, Activities Diagram
Liên quan đến yêu cầu
(Exception) f) Cập nhật thông tin
(Exception) h) Tìm kiếm món ăn
22 i) Xem chi tiết món ăn
23 j) Xoá món ăn đã tạo
Hậu điều kiện Ngoại lệ
Lỗi kết nối tới CSDL m) Xoá món ăn đã lưu
Mục tiêuTiền điều kiệnLuồng hoạt động
(Exception) n) Xem món đã lưu
(Exception) o) Xem danh sách món ăn đã tạo
(Exception) q) Bỏ thích món ăn
(Exception) u) Báo cáo bình luận
(Exception) v) Tìm kiếm người dùng
(Exception) y) Chia sẻ món ăn
Mục tiêu Tiền điều kiện
Hậu điều kiệnNgoại lệ
(Exception) aa) Xem thông báo
40 ab) Xem trang cá nhân người dùng
3 Quản trị viên a) Thêm quản trị viên
42 b) Xem thông tin thành viên
44 d) Xem món ăn được đăng
- Hệ thống gặp sự cố e) Xóa món ăn
(Exception) g) Xử lý sai phạm
2 Người dùng a) Đăng nhập b) Quên mật khẩu
51 c) Đổi mật khẩu d) Đăng xuất
52 e) Xóa tài khoản f) Cập nhật thông tin
53 g) Đăng tải món ăn h) Tìm kiếm món ăn
54 i) Xem chi tiết món ăn j) Xoá món ăn đã tạo
55 k) Sửa món ăn l) Lưu món ăn
56 m) Xoá món ăn đã lưu n) Xem món đã lưu
57 o) Xem danh sách món ăn đã tạo p) Thích món ăn
58 q) Bỏ thích món ăn r) Bình luận món ăn s) Xóa bình luận
60 u) Báo cáo bình luận v) Tìm kiếm người dùng
61 w) Follow người dùng x) Unfollow người dùng
62 y) Chia sẻ món ăn z) Feedback
63 aa) Xem thông báo ab) Xem trang cá nhân người dùng
3 Quản trị viên a) Thêm quản trị viên b) Xem thông tin thành viên
65 c) Xóa thành viên d) Xem món ăn được đăng
66 e) Xóa món ăn f) Nhận Feedback
Robustness Diagram
2 Người dùng a) Đăng nhập b) Quên mật khẩu
51 c) Đổi mật khẩu d) Đăng xuất
52 e) Xóa tài khoản f) Cập nhật thông tin
53 g) Đăng tải món ăn h) Tìm kiếm món ăn
54 i) Xem chi tiết món ăn j) Xoá món ăn đã tạo
55 k) Sửa món ăn l) Lưu món ăn
56 m) Xoá món ăn đã lưu n) Xem món đã lưu
57 o) Xem danh sách món ăn đã tạo p) Thích món ăn
58 q) Bỏ thích món ăn r) Bình luận món ăn s) Xóa bình luận
60 u) Báo cáo bình luận v) Tìm kiếm người dùng
61 w) Follow người dùng x) Unfollow người dùng
62 y) Chia sẻ món ăn z) Feedback
63 aa) Xem thông báo ab) Xem trang cá nhân người dùng
3 Quản trị viên a) Thêm quản trị viên b) Xem thông tin thành viên
65 c) Xóa thành viên d) Xem món ăn được đăng
66 e) Xóa món ăn f) Nhận Feedback
THIẾT KẾ HỆ THỐNG
Các lớp Boundary, Control, Entity
- Giao diện xem chi tiết món
- Giao diện xem thông báo
- Giao diện thêm món ăn
- Giao diện xem các món ăn đã tạo
- Giao diện xem các món ăn đã lưu
+ Account: bảng chứa dữ liệu về thông tin tài khoản người dùng.
+ User: bảng chứa dữ liệu về thông tin cá nhân người dùng.
+ Comment: bảng chứa dữ liệu về bình luận của người dùng.
+ Like: bảng chứa dữ liệu về sự kiện thích bài viết của người dùng.
+ Notification bảng chứa dữ liệu về thông báo.
+ Post: bảng chứa dữ liệu về bài đăng món ăn.
+ Follow: bảng chứa dữ liệu về sự kiện theo dõi người dùng
+ CreatedPost: bảng chứa dữ liệu về các món ăn đã tạo.
+ SavedPost: bảng chứa dữ liệu về món ăn đã lưu.
+ Photo: bảng chứa dữ liệu về thông tin của ảnh trong hệ thống, bao gồm ảnh trong bài đăng và ảnh đại diện của người dùng.
+ Report: bảng chứa dữ liệu về các báo cáo của người dùng.
+ Feedback: bảng chứa dữ liệu về các phản hồi của người dùng.
Class Diagram
2 Mô tả Class Diagram a Tài khoản Định nghĩa
Phương thức deleteAccount(email: string, password: string) xử lý việc xoá tài khoản người dùng, yêu cầu nhập email và mật khẩu để xác minh danh tính của người yêu cầu.
+ forgot(email: string): phương thức cho phép người dùng lấy lại mật khẩu đã quên.
Phương thức changePassword(oldPassword: string, newPassword: string) cho phép người dùng thực hiện việc đặt lại mật khẩu của mình Nó yêu cầu hai tham số: mật khẩu cũ và mật khẩu mới.
Phương thức getUser Info(uId: string) cho phép lấy thông tin người dùng, với tham số uId là userId của người cần lấy thông tin Nếu không cung cấp tham số, hàm sẽ tự động trả về thông tin của người dùng đang đăng nhập.
- userId: id người dùng Thuộc tính
- foodList: danh sách món ăn đã lưu của người dùng.
Phương thức + getSavedFood(): phương thức trả về các món ăn đã lưu của người dùng Không có tham số nhận vào
Phương thức `deleteFoodSaved(foodId: string)` cho phép người dùng xoá một món ăn khỏi danh sách đã lưu Tham số `foodId` là định danh của món ăn cần được xoá.
- userId: id định danh của người dùng.
- foodList: danh sách các món đã tạo của người dùng.
+ getCreatedFood : phương thức cho phép người dùng xem Phương thức danh sách các món ăn mà người dùng đó đã đăng tải trên ứng dụng
Hàm không có tham số nhận vào, trả về các báo cáo chưa được xử lý. f Phản hồi Định nghĩa
76 hồi chưa được xử lý. g Quản trị viên Định nghĩa Thuộc tính Phương thức
+ addMember(): Quản trị viên thêm thành viên vào hệ thống
+ deleteMember(): Quản trị viên xóa thành viên ra khỏi hệ thống h Món ăn Định nghĩa
The `deleteComment(commentId: string)` method is designed to handle the deletion of a comment It takes a single parameter, `commentId`, which represents the ID of the comment to be removed Upon execution, it returns the deleted comment.
Phương thức + like(foodId: string) cho phép người dùng bày tỏ sự yêu thích một món ăn bằng cách cung cấp foodId, tức là ID của món ăn đó Khi thực hiện, phương thức sẽ trả về một đối tượng Thích mới được tạo ra.
Phương thức unlike(foodId: string) được sử dụng để xóa một bình luận Tham số foodId đại diện cho ID của món ăn mà người dùng muốn bỏ thích Khi thực hiện, phương thức này sẽ trả về đối tượng Like đã bị xóa.
Phương thức follow(targetId: string) cho phép người dùng theo dõi một người dùng khác bằng cách nhận vào tham số targetId, tức là ID của người mà họ muốn theo dõi Sau khi thực hiện, phương thức sẽ trả về một đối tượng Follow vừa được tạo.
Phương thức unfollow(targetId: string) cho phép người dùng hủy theo dõi một người dùng khác Tham số targetId là ID của người mà người dùng muốn bỏ theo dõi Khi thực hiện, phương thức này sẽ trả về đối tượng Follow đã bị xóa.
83 tương ứng với bản ghi đã bị xoá trong CSDL m Thông báo Định nghĩa
Thuộc tính khác rỗng, thông báo được tạo ra do có người đã thích bài viết đã đăng của người dùng
- seen: boolean, là trạng thái đã đọc của thông báo
- time: Date, là thời gian thông báo được tạo ra.
Phương thức getNotifications(skip: number, limit: number) cho phép người dùng lấy các thông báo từ hệ thống Tham số skip xác định số lượng thông báo cần bỏ qua, trong khi limit chỉ định số lượng thông báo muốn nhận Kết quả trả về là một mảng chứa các thông báo.
Hàm createNotification(commentId: string, followId: string, likeId: string) được sử dụng để tạo một đối tượng Notification mới Tham số commentId là id của bình luận, nếu không null, thông báo sẽ được tạo ra khi có người bình luận vào bài viết của người dùng Tham số followId là id của đối tượng Follow, nếu không rỗng, thông báo sẽ xuất hiện khi có người theo dõi người dùng Cuối cùng, tham số likeId là id của đối tượng Like, nếu không rỗng, thông báo sẽ được tạo ra khi có người thích bài viết của người dùng Phương thức này trả về đối tượng Notification mới được tạo.
The `deleteNotification` function allows for the removal of specific notifications by creating a Notification object It takes four parameters: `notificationId`, which is the ID of the notification to be deleted; `commentId`, which, if not null, will delete notifications related to that specific comment; `followId`, which, if not empty, will remove notifications associated with the follow action; and `likeId`, which serves a similar purpose for likes By utilizing these parameters, users can effectively manage and delete notifications as needed.
85 quan đến followId và likeId: là chuỗi ID của đối tượng Like Nếu thuộc tính này không rỗng, hệ thống sẽ thực hiện việc xoá các thông báo liên quan đến likeId và trả về danh sách những thông báo đã bị xoá.
Giao diện người dùng (UI) được nhóm thiết kế của chúng tôi phác thảo, mô tả và hoàn thiện trên nền tảng Figma Bạn có thể tham khảo thiết kế của chúng tôi qua liên kết Figma sau: [HappyCook](https://www.figma.com/file/wjlP19uVvY4Fd77bEswKvR/HappyCook?node-id$4%3A81).
Dưới đây là ảnh chụp của các trang thiết kế:
2 Người dùng a) Đăng nhập b) Quên mật khẩu
87 c) Đổi mật khẩu d) Đăng xuất
88 e) Xóa tài khoản f) Cập nhật thông tin
89 g) Đăng tải món ăn h) Tìm kiếm món ăn
90 i) Xem chi tiết món ăn j) Xoá món ăn đã tạo
91 k) Sửa món ăn l) Lưu món ăn
92 m) Xoá món ăn đã lưu n) Xem món đã lưu
93 o) Xem danh sách món ăn đã tạo p) Thích món ăn
94 q) Bỏ thích món ăn r) Bình luận món ăn
95 s) Xóa bình luận t) Báo cáo món ăn
96 u) Báo cáo bình luận v) Tìm kiếm người dung
97 w) Follow người dung x) Unfollow người dung
98 y) Chia sẻ món ăn z) Feedback
99 aa) Xem thông báo ab) Xem trang cá nhận người dùng
3 Quản trị viên a) Trang chủ của quản trị viên b) Trang quản lý thành viên
101 c) Xem danh sách món ăn được đăng d) Trang danh sách phản hồi
103 e) Danh sách báo cáo vi phạm
2 Người dùng a) Đăng nhập b) Quên mật khẩu
106 c) Đổi mật khẩu d) Đăng xuất
107 e) Xóa tài khoản f) Cập nhật thông tin
108 g) Đăng tải món ăn h) Tìm kiếm món ăn
109 i) Xem chi tiết món ăn j) Xoá món ăn đã tạo
110 k) Sửa món ăn l) Lưu món ăn
111 m) Xoá món ăn đã lưu n) Xem món đã lưu
112 o) Xem danh sách món ăn đã tạo p) Thích món ăn
113 q) Bỏ thích món ăn r) Bình luận món ăn
114 s) Xóa bình luận t) Báo cáo món ăn
115 u) Báo cáo bình luận v) Tìm kiếm người dùng
116 w) Follow người dùng x) Unfollow người dùng
117 y) Chia sẻ món ăn z) Feedback
118 aa) Xem thông báo ab) Xem trang cá nhân người dùng
3 Quản trị viên a) Thêm quản trị viên b) Xem thông tin thành viên
120 c) Xem món ăn được đăng
121 d) Xóa món ăn e) Nhận Feedback
Sequence Diagram
2 Người dùng a) Đăng nhập b) Quên mật khẩu
106 c) Đổi mật khẩu d) Đăng xuất
107 e) Xóa tài khoản f) Cập nhật thông tin
108 g) Đăng tải món ăn h) Tìm kiếm món ăn
109 i) Xem chi tiết món ăn j) Xoá món ăn đã tạo
110 k) Sửa món ăn l) Lưu món ăn
111 m) Xoá món ăn đã lưu n) Xem món đã lưu
112 o) Xem danh sách món ăn đã tạo p) Thích món ăn
113 q) Bỏ thích món ăn r) Bình luận món ăn
114 s) Xóa bình luận t) Báo cáo món ăn
115 u) Báo cáo bình luận v) Tìm kiếm người dùng
116 w) Follow người dùng x) Unfollow người dùng
117 y) Chia sẻ món ăn z) Feedback
118 aa) Xem thông báo ab) Xem trang cá nhân người dùng
3 Quản trị viên a) Thêm quản trị viên b) Xem thông tin thành viên
120 c) Xem món ăn được đăng
121 d) Xóa món ăn e) Nhận Feedback
CÀI ĐẶT, TRIỂN KHAI HỆ THỐNG
Cài đặt cơ sở dữ liệu
Dựa trên sơ đồ lớp (Class Diagram), nhóm đã xây dựng cơ sở dữ liệu sử dụng MongoDB, một hệ quản trị cơ sở dữ liệu NoSQL Trong quá trình này, nhóm đã tạo ra tổng cộng 12 bảng để đáp ứng nhu cầu của dự án.
+ Account: bảng chứa dữ liệu về thông tin tài khoản người dùng.
+ User: bảng chứa dữ liệu về thông tin cá nhân người dùng.
+ Comment: bảng chứa dữ liệu về bình luận của người dùng.
+ Like: bảng chứa dữ liệu về sự kiện thích bài viết của người dùng.
+ Notification bảng chứa dữ liệu về thông báo.
+ Post: bảng chứa dữ liệu về bài đăng món ăn.
+ Follow: bảng chứa dữ liệu về sự kiện theo dõi người dùng
+ CreatedPost: bảng chứa dữ liệu về các món ăn đã tạo.
+ SavedPost: bảng chứa dữ liệu về món ăn đã lưu.
+ Photo: bảng chứa dữ liệu về thông tin của ảnh trong hệ thống, bao gồm ảnh trong bài đăng và ảnh đại diện của người dùng.
+ Report: bảng chứa dữ liệu về các báo cáo của người dùng.
+ Feedback: bảng chứa dữ liệu về các phản hồi của người dùng.
Cài đặt lớp điều khiển
Để đảm bảo cơ sở dữ liệu giao tiếp hiệu quả với người dùng, nhóm chúng tôi đã triển khai lớp điều khiển bằng Node.js Lớp này bao gồm ba thành phần chính: nhận yêu cầu từ người dùng, xử lý dữ liệu và giao tiếp với cơ sở dữ liệu.
Để giao tiếp hiệu quả với người dùng, nhóm chúng tôi đã cài đặt lớp boundary bằng cách triển khai giao diện người dùng dựa trên các mẫu thiết kế đã được xác định Chúng tôi sử dụng React Native để xây dựng ứng dụng, đảm bảo tính tương tác và trải nghiệm người dùng tốt nhất.