Tải bản đầy đủ (.pdf) (76 trang)

đồ án 1 fastfood ingredients selection online application

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.26 MB, 76 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINHTRƯỜNG ĐẠI HỌC CƠNG NGHỆ THƠNG TIN</b>

<b>SV THỰC HIỆN: 20520151 - Phạm Nhựt Danh </b>

<b>TP. HỒ CHÍ MINH, 12/2023</b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>LỜI CẢM ƠN </b>

Sự phát triển như vũ bão của công nghệ tông tin (CNTT) đã tác động mạnh mẽ và to lớn đến mọi mặt đời sống kinh tế xã hội. Ngày nay, CNTT đã trở thành một trong những động lực quan trọng nhất của sự phát triển. Với khả năng số hóa mọi loại thơng tin, máy tính trở thành phương tiện xử lý thông tin thống nhất và đa năng, thực hiện được nhiều chức năng khác nhau trên mọi dạng thông tin thuộc mọi lĩnh vực như: nghiên cứu, quản lý, kinh doanh, giáo dục, ...

Những ứng dụng của CNTT trong lĩnh vực quản lý là những ứng dụng vô cùng quan trọng. Nó khơng những giải phóng cơng sức cho những người quản lý mà còn đem lại sự chính xác và nhanh nhạy trong quản lý.

Là sinh viên CNTT, trong đồ án môn Đồ án 1 này, em đã chọn và thực hiện đồ án “FASTFOOD INGREDIENT SELECTION ONLINE APPLICATION”.

Em xin gửi lời cảm ơn chân thành đến Cô Nguyễn Thị Xuân Hương đã tận tình giảng dạy, hướng dẫn em trong suốt thời gian học vừa qua.

Do kiến thức và thời gian thực hiện hạn chế, đồ án của em vẫn còn nhiều thiếu sót. Em rất mong nhận được góp ý của Cơ để đồ án của em được hồn thiện.

<b>Sinh viên thực hiện </b>

<b>PHẠM NHỰT DANH </b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

1.4. Đối tượng nghiên cứu ... 4

1.5. Phương pháp nghiên cứu ... 4

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

3.1.2. Phân loại người dùng ... 17

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

5.2. Nhược điểm ... 695.3. Hướng phát triển ... 695.4. Source code ... 69

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

1

<b>TÓM TẮT ĐỒ ÁN </b>

Đồ án chủ yếu xây dựng ứng dụng đặt món ăn cho phép người dùng đặt món ăn từ các nhà hàng trực tuyến nhưng thay vì chọn món ăn hồn chỉnh thì người dùng có thể chọn các thành phần và tự phối hợp các thành phần của món ăn theo ý thích hoặc nhu cầu của bản thân. Ứng dụng này có các tính năng cơ bản sau:

Ứng dụng được phát triển nhằm giúp người dùng tiết kiệm thời gian và công sức, tăng sự lựa chọn, và tiết kiệm tiền. Ngồi ra cịn giúp cho người dùng có nhu cầu kinh doanh về những món ăn nhanh.

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<b>1.2. Lý do chọn đề tài </b>

• Ứng dụng đặt món ăn là một mơ hình kinh doanh mới nổi trong những năm gần đây, và đang ngày càng trở nên phổ biến. Thị trường đặt món ăn qua ứng dụng đang phát triển nhanh chóng, với sự tham gia của nhiều doanh nghiệp lớn và nhỏ. Do đó, việc nghiên cứu về ứng dụng đặt món ăn có tính cấp thiết cao, nhằm đáp ứng nhu cầu tìm hiểu và giải quyết các vấn đề của ứng dụng đặt món ăn. • Ứng dụng đặt món ăn có tác động trực tiếp đến đời sống của người dân, giúp

người dùng tiết kiệm thời gian và công sức, tăng sự lựa chọn, và tiết kiệm tiền. Do đó, việc nghiên cứu về ứng dụng đặt món ăn có tính thực tiễn cao, nhằm góp phần phát triển ứng dụng đặt món ăn, mang lại lợi ích cho người dùng và các doanh nghiệp liên quan.

• Nghiên cứu về ứng dụng đặt món ăn có thể ứng dụng trong nhiều lĩnh vực, chẳng hạn như kinh doanh, công nghệ thông tin, và marketing. Do đó, việc nghiên cứu về ứng dụng đặt món ăn có tính ứng dụng cao, giúp các doanh nghiệp và tổ chức có thể phát triển các ứng dụng đặt món ăn hiệu quả hơn.

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

3

• Cụ thể, đối với cá nhân em, việc chọn đề tài ứng dụng đặt món ăn là do em quan tâm đến lĩnh vực công nghệ thông tin và marketing. Em thấy rằng ứng dụng đặt món ăn là một ứng dụng cơng nghệ có nhiều tiềm năng phát triển, và có tác động tích cực đến đời sống của người dân. Do đó, em muốn nghiên cứu sâu hơn về ứng dụng đặt món ăn, để hiểu rõ hơn về các vấn đề của ứng dụng, và đề xuất các giải pháp để phát triển ứng dụng đặt món ăn hiệu quả hơn.

