CHƯƠNG 1: GIỚI THIỆU 1.1 SỰ CẦN THIẾT CỦA ĐỀ TÀI Trong thời buổi xã hội hiện nay,n hu cầu đi tìm kiếm quán ăn của con người ngày càng cao và các bạn trẻ thì thích các quán ngon bổ rẻ và cũng có thể chia sẻ cho mọi người biết về món ăn của quán ăn nào mà mình thích. Để đáp ứng nhu cầu của khách hàng về tìm kiếm các quán ăn, lưu lại các quán ăn mà mình thích, chia sẻ cho mọi người về quán ăn mà mình biết, với giao diện quen thuộc với người dùng. Vì vậy, một ứng dụng về tìm kiếm quán ăn là hoàn toàn cần thiết. Do đó chúng em đã tạo ra một ứng dụng tìm kiếm quán ăn trên hệ điều hành iOS.2 MỤC ĐÍCH CỦA ĐỀ TÀI - Tìm hiểu về ngôn ngữ Swift, NodeJS - Tìm hiểu về công nghệ Firebase và mongodb - Xây dựng ứng dụng tìm kiếm quán ăn trên hệ điều hành iOS 1.3 CÁCH TIẾP CẬN - Tạo Frorm đăng nhập với MongoDB trên Xcode.
- Viết api để kết nối từ MongoDB lên app điện thoại. - Thiết kế cơ sở dữ liệu để tạo bản bài viết hiển thị trên app điện thoại. - Dùng testflight để có thể chạy app lên điện thoại thật. - Dựng vps và domain sau đó đưa server lên để điện thoại thật có thể nhận được dữ liệu.
- Tạo bản đồ và định vị chỉ đường cho người dùng. - Kết nối Firebase với app. - Tạo tài khoản với Firebase và cơ sở dữ liệu Realtime - Đưa dữ liệu từ cơ sở dữ liệu Firebase sang cơ sở dữ liệu MongoDB. - Tạo chức năng đăng ký, đăng nhập bằng Firebase.
- Tạo các chức năng cho người dùng đã đăng ký tài khoản: o Lưu bài viết. o Xem bài viết đã lưu. o Bỏ lưu bài viết. o Nhận thông báo từ admin o Thay đổi tên hiển thị do an 1 Tìm hiểu và xây dựng ứng dụng tìm kiếm quán ăn o Thay đổi mật khẩu.
o Thay đổi avartar. o Bình luận bài viết. o Chia sẻ bài viết o Đăng bài viết o Báo cáo về quán ăn 1.4 KẾT QUẢ DỰ KIẾN ĐẠT ĐƯỢC - Có kiến thức về các ngôn ngữ lập trình trên iOS là Swift, và ngôn ngữ lập trình Web là NodeJS. - Có kiến thức về các công nghệ cơ sở dữ liệu NoSQL mới: Firebase, MongoDB.
- Tạo ra ứng dụng tìm kiếm quán ăn trên hệ đều hành iOS có tính năng: o Giúp người dùng xem được những thông tin cần thiết về quán ăn. o Giúp người dùng lưu lại những địa điểm mình đánh dấu. o Chia sẻ các quán ăn. o Đăng các bài về quán ăn muốn chia sẻ o Báo cáo về quán ăn trên ứng dụng do an 2 Tìm hiểu và xây dựng ứng dụng tìm kiếm quán ăn CHƯƠNG 2: KHẢO SÁT HIỆN TRẠNG 2.1 CÁC ỨNG DỤNG TƯƠNG TỰ 2.1 Foody: Ấn tượng đầu tiên của Foody nằm ở giao diện ứng dụng được đầu tư khá tốt cũng như trải nghiệm người dùng.
Điểm mạnh của Foody là không chỉ hỗ trợ giao diện web mà nó còn hỗ trợ đa nền tảng di động như iOS, Android và Windows Phone. Giao diện foody Hin 2.2 Lozi: Lozi là một mạng xã hội về ăn uống, chú trọng vào chia sẻ ảnh món ăn. Ấn tượng đầu tiên của người dùng đó là hình ảnh rất đẹp, sở dĩ Lozi có được những hình ảnh đẹp này là vì Lozi xây dựng cộng đồng ban đầu từ Instagram. Và cũng như tính năng của các mạng xã hội khác, người dùng sẽ chia sẻ ảnh món ăn và review của họ cũng như theo dõi bạn bè của họ.
do an 3 Tìm hiểu và xây dựng ứng dụng tìm kiếm quán ăn ̀ h 2. Giao diện ứng dụng Lozi Hin 2.3 ClingMe: Một ứng dụng Việt thông minh với nhiều tính năng độc đáo. Ngoài việc trợ giúp tìm những địa điểm xung quanh, đưa ra gợi ý các hàng quán gần và phù hợp nhu cầu người dung nhất dựa trên GPS, ứng dụng còn hỗ trợ tìm kiếm các cây xăng, ATM, bãi đổ xe và cả tiệm thuốc ở khắp đất nước Việt Nam. ClingMe có giao diện khá trực quan, cách bố trí hợp lý giúp người dùng dễ làm quen ngay ở lần đầu tiên.
3 do an Tìm hiểu và xây dựng ứng dụng tìm kiếm quán ăn ̀ h 3. Giao diện ứng dụng ClingMe Hin 2.2 YÊU CẦU CỦA ỨNG DỤNG Ở Việt Nam, trong những năm gần đây, việc ứng dụng tin ho ̣c vào tìm kiếm quán ăn khá phổ biế n. Với những phần mềm tìm kiếm quán ăn như vậy, nó tìm kiếm các quán ăn ở gần, các quán ăn ngon để mình có thể lựa chọn theo món. Ưu điểm: Tìm kiếm nhanh các quán ăn gần.
Tìm kiếm các món ăn, quán ăn theo tên Lưu các quán lại để có thể tìm kiếm nhanh hơn những gì mình thích Có thể order online và đặt chỗ trên ứng dụng 4 do an Tìm hiểu và xây dựng ứng dụng tìm kiếm quán ăn Khuyết điểm: Được phát triển riêng cho các nhà hàng, quán cafe – trà sữa, do đó phần mềm chưa tư vấn được các cửa hàng ở nhiều lĩnh vực Với những ưu điểm và nhược điểm của các ứng dụng mà chúng em đã khảo nghiệm. Chúng em sẽ làm một ứng dụng về tìm kiếm quán ăn trên hệ điều hành iOS với các chức năng như sau: ❖ Guest : Xem thông tin quán ăn - Xem tất cả các quán ăn: tên quán, địa chỉ, thời gian mở cửa, giá cả. - Xem bản đồ chỉ đường. - Xem thông tin quảng cáo, khuyến mãi.
- Chia sẻ quán ăn Đăng nhập. Đăng ký tài khoản Tìm kiếm: - Theo tên quán ăn - Theo địa chỉ quán ăn ❖ User: Xem thông tin quán ăn: - Xem tất cả các quán ăn: tên quán, địa chỉ, thời gian mở cửa, giá cả. - Xem bản đồ chỉ đường. - Xem thông tin quảng cáo, khuyến mãi.
- Bình luận về quán ăn. - Chia sẻ quán ăn - Báo cáo về quán ăn cho Admin Lưu lại thông tin quán ăn yêu thích Tìm kiếm: - Theo tên quán ăn - Theo địa chỉ quán ăn Chỉnh sửa thông tin cá nhân: thay đổi tên hiển thị, thay đổi mật khẩu, đổi hình avatar - Nhận thông báo từ admin ❖ Admin - Thêm xóa sửa: Quán ăn, thực đơn quán ăn. - Gửi thông báo cho người dùng. - Phê duyệt bài viết của User muốn chia sẻ quán ăn - Nhận báo cáo về quán ăn của User 5 do an Tìm hiểu và xây dựng ứng dụng tìm kiếm quán ăn CHƯƠNG 3: CƠ SỞ LÝ THUYẾT 3.1 Định nghĩa Mongoose là một Object Document Mapper (ODM).
Điều này có nghĩa là Mongoose cho phép bạn định nghĩa các object (đối tượng) với một schema được định nghĩa rõ ràng, được ánh xạ tới một MongoDB document.2 Các SchemaTypes của Mongoose: - String - Number - Date - Buffer - Boolean - Mixed - ObjectID - Array 3.3 Mỗi loại SchemaType đều cho phép xác định: - Giá trị mặc định - Hàm xác thực - Cho biết một trường bắt buộc - Hàm get cho phép bạn thao tác dữ liệu trước khi nó được trả về như một object - Hàm set cho phép bạn thao tác dữ liệu trước khi nó được lưu vào cơ sở dữ liệu - Tạo indexes cho phép dữ liệu được nạp nhanh hơn - Ngoài các tùy chọn phổ biến này, một số kiểu dữ liệu nhất định cho phép bạn tùy chỉnh thêm cách dữ liệu được lưu trữ và truy xuất từ một database. Ví dụ, một kiểu dữ liệu String cũng cho phép bạn chỉ định các tùy chọn bổ sung sau đây: - Chuyển đổi nó thành chữ thường - Chuyển đổi nó thành chữ in hoa - Cắt dữ liệu trước khi lưu lại - Một biểu thức chính quy có thể giới hạn dữ liệu được phép lưu trong quá trình xác thực - Một enum có thể định nghĩa một danh sách các string (chuỗi) hợp lệ - Các thuộc tính Number and Date đều hỗ trợ chỉ định một giá trị tối thiểu và tối đa cho phép cho field đó. 6 do an Tìm hiểu và xây dựng ứng dụng tìm kiếm quán ăn - Bạn nên quen thuộc với hầu hết 8 kiểu dữ liệu. Tuy nhiên, có một số ngoại lệ có thể xảy ra với bạn, chẳng hạn như Buffer, Mixed, ObjectId và Array.
- Kiểu dữ liệu Buffer cho phép bạn lưu dữ liệu nhị phân. Một ví dụ phổ biến về dữ liệu nhị phân sẽ là hình ảnh hoặc tệp được mã hóa, chẳng hạn như tài liệu PDF. - Kiểu data Mixed biến thuộc một tính thành một field "anything goes" (thứ gì cũng được). Field này so sánh nhà phát triển có thể sử dụng MongoDB ra sao vì nó không có cấu trúc xác định.
Hãy cảnh giác với việc sử dụng kiểu dữ liệu này vì bạn sẽ mất nhiều tính năng tuyệt vời mà Mongoose cung cấp, chẳng hạn như xác thực dữ liệu và phát hiện các thay đổi của entity để tự động biết để cập nhật thuộc tính khi lưu. - Kiểu dữ liệu ObjectId thường chỉ định một liên kết đến một tài liệu khác trong database của bạn. Ví dụ: nếu bạn có một bộ collection về books (sách) và author (tác giả), book document có thể chứa thuộc tính ObjectId có tham chiếu đến một author cụ thể của document. - Kiểu dữ liệu Array cho phép bạn lưu trữ các mảng giống như JavaScript.
Với kiểu dữ liệu Array, bạn có thể thực hiện các chức năng phổ biến của JavaScript array, chẳng hạn như push, pop, shift, slice, v.4 Thiết lập Mongoose: - Gói mongoose được cài đặt như sau: npm install mongoose –save - Kết nối với MongoDB: var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/mongoose_basics'); Mongoose bây giờ được thiết lập và kết nối với một cơ sở dữ liệu được gọi là mongoose_basics 3.5 Định nghĩa schema cho Mongoose: - Ví dụ: Tạo đối tượng user có chứa hai thuộc tính: firstName và lastName: var userSchema = mongoose.Schema({ firstName: String, lastName: String }); Mở rộng ví dụ này bằng cách chuyển đổi các thuộc tính tên và họ thành các đối tượng con của thuộc tính name. Thuộc tính name sẽ bao gồm cả tên và họ. Thêm một thuộc tính created theo kiểu Date. 7 do an Tìm hiểu và xây dựng ứng dụng tìm kiếm quán ăn var userSchema = mongoose.Schema({ name: { firstName: String, lastName: String }, created: Date }); - Tham chiếu giữa các schema trong MongoDB: Tạo 2 schema: authorSchema và bookSchema: var authorSchema = mongoose.Schema({ _id: mongoose.ObjectId, name: { firstName: String, lastName: String }, biography: String, twitter: String, facebook: String, linkedin: String, profilePicture: Buffer, created: { type: Date, default: Date.now } }); var bookSchema = mongoose.Schema({ _id: mongoose.ObjectId, title: String, summary: String, isbn: String, thumbnail: Buffer, author: { type: mongoose.ObjectId, ref: 'Author' }, ratings: [ { summary: String, detail: String, numberOfStars: Number, created: { type: Date, default: Date.