CHƯƠNG 1 – GIỚI THIỆU ĐỀ TÀI 1.1 Giới thiệu Đề tài: Phát triển một website cung cấp chức năng Point of Sale dành cho một đại lý bán điện thoại và phụ kiện điện thoại. Người dùng của ứng dụng web này là nhân viên bán hàng và quản trị viên của cửa hàng. Ứng dụng cung cấp các chức năng cơ bản như: thực hiện các giao dịch bán hàng, quản lý sản phẩm, quản lý nhân viên, xem báo cáo, thống kê.2 Lí do thực hiện đề tài Hệ thống Point of Sale là một hệ thống rất phổ biến với các doanh nghiệp bán hàng trên thế giới, có thể được tìm thấy trong các cửa hàng bán lẻ, nhà hàng, quán ăn, café, siêu thị, … Ứng dụng web cung cấp chức năng Point of Sale là một công cụ quan trọng trong hệ thống Point of Sale, giúp cho việc quản lý bán hàng ở các địa điểm bán hàng dễ dàng và hiệu quả hơn.3 Yêu cầu của đề tài - Quản lý tài khoản: Thực hiện các chức năng đăng nhập, phân quyền cho quản trị viên và nhân viên bán hàng, quản lý tài khoản nhân viên cho quản trị viên. - Quản lý sản phẩm: Thực hiện các chức năng quản lý sản phẩm như thêm, xóa, sửa, xem danh sách sản phẩm.
- Quản lý khách hàng: Thực hiện các chức năng quản lý khách hàng như thêm, xóa, sửa, xem chi tiết khách hàng. - Xử lý giao dịch: Thực hiện chức năng đặt hàng – chức năng chính của hệ thống Point of Sale. - Báo cáo và thống kê: Thực hiện chức năng báo cáo và thống kê về doanh số bán hàng, theo các khung thời gian khác nhau và xem chi tiết đơn hàng. CHƯƠNG 2 – CƠ SỞ LÝ THUYẾT 9 2.1 Giới thiệu Express.js là một framework xây dựng backend cho ứng dụng web với Node.js, được sử dụng để xây dựng các ứng dụng web và REST API.
Nó cung cấp một cách tiếp cận dễ dàng và linh hoạt cho việc xử lý các yêu cầu HTTP, định tuyến (routing), quản lý session, tạo middleware và nhiều chức năng khác.js được xem là framework máy chủ tiêu chuẩn cho Node.2 Các chức năng chính - Routing (Định tuyến): Express.js cung cấp một giải pháp linh hoạt để định tuyến các yêu cầu HTTP đến các hàm xử lý tương ứng. Điều này cho phép lập trình viên xác định cách xử lý các yêu cầu HTTP tới máy chủ như GET, POST, PUT, DELETE, … - Middleware: Express.js cho phép sử dụng các middleware để thực hiện các chức năng như xác thực, logging, xử lý dữ liệu form và xử lý lỗi…. Middleware là một cách dễ dàng để mở rộng và tùy chỉnh ứng dụng. - Xử lí định tuyến: Ta có thể xây dựng handler cho các Route cụ thể, cho phép chúng ta chia nhỏ ứng dụng thành các phần nhỏ tương ứng với các Router con để có thể dễ dàng quản lý.
- View Engines: Express.js hỗ trợ nhiều template engine phổ biến như EJS, Pug, Handlebars, và nhiều loại khác để tạo các giao diện người dùng động. - Xử lý lỗi: Express.js cung cấp cách tiếp cận dễ dàng để xử lý các loại lỗi khác nhau và cung cấp thông báo phản hồi phù hợp. - Kết hợp với các middleware và thư viện bên ngoài: Express thường được kết hợp với các middleware và thư viện bên ngoài để mở rộng chức năng, chẳng hạn như Body-parser để xử lý dữ liệu POST, Passport.js cho xác thực, và nhiều middleware khác.1 Giới thiệu - MongoDB là một database hướng tài liệu, một dạng NoSQL database. Chính vì vậy, MongoDB sẽ tránh cấu trúc table-based của relational database để thích ứng với các tài liệu như JSON có một schema rất linh hoạt gọi là BSON.
MongoDB sử dụng lưu trữ dữ liệu dưới dạng Document JSON nên mỗi một collection sẽ các các kích cỡ và các document khác nhau. Các dữ liệu được lưu trữ trong document kiểu JSON nên truy vấn sẽ rất nhanh. - Các tính năng của MongoDB gồm có: o Các ad hoc query: hỗ trợ tìm kiếm bằng field, các phép tìm kiếm thông thường, regular expression searches, và range queries. o Indexing: bất kì field nào trong BSON document cũng có thể được index.
o Replication: có ý nghĩa là “nhân bản”, là có một phiên bản giống hệt phiên bản đang tồn tại, đang được sử dụng. Với cơ sở dữ liệu, nhu cầu lưu trữ lớn, đòi hỏi cơ sở dữ liệu toàn vẹn, không bị mất mát trước những sự cố ngoài dự đoán là rất cao. Vì vậy, người ta nghĩ ra khái niệm “nhân bản”, tạo ra một phiên bản cơ sở dữ liệu giống cơ sở dữ liệu đang tồn tại, và lưu trữ nó ở một nơi khác, đề phòng có sự cố. o Aggregation: Các Aggregation operation xử lý các bản ghi dữ liệu và trả về kết quả đã được tính toán.
Các phép toán tập hợp nhóm các giá trị từ nhiều Document lại với nhau, và có thể thực hiện nhiều phép toán đa dạng trên dữ liệu đã được nhóm đó để trả về một kết quả duy nhất. o Lưu trữ file: MongoDB được dùng như một hệ thống file tận dụng những hàm trên và hoạt động như một cách phân phối qua sharding.2 Khi nào sử dụng MongoDB? - Quản lý và truyền tải content – Quản lý đa dạng nhiều product của content chỉ trong một kho lưu trữ data cho phép thay đổi và phản hồi nhanh chóng mà không chịu thêm phức tạp thêm từ hệ thống content. - Cấu trúc Mobile và Social – MongoDB cung cấp một nền tảng có sẵn, phản xạ nhanh, và dễ mở rộng cho phép rất nhiều khả năng đột phá, phân tích thời gian thực, và hỗ trợ toàn cầu. - Quản lý dữ liệu khách hàng – Tận dụng khả năng query nhanh chóng cho phân tích thời gian thực trên cơ sở dữ liệu người dùng cực lớn vớ các mô hình data phức tạp bằng các schema linh hoạt và tự động sharding cho mở rộng chiều ngang.3 Ưu và nhược điểm của MongoDB - Ưu điểm: o Dữ liệu lưu trữ phi cấu trúc, không có tính ràng buộc, toàn vẹn nên tính sẵn sàng cao, hiệu suất lớn và dễ dàng mở rộng lưu trữ.
o Dữ liệu được caching (ghi đệm) lên RAM, hạn chế truy cập vào ổ cứng nên tốc độ đọc và ghi cao. - Nhược điểm: o Không ứng dụng được cho các mô hình giao dịch nào có yêu cầu độ chính xác cao do không có ràng buộc. o Không có cơ chế transaction (giao dịch) để phục vụ các ứng dụng ngân hàng. o Dữ liệu lấy RAM làm trọng tâm hoạt động vì vậy khi hoạt động yêu cầu một bộ nhớ RAM lớn.
o Mọi thay đổi về dữ liệu mặc định đều chưa được ghi xuống ổ cứng ngay lập tức vì vậy khả năng bị mất dữ liệu từ nguyên nhân mất điện đột xuất là rất cao.3 JSON Web Token (JWT) 2.1 JSON Web Token là gì? - JSON Web Token (JWT) là 1 tiêu chuẩn mở (RFC 7519) định nghĩa cách thức truyền tin an toàn giữa các thành viên bằng 1 đối tượng JSON. Thông tin này có thể được xác thực và đánh dấu tin cậy nhờ vào “chữ ký” của nó. Phần chữ ký của JWT sẽ được mã hóa lại bằng HMAC hoặc RSA.2 Cấu trúc của một JWT - Header: chứa thông tin thuật toán dùng đẽ mã hóa và loại token được lưu dưới dạng object, và được endcode base 64. Gồm hai phần chính: o typ – Loại token (mặc định là JWT – cho biết đây là một Token JWT) o alg – Thuật toán đã dùng để mã hóa (HMAC SHA256 – HS256 hoặc RSA).
- Payload: Là nơi chứa các nội dung của thông tin (claim). Thông tin truyền đi có thể là mô tả của 1 thực thể hoặc cũng có thể là các thông tin bổ sung thêm cho phần Header. Chúng được chia làm 3 loại: reserved, public và private. o Reserved: là những thông tin đã được quy định ở trong IANA JSON Web Token Claims registry.
Những thông tin này không có cái nào là bắt buộc cả. o Public: Khóa có thể define tùy theo ý muốn của người sử dụng JWT. Tuy nhiên để tránh trùng lặp, khó nên được quy định ở trong IANA 13 JSON Web Token Registry hoặc là 1 URI có chứa không gian tên không bị trùng lặp. Ví dụ: o Private: Phần thông tin thêm dùng để truyền qua giữa các client.
Ví dụ: - Signature: Chữ ký Signature trong JWT là một chuỗi được mã hóa bởi header, payload cùng với một chuỗi bí mật gọi là secret key nó được bảo mật ở phía server.3 Khi nào sử dụng JWT? - Xác thực Người dùng (User Authentication): JWT thường được sử dụng để xác thực người dùng khi họ đăng nhập vào một ứng dụng hoặc dịch vụ web. Sau khi người dùng đăng nhập thành công, họ nhận được một JWT, và sau đó, mỗi yêu cầu từ phía người dùng đều đi kèm với JWT để chứng minh rằng người dùng đã được xác thực. - Ứng dụng Single Sign-On (SSO): JWT có thể được sử dụng trong các hệ thống SSO để chia sẻ thông tin xác thực giữa nhiều ứng dụng hoặc dịch vụ khác nhau mà không cần người dùng phải đăng nhập lại nhiều lần. - Phân quyền (Authorization): JWT chứa các thông tin về quyền hạn của người dùng, giúp quản lý quyền truy cập một cách linh hoạt.
Thông qua các phần payload của JWT, bạn có thể chỉ định những tài nguyên nào mà người dùng được phép truy cập. 14 - Truyền thông tin an toàn qua các bên (Secure Information Exchange): JWT có thể được sử dụng để truyền thông tin an toàn giữa các bên trong môi trường phân tán mà không cần phải lưu trữ thông tin đặc biệt trên máy chủ. Dữ liệu trong JWT có thể được ký số để đảm bảo tính toàn vẹn và xác thực. - Giả mạo (Impersonation): Khi cần giả mạo (impersonate) người dùng hoặc hệ thống khác để thực hiện một số thao tác thử nghiệm hoặc kiểm thử, JWT có thể được sử dụng để thay đổi thông tin xác thực mà không cần phải yêu cầu mật khẩu mới.
15 CHƯƠNG 3 – PHÂN TÍCH THIẾT KẾ 3.1 Use case tổng quát Hình 3.1 Sơ đồ use case tổng quát 3.2 Use case Admin xem danh sách sản phẩm 16 Hình 3.2 Use case admin xem danh sách sản phẩm Mã Use Case UC15 Tên Use Case Admin xem danh sách sản phẩm Ngữ cảnh Admin được phép xem danh sách các sản phẩm và có chức năng tìm kiếm sản phẩm theo tên và mã vạch Mô tả Admin thực hiện chức năng xem danh sách sản phẩm và tìm kiếm theo tên từ hệ thống Tác nhân Admin Sự kiện kích hoạt Admin truy cập vào mục xem danh sách sản phẩm trên ứng dụng Điều kiện tiên quyết - Người dùng đăng nhập bằng tài khoản Admin Kết quả - Admin xem được danh sách sản phẩm và thực hiện chức năng tìm kiếm sản phẩm theo tên và mã vạch Luồng sự kiện Actor System 1.