• Ngồi ra, em cũng thấy rằng đây là một đề tài có tính ứng dụng cao. Các nghiên cứu về ứng dụng đặt món ăn có thể được ứng dụng trong việc phát triển các ứng dụng đặt món ăn mới, hoặc cải thiện các ứng dụng đặt món ăn hiện có. Do đó, em hy vọng rằng những nghiên cứu của mình sẽ góp phần phát triển ứng dụng đặt món ăn, mang lại lợi ích cho người dùng và các doanh nghiệp liên quan.

<b>1.3. Phạm vi nghiên cứu </b>

- Ứng dụng gồm những tính năng chính như: o Chức năng đăng nhập/đăng ký. o Quản lý thông tin cửa hàng.

o Quản lý thơng tin khách hàng, các món ăn u thích. o Tìm kiếm và xem chi tiết thơng tin sản phẩm, cửa hàng. o Quản lý thông tin sản phẩm và thành phần của chúng. o Thêm vào giỏ hàng, đặt món, thanh tốn.

o Đánh giá món ăn.

- Ứng dụng này là ứng dụng di động được xây dựng dựa trên công nghệ React Native cho giao diện di động và backend cho ứng dụng này là Nodejs.

- Xây dựng cơ sở dữ liệu cho ứng dụng một cách triệt để.

- Sử dụng Apollo server để tạo API cho phần backend, và dùng Graphql để gọi API từ backend.

- Tạo chức năng thanh toán bằng Stripe.

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

Authentication, Cloudinary, Stripe.

Đối tượng nghiên cứu trong phạm vi đề tài bao gồm:

- Người có nhu cầu tìm kiếm và đặt món ăn/thành phần theo nhu cầu của bản thân.

- Người có nhu cầu kinh doanh những món ăn nhanh và thành phần của chúng. - Người quản trị (admin) là duy nhất, là người sở hữu ứng dụng này và có khả

năng quản lý các tài khoản và xử lý vi phạm.

<b>1.5. Phương pháp nghiên cứu </b>

- Tìm hiểu quy trình chi tiết của việc đặt món, từ việc đặt món hàng đến cách quản lý những đơn đặt hàng.

- Tham khảo cách thức làm việc của những ứng dụng đặt món nổi bật hiện nay như: Foody, ShopeeFood…

- Tham khảo và tiếp nhận ý kiến đóng góp từ GVHD để từ đó chỉnh sửa và hồn thiện sản phầm hơn.

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

5

<b>Chương 2. CÔNG NGHỆ SỬ DỤNG </b>

<b>2.1. React Native </b>

• React Native là một framework phát triển ứng dụng di động đa nền tảng cho phép các nhà phát triển tạo ứng dụng cho iOS và Android bằng JavaScript và React. Nó được phát triển bởi Facebook và phát hành vào năm 2015. React Native đã trở nên phổ biến nhờ khả năng tạo ra các ứng dụng hiệu suất cao với giao diện và cảm giác như ứng dụng gốc.

• Các tính năng chính của React Native:

o Phát triển đa nền tảng: Viết một lần, chạy trên cả iOS và Android.

o Hiệu suất gốc: Ứng dụng có cảm giác và hiệu suất như ứng dụng gốc. o Hot reloading: Xem các thay đổi được phản ánh trong ứng dụng gần

như ngay lập tức, giúp tăng tốc quá trình phát triển.

o Cộng đồng lớn: Lợi ích từ một loạt tài nguyên, thư viện và hỗ trợ.

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

6

• React Native sử dụng một mơ hình "tích hợp gốc" để tạo các ứng dụng di động. Điều này có nghĩa là nó sử dụng các thành phần gốc của nền tảng để tạo giao diện người dùng của ứng dụng.

1. Các nhà phát triển viết mã bằng JavaScript và React.

2. React Native dịch mã thành các thành phần gốc cho từng nền tảng.

3. Các thành phần gốc hiển thị giao diện người dùng của ứng dụng trên thiết bị.

• React Native có một kiến trúc đơn giản, bao gồm ba thành phần chính:

o Luồng JavaScript: Chạy mã JavaScript và giao tiếp với các mô-đun gốc.

o Các mô-đun gốc: Cung cấp quyền truy cập vào các tính năng dành riêng cho nền tảng như camera, GPS, v.v.

o Cầu: Giúp tạo điều kiện giao tiếp giữa luồng JavaScript và các mơ-đun gốc.

• React Native đã được sử dụng để xây dựng một số ứng dụng phổ biến, bao gồm:

<small>o </small> Facebook

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<small>o </small> Hiệu suất gốc: Ứng dụng có cảm giác và hiệu suất như ứng dụng gốc.

<small>o </small> Cộng đồng lớn: Truy cập tài nguyên, thư viện và hỗ trợ.

<small>o </small> Tiết kiệm chi phí: Phát triển cho cả hai nền tảng với mã cơ sở duy nhất.

• React Native cũng có một số hạn chế, bao gồm:

o Phức tạp: Có thể phức tạp hơn để học hơn so với phát triển gốc truyền thống.

o Truy cập hạn chế vào các tính năng gốc: Một số tính năng gốc có thể khơng khả dụng hoặc không được hỗ trợ đầy đủ.

