7 TỔNG KẾT
3.18 Quản lý danh sách nhà hàng
3.4. CÁC BÀI TOÁN ĐẶT RA KHI XÂY DỰNG HỆ THỐNG
3.4 Các bài toán đặt ra khi xây dựng hệ thống 3.4.1 Duy trì hoạt động
Việc kinh doanh nhà hàng liên tục hoạt động vì vậy hệ thống phải đảm bảo hoạt động được một số tính năng chủ yếu để khi khơng có internet.
Khi hệ thống bị mất kết nối với internet. Việc để user khơng thể thực hiện thanh tốn mà phải ghi thủ cơng lại các hàng hóa, sản phẩm vừa bán sẽ rất bất tiện và dễ gây sai sót. Vì vậy cần thiết kế hệ thống để có thể chạy liên tục kể cả khi mất internet.
Cách giải quyết:
Khi hệ thống mất mạng, người dùng có thể dùng thiết bị di động kết nối với 3G/4G để tiếp tục hoạt động quản lý, sử dụng hệ thống.
3.4.2 Bài tốn tìm kiếm
Trong hệ thống, việc tìm kiếm diễn ra rất nhiều. Từ việc tìm kiếm nhà hàng, tìm kiếm các menu thích hợp khi báo giá. . . Vì vậy cần có phương pháp lưu trữ thích hợp cũng như giải thuật tìm kiếm hiệu quả để tối ưu hiệu năng, thời gian thực hiện tính năng.
Cách giải quyết:Tận dụng thế mạnh của hệ quản trị cơ sở dữ liệu phi quan hệ. Việc query data ở database sẽ có tốc độ nhanh hơn so với các hệ quản trị cơ sở dữ liệu quan hệ. Ngồi ra các trường dữ liệu tìm kiếm liên tục được đánh index ở Mongodb để việc query hiện thực nhanh hơn khi có một tập dữ liệu lớn.
3.4.3 Phân tích yêu cầu bảo mật
Yêu cầu quan trọng nhất của một hệ thống thương mại điện tử hỗ trợ thanh toán trực tuyến là vấn đề bảo mật trong hệ thống và an toàn dữ liệu: dữ liệu phải được bảo mật và tồn vẹn. Có cơ chế phân quyền rõ ràng và chỉ cấp những quyền tối thiểu cho các thành viên theo từng cấp độ. Những hoạt động của người dùng cần có cơ chế kiểm tra xác thực và chống thối thác. Ngoài ra tất cả các giao dịch của hệ thống cần được lưu vết và thống kê để dễ dàng kiểm tra.
Cách giải quyết:
Khi người dùng đăng nhập vào hệ thống, hệ thống sẽ trả về một AccessToken và lưu ở trình duyệt người dùng. Phía trình duyệt khi gọi API sẽ kèm theo AccessToken này để xác thực dựa trên role của user, nếu thành công sẽ trả về kết quả.
3.4. CÁC BÀI TOÁN ĐẶT RA KHI XÂY DỰNG HỆ THỐNG
3.4.4 Bài tốn trực quan hóa dữ liệu
Vấn đề trực quan hóa dữ liệu là rất quan trọng trong hệ thống quản lý nhà hàng. Trực quan hóa giúp chủ nhà hàng có thể quan sát một cách trực quan các đơn hàng, doanh thu. người dùng ...
Cách giải quyết:Sử dụng các biểu đồ để thể hiện các mẫu dữ liệu trong hệ thống.
Chương 4
THIẾT KẾ HỆ THỐNG 4.1 Mơ hình cơ sở dữ liệu
4.2. CHI TIẾT CƠ SỞ DỮ LIỆU
4.2 Chi tiết cơ sở dữ liệu 4.2.1 Bảng: User
Hình 4.2: Bảng User
Ghi chú: Bảng User lưu thơng tin về khách hàng và đối tác.
• _id: mã người dùng,
• email: địa chỉ email của người dùng,
• isSystemAdmin: phân biệt system admin với người dùng bình thường,
• isVerify: tài khoản đã được xác thực bằng email hay chưa,
• password: mã hash mật khẩu của người dùng,
• restAdmin: địa chỉ nhà hàng mà người dùng quản lý,
• phoneNumber: số điện thoại của người dùng
4.2. CHI TIẾT CƠ SỞ DỮ LIỆU
4.2.2 Bảng: Restaurant
Hình 4.3: Bảng Restaurant
Ghi chú: Bảng Restaurnt lưu thơng tin của nhà hàng trên hệ thống.
• _id: mã nhà hàng,
• email: địa chỉ email của nhà hàng,
• address: địa chỉ của nhà hàng,
• capacity: sức chưa tối đa của nhà hàng,
• description: mơ tả, giới thiệu của nhà hàng,
• hotline: số điện thoại hotline của nhà hàng,
• listImage: danh sách hình ảnh của nhà hàng,
• location: toạ độ của nhà hàng,
• name: tên nhà hàng,
• placeId: mã vị trí của nhà hàng trên google map api,
• providedEvent: danh sách sự kiện của nhà hàng cung cấp,
4.2. CHI TIẾT CƠ SỞ DỮ LIỆU
Hình 4.4: Bảng Venue
4.2.3 Bảng: Venue
Ghi chú: Bảng Venue lưu thơng tin phịng sảnh thuộc nhà hàng.
• _id: mã phịng ban,
• numberTable: số lượng bàn,
• properties: tiện ích của phịng sảnh,
• capacity: sức chứa,
• reserved: thời gian đã được đặt,
• listImage: hình ảnh của phịng sảnh,
• restaurantId: mã nhà hàng,
• name: tên phịng sảnh,
• type: loại tiệc phòng sảnh cung cấp
4.2. CHI TIẾT CƠ SỞ DỮ LIỆU
4.2.4 Bảng: Menu
Hình 4.5: Bảng Menu
Ghi chú: Bảng Menu lưu thơng tin thực đơn của nhà hàng.
• _id: mã thực đơn,
• foodList: danh sách món ăn,
• image: hình ảnh thực đơn,
• mumberPeople: số lượng người trên một thực đơn,
• price: giá tiền của một thực đơn,
• type: loại sự kiện của thực đơn,
4.2. CHI TIẾT CƠ SỞ DỮ LIỆU
4.2.5 Bảng: Booking
Hình 4.6: Bảng Booking
Ghi chú: Bảng Booking lưu thơng tin đặt hàng của người dùng.
• _id: mã bảng đơn đặt hàng,
• billingEmail: email của người dùng thanh tốn đơn hàng,
• chargeId: mã thanh tốn của Stripe,
• createdAt: thời gian đặt hàng,
• deposit: số tiền đã cọc,
• menu: mã menu và số lượng menu đã đặt,
• restaurantId: mã nhà hàng đã đặt,
• serviceId: danh sách dịch vụ đã chọn,
• venueId: mã phịng ban đã đặt,
• status: trạng thái của đơn hàng,
• total: tổng giá tiền của đơn hàng,
• userId: mã người dùng đã đặt hàng
4.3. KIẾN TRÚC HỆ THỐNG
4.2.6 Bảng: Service
Hình 4.7: Bảng Service
Ghi chú: Bảng Service lưu thông tin dịch vụ mà hệ thống cung cấp.
• _id: mã dịch vụ,
• description: mơ tả dịch vụ,
• images: danh sách hình ảnh của dịch vụ,
• name: tên dịch vụ,
• price: giá dịch vụ,
• type: loại dịch vụ
4.3 Kiến trúc hệ thống
Việc mở rộng hệ thống cũng như bảo trì là điều cực kì quan trọng của một hệ thống. Khi có u cầu của khách hàng cần bổ sung thêm tính năng hoặc sửa lỗi hệ thống thì việc đáp ứng được nhu cầu của khách hàng một cách kịp thời và nhanh chóng là rất quan trọng.
Kiến trúc hệ thống: Hệ thống được xây dựng trên mơ hình client-server
Phía client được hiện thực bởi Reactjs. ReactJS là một thư viện JavaScript mã nguồn mở, được Facebook thiết kế nhằm giúp tạo ra các ứng dụng web hấp dẫn, với thời gian ngắn và hiệu quả mà không cần code quá nhiều. Mục tiêu cốt lõi của ReactJS nhằm cung cấp hiệu suất làm việc cao nhất có thể, thơng qua việc tập trung các component riêng lẻ lại với nhau. Thay vì làm việc trên tồn bộ ứng dụng web, ReactJS cho phép chúng ta chia nhỏ cấu trúc UI thành những component đơn giản hơn.
4.3. KIẾN TRÚC HỆ THỐNG
Hình 4.8: Kiến trúc hệ thống
Ngoài ra sử dụng Google Places API để có thể lấy được các thơng tin cần thiết của các nhà hàng có trên google. Dùng để tính vị trí khoảng cách của các nhà hàng.
Phía server được hiện thực bởi Nodejs. Ứng dụng Nodejs được viết bằng ngơn ngữ lập trình javascript - một ngơn ngữ thơng dụng đồng bộ với phía client, được sử dụng rộng rãi và chạy được trên nhiều trình duyệt, nền tảng, hệ điều hành,...
Hệ quản trị cơ sở dữ liệu MongoDB phù hợp với tập dữ liệu lớn và ngày càng mở rộng. Có thể lập chỉ mục ở bất kì thuộc tính nào giúp cho giúp cho việc truy vấn phong phú, đa dạng và nhanh hơn.
Cổng thanh toán VNPAY là cổng thanh toán được sử dụng rộng rãi ở Việt Nam. Với các phương thức thanh toán đa dạng, linh hoạt. VNPAY Cho phép người dùng thánh tốn bằng các tài khoản ngân hàng có kết nối internet banking hoặc có thể thánh tốn dễ dàng bằng cách quét mã QRCode.
Chương 5
HIỆN THỰC HỆ THỐNG 5.1 Danh sách API sử dụng
5.1.1 API đăng ký member
Mô tả /api/auth/register Phương thức POST Input Body • name • email • password
Output Tạo tài khoản thành công hoặc thất bại Bảng 5.1: API đăng ký member
5.1. DANH SÁCH API SỬ DỤNG 5.1.2 API đăng nhập Mô tả /api/auth/login Phương thức POST Input Body • email • password
Output Đăng nhập thành cơng hoặc thất bại Bảng 5.2: API đăng nhập
5.1.3 API lấy thông tin user
Mô tả /api/auth/me Phương thức GET Input Header • authorization: token Body • email • password
Output Lấy thông tin thành công hoặc thất bại Bảng 5.3: API lấy thông tin user
5.1. DANH SÁCH API SỬ DỤNG
5.1.4 API lấy danh sách thơng tin user
Mơ tả /api/auth/users Phương thức GET
Input Header
• Authorization: token Query
• type: "user" | "sys-admin" | "rest-admin"
Output Lấy thơng tin thành công hoặc thất bại
Bảng 5.4: API lấy danh sách thơng tin user
5.1.5 API xóa user
Mơ tả /api/auth/users/:id Phương thức DELETE Input Header • Authorization: token Param • id: userId
Output Xóa account thành cơng hoặc thất bại Bảng 5.5: API xóa user
5.1. DANH SÁCH API SỬ DỤNG
5.1.6 API accept restaurant đã đăng ký
Mô tả /api/admin/rest/accept Phương thức POST Input Header • Authorization: token Body • restId: id của nhà hàng
Output Update trạng thái của nhà hàng từ pending sang accepted Bảng 5.6: API accept restaurant đã đăng ký
5.1.7 API cập nhật thơng tin người dùng
Mơ tả /api/users/update-info Phương thức POST Input Header • Authorization: token Body • name • numberPhone
Output Cập nhật user info và trả về data mới
Bảng 5.7: API cập nhật thông tin người dùng
5.1. DANH SÁCH API SỬ DỤNG
5.1.8 API verify account
Mô tả /api/auth/verify-account Phương thức POST
Input Body
• token
Output Xác nhận người dùng, user có thể đăng nhập từ đây Bảng 5.8: API verify account
5.1.9 API danh sách đơn hàng của user
Mô tả /api/users/orders Phương thức GET
Input Header
• Authorization: token
Output Trả về danh sách đơn hàng đã đặt
Bảng 5.9: API danh sách đơn hàng của user
5.1.10 API danh sách đơn hàng của admin
Mô tả /api/admin/orders Phương thức GET
Input Header
• Authorization: token
Output Trả về danh sách đơn hàng đã đặt
5.1. DANH SÁCH API SỬ DỤNG
5.1.11 API cập nhật trạng thái của Order
Mơ tả /api/restaurants/admin/update-status Phương thức POST Input Header • Authorization: token Body • orderId
Output Thay đổi trạng thái đơn hàng từ Deposit sang Done. Bảng 5.11: API cập nhật trạng thái của Order
5.1.12 API trả danh sách nhà hàng
Mơ tả /api/restaurants Phương thức GET
Input Body
• typeAddr?: loại nhà hàng
• capacity?: số người tham dự
• rangePrice?: khoảng giá của menu
• searchKey?: tên nhà hàng
• properties?: các tiện ích của nhà hàng
Output Trả về danh sách nhà hàng.
Bảng 5.12: API trả danh sách nhà hàng
5.1. DANH SÁCH API SỬ DỤNG
5.1.13 API get doanh thu của nhà hàng
Mô tả /api/restaurants/admin/revenue Phương thức GET
Input Header
• Authorization: token
Output Trả về thống kê doanh thu của nhà hàng.
Bảng 5.13: API get doanh thu của nhà hàng
5.1.14 API đăng ký nhà hàngMô tả /api/restaurants/create Mơ tả /api/restaurants/create Phương thức POST Input Header • Authorization: token Body • name: tên nhà hàng • address: địa chỉ • location: tọa độ • providedEvent: các loại hình • capacity: sức chứa • email • hotline
Output Đăng ký một nhà hàng ở trạng thái pending. Bảng 5.14: API đăng ký nhà hàng
5.1. DANH SÁCH API SỬ DỤNG
5.1.15 API trả thông tin nhà hàng
Mô tả /api/restaurants/detail/:id Phương thức GET
Input
Output Trả về thông tin chi tiết của nhà hàng.
Bảng 5.15: API trả thông tin nhà hàng
5.1.16 API Báo giá tự động
Mô tả /api/restaurants/inquery Phương thức POST
Input Body
• type: loại nhà hàng
• quantity: số người tham dự
• price: chi phí dự tính
• coordinate: tọa độ địa chỉ của bạn
• properties?: các tiện ích của nhà hàng
• services?: các dịch vụ của nhà hàng
Output Trả về danh sách chi phí phải trả của mỗi nhà hàng phù hợp yêu cầu.
Bảng 5.16: API Báo giá tự động
5.1. DANH SÁCH API SỬ DỤNG
5.1.17 API trả danh sách nhà hàng pending
Mơ tả /api/restaurants/pending Phương thức GET
Input Header
• Authorization: token
Output Trả về danh sách nhà hàng chưa được xác thực. Bảng 5.17: API trả danh sách nhà hàng pending
5.1.18 API cập nhật trang detail
Mơ tả /api/restaurants/updateinfo/:rest_id Phương thức POST Input Header • Authorization: token Body • type: loại nhà hàng
• capacity: sức chứa tối đa
• listImages: danh sách hình ảnh
• description: giới thiệu
• address: địa chỉ
Output Cập nhật restaurant info.
5.1. DANH SÁCH API SỬ DỤNG
5.1.19 API tạo menu
Mô tả /api/restaurants/createmenu/:venue_id Phương thức POST
Input Header
• Authorization: token Body
• name: tên menu
• foodList: danh sách món
• image: hình ảnh
• price: giá tiền
• numberPeople: số người
Output Trả về menu mới.
Bảng 5.19: API tạo menu
5.1.20 API get danh sách dịch vụ
Mô tả /api/restaurants/services Phương thức GET
Input
Output Trả về danh sách dịch vụ.
Bảng 5.20: API get danh sách dịch vụ
5.1. DANH SÁCH API SỬ DỤNG 5.1.21 API tạo phịng sảnh Mơ tả /api/restaurants/createvenue/:rest_id Phương thức POST Input Header • Authorization: token Body • name: tên phịng sảnh • numberTable: số bàn [min,max] • image: hình ảnh
• type: loại sự kiện
• properties?: tiện ích
Output Trả về phòng sảnh mới.
Bảng 5.21: API tạo phòng sảnh
5.1.22 API get danh sách tiện ích của phịng sảnh
Mơ tả /api/restaurants/venue/properties Phương thức GET
Input
Output Trả về danh sách tiện ích của phịng sảnh.
5.1. DANH SÁCH API SỬ DỤNG 5.1.23 API cập nhật phịng sảnh Mơ tả /api/restaurants/updatevenue/:venue_id Phương thức POST Input Header • Authorization: token Body • name?: tên phịng sảnh • numberTable?: số bàn [min,max] • image?: hình ảnh
• type?: loại sự kiện
• properties?: tiện ích
Output Cập nhật thơng tin phịng sảnh.
Bảng 5.23: API cập nhật phịng sảnh
5.1.24 API xóa menu
Mơ tả /api/restaurants/venue/remove Phương thức DELETE
Input Header
• Authorization: token Body
• menuId: id của menu
Output Trả về danh sách menu mới.
Bảng 5.24: API xóa menu
5.1. DANH SÁCH API SỬ DỤNG 5.1.25 API cập nhật menu Mô tả /api/restaurants/updatemenu/:menuId Phương thức POST Input Header • Authorization: token Body
• name?: tên menu
• foodList?: danh sách món
• image?: hình ảnh
• price?: giá tiền
• numberPeople?: số người Output Trả về phòng sảnh mới. Bảng 5.25: API cập nhật menu 5.1.26 API xóa phịng sảnh Mơ tả /api/restaurants/venue/remove Phương thức DELETE Input Header • Authorization: token Body • venueId: id của phịng sảnh
Output Trả về danh sách phòng sảnh mới.
5.2. HIỆN THỰC HỆ THỐNG Ở WEBSITE
5.2 Hiện thực hệ thống ở Website 5.2.1 Màn hình đăng nhập
Hình 5.1: Màn hình SignIn/SignUp
Giới thiệu: Người dùng (Member, RestaurantAdmin, SystemAdmin) đăng nhập
vào hệ thống, nếu chưa có tài khoản người dùng bấm vào Đăng kí ngay.
Mơ tả:
• Đăng nhập: người dùng nhập email, password, sau đó bấm Đăng nhập. Nếu thành công, hệ thống sẽ chuyển tới trang Home. (Api chi tiết 5.1.2)
• Đăng ký: người dùng nhập name, email, password, sau đó bấm Đăng ký. Hệ
5.2. HIỆN THỰC HỆ THỐNG Ở WEBSITE
thống sẽ gửi một đường link xác thực qua email, người dùng bấm vào để hoàn thành đăng ký.(Api chi tiết 5.1.1)
5.2.2 Màn hình danh sách nhà hàng
Hình 5.2: Màn hình HomePage
Giới thiệu: Người dùng có thể xem danh sách và thông tin sơ lược của các nhà
hàng.(Api chi tiết 5.1.12)
Mơ tả:
• Lọc danh sách nhà hàng: Ở cột bên trái là các lựa chọn để lọc danh sách: theo