o Gỡ lỗi có thể là một thách thức: Gỡ lỗi có thể khó khăn hơn do bản chất đa nền tảng của khung.

<b>2.2. Nodejs, Heroku 2.2.1. Nodejs </b>

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

8

<b>2.2.2. Heroku </b>

• Heroku là một nền tảng đám mây như một dịch vụ (PaaS) cho phép các nhà phát triển xây dựng, triển khai và quản lý các ứng dụng web và di động. Nó cung cấp một loạt các tính năng và dịch vụ, bao gồm:

<small>o </small> Tự động hóa triển khai: Heroku tự động triển khai các ứng dụng của bạn lên đám mây khi bạn thực hiện thay đổi.

<small>o </small> Quản lý cơ sở hạ tầng: Heroku quản lý cơ sở hạ tầng của bạn, chẳng hạn như máy chủ, bộ nhớ và lưu trữ.

<small>o </small> Scale-on-demand: Heroku có thể tự động mở rộng ứng dụng của bạn để đáp ứng nhu cầu của người dùng.

<small>o </small> Công cụ phát triển: Heroku cung cấp các cơng cụ phát triển, chẳng hạn như trình quản lý gói và trình gỡ lỗi.

• Heroku hoạt động bằng cách cung cấp một nền tảng đám mây cho phép các nhà phát triển xây dựng, triển khai và quản lý các ứng dụng web và di động. Các nhà phát triển sử dụng các công cụ và dịch vụ của Heroku để tạo ứng dụng của họ, sau đó Heroku tự động triển khai ứng dụng lên đám mây.

• Heroku sử dụng một mơ hình "phần mềm như dịch vụ" (SaaS) để cung cấp các dịch vụ của mình. Điều này có nghĩa là các nhà phát triển chỉ cần trả tiền cho các dịch vụ mà họ sử dụng.

• Heroku cung cấp một số lợi thế so với các nền tảng đám mây khác, bao gồm:

<small>o </small> Sẵn sàng sử dụng: Heroku cung cấp một nền tảng sẵn sàng sử dụng, giúp các nhà phát triển có thể bắt đầu xây dựng ứng dụng của họ ngay lập tức.

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

9

<small>o </small> Tự động hóa: Heroku tự động triển khai các ứng dụng của bạn lên đám mây và tự động mở rộng ứng dụng của bạn để đáp ứng nhu cầu của người dùng.

<small>o </small> Dễ sử dụng: Heroku cung cấp một giao diện người dùng trực quan giúp các nhà phát triển dễ dàng quản lý các ứng dụng của họ.

• Heroku cũng có một số nhược điểm, bao gồm:

<small>o </small> Chi phí: Heroku có thể tốn kém hơn các nền tảng đám mây khác.

<small>o </small> Khả năng tùy chỉnh: Heroku cung cấp ít khả năng tùy chỉnh hơn các nền tảng đám mây khác.

<small>o </small> Đối tượng: Heroku phù hợp nhất cho các ứng dụng web và di động nhỏ đến trung bình.

<b>2.3. Graphql, Apollo Server 2.3.1. Graphql </b>

<b>2.3.2. Apollo Server </b>

• Apollo Server là một triển khai máy chủ GraphQL mã nguồn mở được xây dựng trên Node.js. Nó cung cấp một loạt các tính năng và dịch vụ giúp việc xây dựng các API GraphQL trở nên dễ dàng và nhanh chóng hơn.

• Apollo Server được đặc trưng bởi các tính năng sau:

<small>o </small> Tương thích với GraphQL: Apollo Server tuân thủ hoàn toàn các tiêu chuẩn GraphQL.

<small>o </small> Tính hiệu quả: Apollo Server được thiết kế để hiệu quả về mặt tài nguyên và có thể xử lý nhiều truy vấn cùng một lúc.

<small>o </small> Khả năng mở rộng: Apollo Server có thể được mở rộng để đáp ứng nhu cầu của các ứng dụng lớn.

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

10

<small>o </small> Cộng đồng lớn: Apollo Server có một cộng đồng lớn và tích cực hỗ trợ các nhà phát triển.

• Apollo Server đã được sử dụng bởi một số công ty lớn, bao gồm:

• Apollo Server có một kiến trúc đơn giản, bao gồm ba thành phần chính:

<small>o </small> Engine: Engine là thành phần chính của Apollo Server. Nó chịu trách nhiệm xử lý các truy vấn GraphQL và trả về dữ liệu.

<small>o </small> Resolvers: Resolvers là các hàm được sử dụng để lấy dữ liệu từ cơ sở dữ liệu hoặc các nguồn khác.

<small>o </small> Schema: Schema là định nghĩa cho các loại dữ liệu và mối quan hệ giữa chúng.

• Apollo Server cung cấp một số lợi thế so với các triển khai máy chủ GraphQL khác, bao gồm:

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

11

<small>o </small> Tương thích với GraphQL: Apollo Server tuân thủ hồn tồn các tiêu chuẩn GraphQL. Điều này có nghĩa là các ứng dụng khách GraphQL có thể tương tác với bất kỳ API GraphQL được triển khai bởi Apollo Server.

<small>o </small> Tính hiệu quả: Apollo Server được thiết kế để hiệu quả về mặt tài nguyên và có thể xử lý nhiều truy vấn cùng một lúc. Điều này có thể giúp cải thiện hiệu suất của các ứng dụng GraphQL.

<small>o </small> Khả năng mở rộng: Apollo Server có thể được mở rộng để đáp ứng nhu cầu của các ứng dụng lớn. Điều này có thể giúp các ứng dụng GraphQL phát triển theo thời gian.

<small>o </small> Cộng đồng lớn: Apollo Server có một cộng đồng lớn và tích cực hỗ trợ các nhà phát triển. Điều này có nghĩa là có nhiều tài nguyên có sẵn để giúp các nhà phát triển học cách sử dụng Apollo Server và giải quyết các vấn đề.

• Apollo Server cũng có một số nhược điểm, bao gồm:

<small>o </small> Học hỏi: Apollo Server có thể khó học hơn các triển khai máy chủ GraphQL khác.

<small>o </small> Hỗ trợ: Apollo Server vẫn còn là một cơng nghệ mới, vì vậy có thể khơng có nhiều hỗ trợ cho nó như các triển khai máy chủ GraphQL khác.

<b>2.4. PostgreSQL, PrismaORM, AWS RDS 2.5. Firebase Authentication </b>

• Firebase Authentication là một dịch vụ xác thực được cung cấp bởi Firebase, một nền tảng phát triển ứng dụng di động và web của Google. Nó cho phép các nhà phát triển dễ dàng thêm xác thực người dùng vào ứng dụng của họ mà không cần phải xây dựng và quản lý cơ sở hạ tầng xác thực của riêng họ.

• Các tính năng chính của Firebase Authentication bao gồm:

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

12

<small>o </small> Hỗ trợ nhiều nhà cung cấp xác thực: Firebase Authentication hỗ trợ nhiều nhà cung cấp xác thực, bao gồm email và mật khẩu, số điện thoại,

Google, Facebook, Twitter, GitHub, và nhiều nhà cung cấp khác.

<small>o </small> Xác thực không cần máy chủ: Firebase Authentication sử dụng xác thực không cần máy chủ, điều này có nghĩa là các nhà phát triển khơng cần phải triển khai và quản lý máy chủ xác thực của riêng họ.

<small>o </small> SDK dễ sử dụng: Firebase Authentication cung cấp các SDK dễ sử dụng cho các nền tảng phổ biến, bao gồm iOS, Android, Web và Unity.

<small>o </small> Quản lý người dùng: Firebase Authentication cung cấp các tính năng để quản lý người dùng, chẳng hạn như tạo, xóa và cập nhật người dùng.

<small>o </small> Bảo mật: Firebase Authentication sử dụng các biện pháp bảo mật mạnh mẽ để bảo vệ dữ liệu người dùng.

• Cách thức hoạt động của Firebase Authentication:

1. Người dùng đăng nhập bằng một nhà cung cấp xác thực: Người dùng chọn nhà cung cấp xác thực và cung cấp thông tin đăng nhập của họ. 2. Firebase Authentication xác thực người dùng: Firebase Authentication

xác thực thông tin đăng nhập của người dùng với nhà cung cấp xác thực. 3. Firebase Authentication tạo một token xác thực: Nếu xác thực thành

công, Firebase Authentication sẽ tạo một token xác thực. Token này có thể được sử dụng để xác thực người dùng trong các yêu cầu tiếp theo. 4. Ứng dụng lưu trữ token xác thực: Ứng dụng lưu trữ token xác thực trong

bộ nhớ cục bộ hoặc trong cơ sở dữ liệu.

5. Ứng dụng sử dụng token xác thực để xác thực các yêu cầu: Khi ứng dụng cần thực hiện một yêu cầu thay mặt cho người dùng, nó sẽ bao gồm token xác thực trong yêu cầu.

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

13

6. Firebase Authentication xác thực token: Firebase Authentication xác thực token xác thực và xác định người dùng được liên kết với token.

• Ưu điểm của Firebase Authentication:

<small>o </small> Dễ sử dụng: Firebase Authentication rất dễ sử dụng và thiết lập.

<small>o </small> Hỗ trợ nhiều nhà cung cấp xác thực: Firebase Authentication hỗ trợ nhiều nhà cung cấp xác thực, giúp người dùng dễ dàng đăng nhập bằng tài khoản mà họ đã có.

<small>o </small> Xác thực khơng cần máy chủ: Firebase Authentication sử dụng xác thực không cần máy chủ, giúp giảm bớt gánh nặng cho các nhà phát triển.

<small>o </small> Bảo mật: Firebase Authentication sử dụng các biện pháp bảo mật mạnh mẽ để bảo vệ dữ liệu người dùng.

• Nhược điểm của Firebase Authentication:

<small>o </small> Giới hạn về số lượng người dùng: Firebase Authentication có giới hạn về số lượng người dùng miễn phí.

<small>o </small> Phụ thuộc vào Firebase: Firebase Authentication phụ thuộc vào nền tảng Firebase, điều này có thể hạn chế khả năng tùy chỉnh.

<b>2.6. Cloudinary </b>

• Cloudinary là một nền tảng quản lý hình ảnh và video đám mây cung cấp các dịch vụ lưu trữ, phân phối, chỉnh sửa và tối ưu hóa hình ảnh và video cho các ứng dụng web và di động. Nó được sử dụng bởi các cơng ty lớn như Airbnb, The New York Times và Spotify.

• Cloudinary cung cấp một loạt các tính năng và dịch vụ, bao gồm:

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

<small>o </small> Tối ưu hóa hình ảnh và video: Cloudinary cung cấp các cơng cụ tối ưu hóa hình ảnh và video để cải thiện hiệu suất và giảm kích thước tệp. • Cloudinary có một số lợi thế so với các nền tảng quản lý hình ảnh và video khác,

• Cloudinary có một kiến trúc đơn giản, bao gồm ba thành phần chính:

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

15

<small>o </small> API: API là thành phần chính của Cloudinary. Nó cung cấp các phương thức để tải lên, lưu trữ, phân phối, chỉnh sửa và tối ưu hóa hình ảnh và video.

<small>o </small> Dịch vụ: Dịch vụ là các dịch vụ mà Cloudinary cung cấp. Chúng bao gồm lưu trữ, phân phối, chỉnh sửa và tối ưu hóa hình ảnh và video.

<small>o </small> Cơ sở hạ tầng: Cơ sở hạ tầng là nơi lưu trữ hình ảnh và video của bạn. • Cloudinary cung cấp một số lợi thế so với các nền tảng quản lý hình ảnh và video

khác, bao gồm:

<small>o </small> Dễ sử dụng: Cloudinary cung cấp một giao diện người dùng trực quan và một API dễ sử dụng. Điều này làm cho nó trở thành một lựa chọn tốt cho các nhà phát triển khơng có kinh nghiệm về quản lý hình ảnh và video.

<small>o </small> Tính linh hoạt: Cloudinary cung cấp một loạt các tính năng và dịch vụ để đáp ứng nhu cầu của các ứng dụng khác nhau. Điều này làm cho nó trở thành một lựa chọn tốt cho các ứng dụng từ nhỏ đến lớn.

<small>o </small> Khả năng mở rộng: Cloudinary có thể được mở rộng để đáp ứng nhu cầu của các ứng dụng lớn. Điều này làm cho nó trở thành một lựa chọn tốt cho các ứng dụng có lưu lượng truy cập cao.

• Cloudinary cũng có một số nhược điểm, bao gồm:

<small>o </small> Chi phí: Cloudinary có thể tốn kém hơn các nền tảng quản lý hình ảnh và video khác.

<small>o </small> Khả năng tùy chỉnh: Cloudinary cung cấp một số tùy chỉnh, nhưng có thể khơng đủ cho các ứng dụng có yêu cầu cụ thể.

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

16

<b>Chương 3. THIẾT KẾ HỆ THỐNG </b>

<b>3.1. Phân tích hệ thống </b>

<small>o </small> Máy khách: Máy khách là ứng dụng được cài đặt trên thiết bị của người dùng.

<small>o </small> Máy chủ: Máy chủ chịu trách nhiệm xử lý các yêu cầu từ máy khách và trả về phản hồi.

<small>o </small> Cơ sở dữ liệu: Cơ sở dữ liệu lưu trữ dữ liệu của hệ thống, chẳng hạn như danh sách cửa hàng, món ăn, đơn đặt hàng, v.v.

<small>o </small> API: API cung cấp các dịch vụ cho máy khách.

<small>• </small> Các yêu cầu kỹ thuật: Các yêu cầu kỹ thuật của hệ thống ứng dụng đặt món ăn có thể bao gồm các yêu cầu sau:

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

<b>3.1.2. Phân loại người dùng </b>

<small>• </small> Ứng dụng đặt thức ăn nhanh sẽ có hai loại người dùng sử dụng chính: khách hàng đặt món và chủ cửa hàng bán thức ăn nhanh. Ngoài ra sẽ có người quản trị (administrator) là người sở hữu ứng dụng này, có thể theo dõi và xử lý vi phạm của những người dùng trên.

<small>• </small> Về phía khách hàng đặt món:

<small>o </small> Khách hàng sẽ có thể vào ứng dụng và xem, tìm kiếm những món ăn được hiển thị từ nhiều cửa hàng khác nhau. Những món ăn này có thể hiển thị theo danh mục khác nhau, có thể tìm kiếm theo giá cả khác nhau.

<small>o </small> Khách hàng có thể chọn riêng những thành phần của món ăn được chọn.

<small>o </small> Sau khi chọn được món ăn cần mua, khách hàng có thể thêm vào giỏ hàng và tiến hành đặt món và thanh tốn. Sau khi đặt món khách hàng có thể có lựa chọn để đánh giá món ăn để đưa ra những quyết định khách

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

<small>o </small> Sau khi khách hàng đặt món, trạng thái đơn hàng sẽ được chuyển sang cho cửa hàng tương ứng. Cửa hàng có thể chọn đơn hàng để xử lý và giao đến cho khách hàng. Sau khi cập nhật từng trạng thái của đơn hàng thì hệ thống sẽ thơng báo đến cho người dùng từng thay đổi

<small>• </small> Về phía người quản trị:

<small>o </small> Người quản trị sẽ có thể quản lý thơng tin các tài khoản của các người dùng.

<small>o </small> Khi khách hàng hoặc cửa hàng bị báo cáo hoặc gửi báo cáo vi phạm từ người dùng khác, người quản trị có thể xem thơng tin báo cáo vi phạm và có thể tạm dừng hoạt động của người dùng vi phạm.

<b>3.2. Thiết kế hệ thống </b>

<b>• Client: Máy khách chịu trách nhiệm tương tác với người dùng và gửi các yêu </b>

cầu đến máy chủ. Triển khai giao diện với React Native.

<b>• Server: Máy chủ chịu trách nhiệm xử lý các yêu cầu từ máy khách và trả về </b>

phản hồi. Máy chủ bao gồm các thành phần chính sau:

• Cơ sở dữ liệu: PostgreSQL. Sử dụng PrismaORM để hỗ truy vấn cơ sở dữ liệu dễ dàng. Cơ sở dữ liệu sẽ được lưu trên cloud bằng dịch vụ của AWS là AWS RDS.

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

1. Người dùng mở ứng dụng và chọn/tìm kiếm món ăn.

2. Ứng dụng gửi u cầu đến máy chủ để lấy thơng tin món ăn của cửa hàng. 3. Máy chủ trả về thông tin món ăn cho ứng dụng.

4. Ứng dụng hiển thị thơng tin món ăn cho người dùng.

5. Người dùng chọn món ăn và đặt hàng (có thể thêm vào giỏ hàng). 6. Ứng dụng gửi yêu cầu đến máy chủ để tạo đơn đặt hàng.

7. Máy chủ tạo đơn đặt hàng và trả về phản hồi cho ứng dụng.

8. Ứng dụng hiển thị thông báo cho người dùng về trạng thái đơn đặt hàng.

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

# Actor Name Definition

1 Administator Người quản trị là người sở hữu của ứng dụng này và là tài khoản duy nhất. Dùng để quản lý thông tin tài khoản người dùng khác và xử lý vi phạm.

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

22

2 User Người dùng được cung cấp tính năng đặt món và tìm kiếm thơng tin món ăn hoặc có thể tạo tài khoản “Shop” để kinh doanh.

3 Shop Nguời dùng được cung cấp khả năng để quản lý cửa hàng, sản phẩm và danh sách đơn hàng để phục vụ người dùng.

<b>3.3.1.2. Danh sách UseCase </b>

1 Xem món ăn Usecase này cho phép người dùng xem thơng tin chi tiết của món ăn.

2 Tìm kiếm món ăn Usecase này cho phép người dùng xem danh sách và tìm kiếm món ăn phù hợp.

3 Quản lý giỏ hàng Usecase này cho phép người dùng quản lý thông tin giỏ hàng, bao gồm CRUD.

4 Đặt hàng Usecase này cho phép người dùng tiến hàng đặt hàng, xem thông tin đơn hàng trước khi xác nhận đặt hàng.

5 Đánh giá Usecase này cho phép người dùng đánh giá món ăn của một cửa hàng nào đó. Mỗi người dùng chỉ có thể đánh giá cửa hàng một lần.

6 Quản lý món ăn u thích

Usecase này cho phép người dùng quản lý danh sách các món ăn được thêm vào u thích.

7 Quản lý phương thức thanh toán

Usecase này cho phép người dùng thanh toán trực tuyến.

8 Tạo cửa hàng Usecase này cho phép người dùng tạo tài khoản cửa hàng. 9 Đổi sang tài

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

Usecase này cho phép người dùng xem chi tiết danh sách đánh giá của sản phẩm.

16 Quản lý đơn hàng Usecase này cho phép người dùng quản lý danh sách các đơn hàng được đặt.

17 Quản lý tài khoản Usecase này cho phép người dùng quản lý thơng tin tồn bộ tài khoản của hệ thống.

18 Cấm/gỡ cấm tài khoản

Usecase này cho phép người dùng hạn chế một tài khoản nào đó.

19 Xem báo cáo của tài khoản

Usecase này cho phép người dùng xem báo cáo của tài khoản nào đó.

20 Xem thơng tin danh sách báo cáo

Usecase này cho phép người dùng xem thơng tin danh sách của tồn bộ báo cáo vi phạm được gửi đến.

21 Xem lịch sử đơn hàng

Usecase này cho phép người dùng xem thông tin lịch sử đơn hàng.

22 Thanh toán Usecase này cho phép người dùng chọn phương thức thanh toán.

23 Huỷ đơn hàng Usecase này cho phép người dùng huỷ bỏ đơn hàng hiện có 24 Quản lý đơn hàng Usecase này cho phép người dùng quản lý danh sách đơn hàng

hiện có.

<b>3.3.2. Đặc tả UseCase </b>

<b>Description </b> Usecase này cho phép người dùng xem thơng tin chi tiết của món ăn.

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

24

<b>Actor </b> User, Shop

<b>Trigger </b> Người dùng chọn vào một món ăn để vào màn hình thơng tin chi tiết món ăn đó.

<b>Pre-condition </b> Người dùng đăng nhập vào hệ thống.

<b>Post-condition </b> Người dùng được xem thông tin chi tiết món ăn.

<b>Name Tìm kiếm món ăn </b>

<b>Description </b> Usecase này cho phép người dùng xem danh sách và tìm kiếm món ăn phù hợp.

<b>Trigger </b> Người dùng vào màn hình tìm kiếm và nhập thơng tin phù hợp.

<b>Pre-condition </b> Người dùng đăng nhập vào hệ thống.

<b>Post-condition </b> Người dùng được xem thơng tin món ăn cần tìm.

<b>Name Quản lý giỏ hàng </b>

<b>Description </b> Usecase này cho phép người dùng quản lý thông tin giỏ hàng, bao gồm CRUD.

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

<b>Trigger </b> Người dùng bấm đặt hàng từ màn hình giỏ hàng.

<b>Pre-condition </b> - Người dùng đăng nhập vào hệ thống. - Giỏ hàng không trống.

<b>Post-condition </b> Người dùng có thể tiến hành đặt hàng và xác nhận đơn hàng.

<b>Description </b> Usecase này cho phép người dùng đánh giá món ăn của một cửa hàng nào đó. Mỗi người dùng chỉ có thể đánh giá cửa hàng một lần.

<b>Trigger </b> Người dùng vào màn hình chi tiết giỏ hàng và chọn đánh giá.

<b>Pre-condition </b> - Người dùng đăng nhập vào hệ thống.

<b>Post-condition </b> Người dùng có thể tiến hành đánh giá món ăn.

<b>Name Quản lý món ăn u thích </b>

<b>Description </b> Usecase này cho phép người dùng quản lý danh sách các món ăn được thêm vào u thích.

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

<b>Pre-condition </b> - Người dùng đăng nhập vào hệ thống.

<b>Post-condition </b> Người dùng có thể tiến hành lưu món ăn vào danh sách yêu thích.

<b>Name Quản lý phương thức thanh tốn </b>

<b>Description </b> Usecase này cho phép người dùng thanh toán trực tuyến.

<b>Trigger </b> Người dùng vào màn hình đặt hàng.

<b>Pre-condition </b> - Người dùng đăng nhập vào hệ thống.

- Người dùng tiến hành đặt hàng và chọn thanh tốn trực tuyến.

<b>Post-condition </b> Người dùng có thể thanh tốn món ăn đã đặt.

<b>Description </b> Usecase này cho phép người dùng tạo tài khoản cửa hàng.

<b>Trigger </b> Người dùng vào màn hình trang cá nhân và nhấn tạo cửa hàng.

<b>Pre-condition </b> - Người dùng đăng nhập vào hệ thống. - Người dùng chưa có tài khoản cửa hàng.

<b>Post-condition </b> Người dùng tạo tài khoản cửa hàng thành công.

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

27

<b>Name Đổi sang tài khoản cửa hàng </b>

<b>Description </b> Usecase này cho phép người dùng đổi sang tài khoản cửa hàng để quản lý.

<b>Description </b> Usecase này cho phép người dùng đăng nhập vào hệ thống.

<b>Actor </b> User, Shop, Admin

<b>Trigger </b> Người dùng truy cập vào ứng dụng.

<b>Pre-condition </b> - Người dùng chưa đăng nhập vào hệ thống.

<b>Post-condition </b> Người dùng đăng nhập vào hệ thống thành công.

<b>Description </b> Usecase này cho phép người dùng tạo tài khoản để đăng nhập vào hệ thống.

<b>Actor </b> User, Shop

<b>Trigger </b> Người dùng truy cập vào ứng dụng.

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

28

<b>Pre-condition </b> - Người dùng chưa đăng nhập vào hệ thống. - Người dùng chưa có tài khoản.

- Thông tin đăng ký hợp lệ.

<b>Post-condition </b> Người dùng đăng ký tài khoản thành công.

<b>Name Báo cáo vi phạm </b>

<b>Description </b> Usecase này cho phép người dùng báo cáo vi phạm của người dùng khác để xử lý.

<b>Actor </b> User, Shop

<b>Trigger </b> Người dùng bấm vào tài khoản báo cáo vi phạm.

<b>Pre-condition </b> - Người dùng đăng nhập vào hệ thống.

<b>Post-condition </b> Người dùng tạo báo cáo vi phạm thành công.

<b>Name Quản lý thông tin cá nhân </b>

<b>Description </b> Usecase này cho phép người dùng quản lý các thông tin cá nhân như tên, địa chỉ, số điện thoại. Bao gồm CRUD.

<b>Actor </b> User, Shop

<b>Trigger </b> Người dùng bấm vào màn hình trang cá nhân tài khoản.

<b>Pre-condition </b> - Người dùng đăng nhập vào hệ thống.

<b>Post-condition </b> Người dùng có thể xem, chỉnh sửa thơng tin cá nhân.

<b>Name Quản lý sản phẩm </b>

</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35">

29

<b>Description </b> Usecase này cho phép người dùng quản lý danh sách món ăn. Bao gồm CRUD.

<b>Trigger </b> Người dùng truy cập vào màn hình quản lý sản phẩm.

<b>Pre-condition </b> - Người dùng đăng nhập vào hệ thống. - Người dùng đăng nhập với vai trị là Shop.

<b>Post-condition </b> Người dùng có thể CRUD sản phẩm.

<b>Name Xem đánh giá sản phẩm </b>

<b>Description </b> Usecase này cho phép người dùng xem chi tiết danh sách đánh giá của sản phẩm.

<b>Actor </b> User, Shop

<b>Trigger </b> Người dùng truy cập vào màn hình chi tiết món ăn và bấm vào xem đánh giá.

<b>Pre-condition </b> - Người dùng đăng nhập vào hệ thống.

<b>Post-condition </b> Người dùng có thể xem danh sách các đánh giá của một sản phẩm.

<b>Name Quản lý đơn hàng </b>

<b>Description </b> Usecase này cho phép người dùng quản lý danh sách các đơn hàng được đặt.

<b>Trigger </b> Người dùng truy cập vào màn hình quản lý đơn hàng.

<b>Pre-condition </b> - Người dùng đăng nhập vào hệ thống. - Người dùng đăng nhập với vai trò là Shop.

</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">

30

<b>Post-condition </b> Người dùng có thể xem danh sách các đơn hàng và thay đổi trạng thái của đơn hàng.

<b>Name Quản lý tài khoản </b>

<b>Description </b> Usecase này cho phép người dùng quản lý thơng tin tồn bộ tài khoản của hệ thống.

<b>Trigger </b> Người dùng truy cập vào màn hình quản lý tài khoản

<b>Pre-condition </b> - Người dùng đăng nhập vào hệ thống.

- Người dùng đăng nhập với vai trò là Admin.

<b>Post-condition </b> Người dùng có thể xem danh sách các tài khoản và thông tin chi tiết báo cáo vi phạm của tài khoản.

<b>Name Cấm/gỡ cấm tài khoản </b>

<b>Description </b> Usecase này cho phép người dùng hạn chế một tài khoản nào đó.

<b>Trigger </b> Người dùng truy cập vào màn hình quản lý tài khoản và bấm vào một tài khoản cần cấm và bấm Cấm tài khoản.

<b>Pre-condition </b> - Người dùng đăng nhập vào hệ thống.

- Người dùng đăng nhập với vai trò là Admin.

<b>Post-condition </b> Người dùng có thể cấm/gỡ cấm một tài khoản.

<b>Name Xem báo cáo của tài khoản </b>

</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37">

<b>Pre-condition </b> - Người dùng đăng nhập vào hệ thống.

- Người dùng đăng nhập với vai trị là Admin.

<b>Post-condition </b> Người dùng có thể xem danh sách những báo cáo vi phạm hoặc bị báo cáo bởi tài khoản khác.

<b>Name Xem thông tin danh sách báo cáo </b>

<b>Description </b> Usecase này cho phép người dùng xem thơng tin danh sách của tồn bộ báo cáo vi phạm được gửi đến.

<b>Trigger </b> Người dùng truy cập vào màn hình quản lý danh sách báo cáo.

<b>Pre-condition </b> - Người dùng đăng nhập vào hệ thống.

- Người dùng đăng nhập với vai trị là Admin.

<b>Post-condition </b> Người dùng có thể xem toàn bộ danh sách những báo cáo vi phạm được gửi đến.

<b>Name Xem lịch sử đơn hàng </b>

<b>Description </b> Usecase này cho phép người dùng xem thông tin lịch sử đơn hàng.

<b>Actor </b> User, Shop

<b>Trigger </b> Người dùng truy cập vào màn hình lịch sử đơn hàng.

</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38">

32

<b>Pre-condition </b> - Người dùng đăng nhập vào hệ thống. - Đơn hàng khơng trống.

<b>Post-condition </b> Người dùng có thể xem lịch sử đơn hàng được đặt.

<b>Description </b> Usecase này cho phép người dùng chọn phương thức thanh toán.

<b>Trigger </b> Người dùng truy cập vào màn hình đặt hàng và tiến hành đặt hàng.

<b>Pre-condition </b> - Người dùng đăng nhập vào hệ thống.

<b>Post-condition </b> Người dùng có thể chọn phương thức thanh tốn phù hợp.

<b>Description </b> Usecase này cho phép người dùng huỷ bỏ đơn hàng hiện có.

<b>Actor </b> User, Shop

<b>Trigger </b> Người dùng truy cập vào màn hình danh sách đơn hàng.

<b>Pre-condition </b> - Người dùng đăng nhập vào hệ thống. - Đơn hàng đang ở trạng thái “Pending”.

<b>Post-condition </b> Người dùng có thể huỷ bỏ đơn hàng lần này.

<b>Name Quản lý đơn hàng </b>

<b>Description </b> Usecase này cho phép người dùng quản lý danh sách đơn hàng hiện có.

</div>

×