1. Trang chủ
  2. » Luận Văn - Báo Cáo

PHÁT TRIỂN ỨNG DỤNG TRÊN THIẾT BỊ DI ĐỘNG NGHE SÁCH NÓI VÀ ĐỌC SÁCH ĐIỆN TỬ

94 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Phát Triển Ứng Dụng Trên Thiết Bị Di Động Nghe Sách Nói Và Đọc Sách Điện Tử
Tác giả Lê Thanh Bình
Người hướng dẫn TS. Dương Trần Đức
Trường học Học viện công nghệ bưu chính viễn thông
Chuyên ngành Công nghệ thông tin
Thể loại Đồ án tốt nghiệp
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 94
Dung lượng 3,6 MB

Cấu trúc

  • 1. PHÁT BIỂU BÀI TOÁN (0)
  • 2. PHẠM VI NGHIÊN CỨU (0)
  • 3. LÝ DO CHỌN ĐỀ TÀI (13)
  • 4. MỤC TIÊU ĐỒ ÁN (0)
  • 5. CẦU TRÚC ĐỒ ÁN (14)
  • CHƯƠNG 1: CƠ SỞ LÝ THUYẾT (15)
    • 1. GIỚI THIỆU (15)
      • 1.1. Định nghĩa và tính chất cơ bản (15)
      • 1.2. Ứng dụng và phát triển (15)
      • 1.3. Phân loại và các kiểu định dạng (15)
    • 2. CÁC CÔNG NGHỆ VÀ CÔNG CỤ SỬ DỤNG (16)
      • 2.1. React Native (16)
      • 2.2. NestJS (19)
    • 3. CƠ SỞ LÝ THUYẾT HỆ THỐNG KHUYẾN NGHỊ (24)
      • 3.1. Giới thiệu (24)
      • 3.2. Hệ thống khuyến nghị – Recommender Systems (24)
      • 3.3. Tìm hiểu các phương pháp, kỹ thuật trong Recommender Systems (29)
  • CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG (33)
    • 1. YÊU CẦU HỆ THỐNG (33)
      • 1.1. Sơ đồ tổng quan usecase của hệ thống (33)
      • 1.2. Một số chức năng chính của hệ thống (38)
    • 2. KIẾN TRÚC HỆ THỐNG (50)
      • 2.1. Sơ đồ mô tả kiến trúc hệ thống (50)
      • 2.2. Trích lớp thực thể (51)
      • 2.3. Biểu đồ lớp thực thể pha phân tích (53)
      • 2.4. Biểu đồ lớp thực thể pha thiết kế (54)
      • 2.5. Thiết kế Database (55)
    • 1. PHÁT TRIỂN CHỨC NĂNG ĐỌC SÁCH ĐIỆN TỬ (62)
    • 2. PHÁT TRIỂN CHỨC NĂNG NGHE SÁCH TRỰC TUYẾN (66)
    • 3. PHÁT TRIỂN CHỨC NĂNG ĐĂNG KÝ, ĐĂNG NHẬP (69)
      • 3.1. Chức năng Đăng nhập (69)
      • 3.2. Chức năng Đăng ký (71)
      • 3.3. Chức năng Đăng nhập với tài khoản thứ 3 (74)
    • 4. PHÁT TRIỂN CHỨC NĂNG CHỈNH SỬA THÔNG TIN TÀI KHOẢN. .72 5. MỘT SỐ GIAO DIỆN CHỨC NĂNG KHÁC CỦA ỨNG DỤNG (79)
    • 6. HỆ THỐNG KHUYẾN NGHỊ (83)
      • 6.1. Các thư viện sử dụng và xử lý dữ liệu (83)
      • 6.2. Most popular items (84)
      • 6.3. Item based (87)
      • 6.4. User based (88)
      • 6.5. Content based (90)
    • 1. KẾT QUẢ ĐẠT ĐƯỢC (92)
    • 2. NHỮNG HẠN CHẾ (92)
    • 3. HƯỚNG PHÁT TRIỂN TIẾP THEO (92)
  • TÀI LIỆU THAM KHẢO (94)

Nội dung

Điều này thúc đẩy sự phát triển của ứng dụng sách nói và sách điện tử trên thiết bị di động, nơi mà người dùng không chỉ đọc sách điện tử màcòn được tận hưởng trải nghiệm âm thanh sống đ

CẦU TRÚC ĐỒ ÁN

Nội dung của đồ án được xây dựng thành các chương như sau:

Chương 1 Cơ sở lý thuyết

Chương 2 Phân tích thiết kế hệ thống

Chương 3 Phát triển ứng dụng

Kết luận và hướng phát triển tiếp theo

CƠ SỞ LÝ THUYẾT

GIỚI THIỆU

1.1 Định nghĩa và tính chất cơ bản

Sách nói là hình thức truyền tải thông tin từ một cuốn sách, cho phép người dùng nghe người đọc sách thông qua các ứng dụng hoặc phương tiện truyền thông, giữ nguyên nội dung như sách in hay sách điện tử Trong khi đó, sách điện tử (e-book) là quyển sách được phát hành cho các thiết bị kỹ thuật số, bao gồm văn bản và hình ảnh, có thể đọc trên màn hình phẳng của máy tính hoặc thiết bị điện tử khác.

- Tính chất chung của cả hai loại sách này đó là sự linh hoạt, tiện lợi và khả năng tương tác với người dùng.

Với sự phát triển mạnh mẽ của thiết bị di động và internet, sách nói và sách điện tử đã trở thành những phương tiện học tập và giải trí phổ biến Chúng mang lại khả năng tiếp cận nhanh chóng, tùy chỉnh theo sở thích cá nhân và tương tác cao, làm cho chúng trở nên hấp dẫn và có tiềm năng lớn cho sự phát triển cá nhân và giáo dục.

1.2 Ứng dụng và phát triển

Sự phát triển của ứng dụng sách nói và sách điện tử trên thiết bị di động đã mở ra một thế giới tiện ích mới cho việc tiếp cận kiến thức Giao diện thân thiện trên di động giúp việc đọc và nghe sách trở nên dễ dàng và thuận tiện hơn bao giờ hết.

Khả năng tương tác, nhận xét và chia sẻ nội dung trên các nền tảng mạng xã hội từ thiết bị di động đã nâng cao trải nghiệm người dùng một cách đáng kể.

1.3 Phân loại và các kiểu định dạng

Sách nói, hay audiobook, là định dạng phổ biến nhất hiện nay, thường là phiên bản audio của sách in với định dạng MP3 hoặc M4B, giúp người nghe dễ dàng chuyển đổi giữa các chương Bên cạnh đó, podcast cũng là một loại sách nói đa dạng về chủ đề, từ chính trị đến giáo dục, và thường được phát hành qua các nền tảng như Apple Podcasts.

Podcasts, Spotify và SoundCloud là những nền tảng phổ biến cho việc nghe nội dung âm thanh Các định dạng phổ biến bao gồm MP3, AAC và ID3 Đọc trực tiếp (Live readings) là các bản ghi âm từ các buổi đọc tác phẩm văn học, thường được chia sẻ trên các nền tảng trực tuyến như YouTube hoặc các diễn đàn âm thanh.

- Sách điện tử (eBooks): o eBook: Đây là dạng phổ biến nhất của sách điện tử, thường là file dưới định dạng

Các định dạng sách điện tử như EPUB, PDF, MOBI, AZW, và KF8 mang lại tính linh hoạt khác nhau trong việc hiển thị nội dung trên các thiết bị như Kindle, iPad, và máy tính Đặc biệt, định dạng PDF cho phép người đọc tương tác với nội dung thông qua các tính năng như tìm kiếm, ghi chú, và sử dụng các công cụ bôi sáng trực tiếp Ngoài ra, sách điện tử còn hỗ trợ đa phương tiện, cho phép tích hợp hình ảnh, video, âm thanh và các tính năng tương tác khác, nâng cao trải nghiệm đọc cho người dùng.

CÁC CÔNG NGHỆ VÀ CÔNG CỤ SỬ DỤNG

React Native, do Facebook phát triển, là một framework chứa các đoạn code đã được viết sẵn Lập trình viên sử dụng React Native để xây dựng ứng dụng cho các hệ điều hành iOS và Android, chủ yếu bằng ngôn ngữ lập trình Javascript.

Sự ra đời của React Native đã giải quyết vấn đề hiệu năng và phức tạp trong việc sử dụng nhiều ngôn ngữ native cho mỗi nền tảng di động Lập trình với React Native giúp tiết kiệm thời gian và công sức trong thiết kế và xây dựng ứng dụng đa nền tảng, với Javascript phù hợp cho nhiều nền tảng khác nhau.

2.1.2 Đặc điểm của React Native

React Native hoạt động trên ba luồng chính: Chuỗi giao diện người dùng (UI Thread) là luồng chính truy cập giao diện ứng dụng; Shadow Thread là luồng nền tính toán bố cục ứng dụng; và Chuỗi JavaScript (JavaScript Thread) thực thi mã React Để tích hợp Main Thread và JS Thread cho ứng dụng di động, Main Thread cập nhật giao diện người dùng và xử lý tương tác, trong khi JS Thread thực thi mã JavaScript Vì Main Thread và JS Thread hoạt động độc lập, cần có một cầu nối (Bridge) để chúng tương tác, cho phép chuyển đổi dữ liệu giữa hai luồng mà không phụ thuộc lẫn nhau.

2.1.3 Lý do lựa chọn React Native

React Native mang lại khả năng tái sử dụng mã nguồn vượt trội, cho phép các nhà phát triển không cần viết mã riêng cho từng nền tảng như Android và iOS Khoảng 90% mã có thể được sử dụng chung giữa hai nền tảng, điều này không chỉ tăng tốc độ phát triển mà còn cải thiện hiệu quả tổng thể Việc tái sử dụng mã cũng giúp rút ngắn thời gian ra mắt sản phẩm và giảm thiểu nỗ lực bảo trì.

Tính năng live reload trong React Native cho phép người dùng xem và làm việc với các thay đổi ngay lập tức Khi bạn thực hiện sửa lỗi trong mã nguồn, ứng dụng sẽ tự động làm mới, giúp bạn nhanh chóng thấy được những thay đổi mà bạn đã thực hiện.

- Cải thiện giao diện và trải nghiệm người dùng: React Native sử dụng thư viện

React JavaScript là công cụ lý tưởng để phát triển giao diện ứng dụng nhanh chóng và đa dạng Framework này nổi bật với khả năng kết xuất ấn tượng và phương pháp tiếp cận dựa trên thành phần, cho phép tạo ra những ứng dụng với giao diện người dùng từ đơn giản đến phức tạp một cách dễ dàng.

Tối ưu hoá hiệu suất trong phát triển ứng dụng di động với React Native giúp tiết kiệm chi phí lên đến 40% nhờ khả năng tái sử dụng code React Native hỗ trợ phát triển trên cả hai nền tảng Android và iOS, đồng thời cung cấp nhiều thành phần đã được xây dựng sẵn, thúc đẩy nhanh chóng quá trình phát triển ứng dụng.

React Native cung cấp nhiều tùy chọn plugin của bên thứ ba, bao gồm các mô-đun native và JavaScript-based, giúp các nhà phát triển tiết kiệm thời gian và chi phí khi xây dựng ứng dụng Việc sử dụng các plugin này không chỉ nâng cao hiệu suất của ứng dụng mà còn tối ưu hóa quy trình phát triển.

Cộng đồng phát triển React Native mạnh mẽ nhờ sự hỗ trợ từ công ty mẹ Facebook, thu hút nhiều chuyên gia và kỹ sư trên toàn thế giới Điều này tạo điều kiện thuận lợi cho việc tìm kiếm sự hỗ trợ và chia sẻ kiến thức Hơn nữa, với tư cách là một framework mã nguồn mở, React Native cho phép mọi người đóng góp để phát triển và cải tiến nó trong tương lai.

NestJS là một framework mã nguồn mở dành cho phát triển ứng dụng server-side, sử dụng TypeScript hoặc JavaScript Được xây dựng trên nền tảng Node.js, NestJS áp dụng các khái niệm từ TypeScript để tạo ra môi trường phát triển hiện đại và hiệu quả cho việc xây dựng ứng dụng web và API.

NestJS hướng đến việc tạo ra một cấu trúc ứng dụng rõ ràng và dễ quản lý, nhằm nâng cao tính bảo trì và tổ chức mã nguồn Để thực hiện mục tiêu này, NestJS áp dụng mô hình kiến trúc lõi dựa trên các nguyên tắc của Angular, đặc biệt là việc sử dụng Dependency Injection (DI) và Modules (các module).

Hình 1.1: Sơ đồ kiến trúc của NestJS

Cấu trúc của NestJS dựa trên mô hình kiến trúc lõi, giúp xây dựng ứng dụng server-side rõ ràng, dễ quản lý và mở rộng NestJS tổ chức thành các phần chính như Module, nơi chứa các thành phần như Controllers và Providers; Controllers xử lý yêu cầu HTTPS từ client và trả về kết quả; Providers cung cấp dịch vụ cho ứng dụng thông qua dependency injection; Middleware xử lý yêu cầu HTTP trước khi đến route chính; Filters xử lý exception và thay đổi response khi có lỗi; Guards kiểm tra tính hợp lệ của yêu cầu; Interceptors chặn và thay đổi response trước khi gửi về client; và Exception handling cho phép xử lý các lỗi phát sinh, đảm bảo thông báo lỗi thích hợp được gửi đến client.

2.2.3 Lý do lựa chọn NestJS

NestJS được phát triển trên nền tảng Node.js và cung cấp hỗ trợ mạnh mẽ cho TypeScript Việc sử dụng TypeScript giúp quản lý mã nguồn hiệu quả hơn, từ đó nâng cao tính ổn định và khả năng bảo trì của ứng dụng.

Cấu trúc module trong NestJS giúp tổ chức mã nguồn một cách rõ ràng, dễ mở rộng và tái sử dụng, trong khi dependency injection mang lại lợi ích trong việc quản lý hiệu quả các thành phần của ứng dụng.

NestJS cung cấp công cụ mạnh mẽ cho việc phát triển RESTful API và hỗ trợ WebSockets, giúp tối ưu hóa tương tác thời gian thực với thiết bị di động.

CƠ SỞ LÝ THUYẾT HỆ THỐNG KHUYẾN NGHỊ

Sự phát triển mạnh mẽ của mạng xã hội và thiết bị di động đã dẫn đến tình trạng Quá tải thông tin, khi mà lượng thông tin được tạo ra vượt xa khả năng tiêu thụ và xử lý của con người Theo thống kê năm 2021 từ Google Analytics, comScore và Nielsen, trong một phút có khoảng 4,497,420 lượt tìm kiếm trên Google, hơn 1,440,000 lượt chia sẻ hình ảnh hoặc video trên Pinterest, cùng với 500 giờ video mới được tải lên và 694,444 giờ video được xem trên YouTube.

Hệ thống khuyến nghị (RS) là công cụ lọc thông tin quan trọng, giúp người dùng tìm kiếm và truy cập vào các tài nguyên cá nhân hóa trong bộ dữ liệu khổng lồ Trong hơn 20 năm qua, chúng đã chứng minh giá trị trong việc hỗ trợ người dùng giải quyết công việc và ra quyết định hàng ngày, đặc biệt trong những tình huống phức tạp Với khả năng cung cấp thông tin phù hợp, các công cụ khuyến nghị giúp người dùng xử lý lượng thông tin lớn một cách hiệu quả hơn.

3.2 Hệ thống khuyến nghị – Recommender Systems

Hệ thống khuyến nghị (RS) là công cụ phần mềm cung cấp đề xuất hữu ích cho người dùng, giúp họ đưa ra quyết định về các hoạt động như kết nối mạng xã hội, mua sắm, nghe nhạc hoặc xem phim Các sản phẩm như âm nhạc, phim ảnh và hàng hóa là ví dụ điển hình trong các tình huống đề xuất Hiện nay, hầu hết dịch vụ trực tuyến, bao gồm Pandora, Netflix, Linkedin và Youtube, đều tích hợp tính năng đề xuất để thu hút người dùng và nâng cao trải nghiệm dịch vụ.

Hệ thống khuyến nghị (RS) có mục đích chính là đáp ứng nhu cầu và mong muốn của người dùng trong việc xử lý lượng thông tin khổng lồ Để đạt được điều này, RS lựa chọn các mục tiêu phù hợp nhất với sở thích và thị hiếu của người dùng Theo tài liệu, hệ thống khuyến nghị được định nghĩa là bất kỳ hệ thống nào tạo ra các đề xuất cá nhân hóa, giúp hướng dẫn người dùng đến những đối tượng thú vị hoặc hữu ích trong một không gian rộng lớn.

Hình 1.3: Ví dụ về Quá tải thông tin (Information Overload)

Quá tải thông tin là một vấn đề phổ biến, ví dụ như khi người dùng xem phim nhưng không biết chọn bộ phim nào Trong thực tế, với hàng nghìn đến triệu lựa chọn, người dùng dễ bị choáng ngợp và khó khăn trong việc đưa ra quyết định đúng đắn mà không có sự hỗ trợ.

Hệ thống khuyến nghị và hệ thống tìm kiếm đều nhằm đáp ứng nhu cầu thông tin của người dùng, nhưng có những khác biệt cơ bản Theo Jeffrey O’Brien từ tạp chí Fortune, "Web đang rời khỏi kỷ nguyên tìm kiếm và bước vào kỷ nguyên khám phá" Tìm kiếm liên quan đến việc tìm kiếm thứ gì đó cụ thể, trong khi khám phá cho phép người dùng phát hiện ra những điều tuyệt vời mà họ chưa biết hoặc không biết cách yêu cầu Hệ thống khuyến nghị giúp người dùng khám phá tài nguyên mới mà họ có thể chưa nghĩ đến, mà không cần xác định rõ nhu cầu của mình.

Theo công thức chính thức của bài toán khuyến nghị, tập hợp người dùng được ký hiệu là U và tập hợp sản phẩm là I, cả hai đều có thể rất lớn Hàm f: U x I → R, trong đó R là tập hợp có thứ tự toàn phần, được sử dụng để đo lường mức độ hữu ích của sản phẩm i thuộc I đối với người dùng u thuộc U.

- Khi đó, bài toán khuyến nghị bao gồm việc tìm cho mỗi người dùng u sản phẩm i max , u ∈ I để tối đa hoá hàm f: [11]

Hình 1.4: Users, Items and Ratings

- Users: Người dùng (Users) là những tác nhân của hệ thống được cung cấp các đề xuất.

Người dùng có thể được thể hiện qua nhiều phương pháp khác nhau tùy thuộc vào kỹ thuật đề xuất được áp dụng Để tạo ra các gợi ý cá nhân hóa, hệ thống cần xây dựng và duy trì thông tin về sở thích của người dùng Trong hệ thống gợi ý dựa trên nội dung, sở thích này có thể được mô tả một cách rõ ràng hơn thông qua các vectơ thuộc tính hoặc thuật ngữ, sử dụng cách tiếp cận dựa trên heuristic, hoặc được mô hình hóa bằng cách tiếp cận dựa trên mô hình hoặc các công cụ biểu diễn tri thức.

Sản phẩm (Items) là thuật ngữ chung dùng để chỉ tài nguyên mà hệ thống đề xuất cho người dùng, với độ phức tạp và giá trị khác nhau Các Items đơn giản như tin tức, trang web, sách và phim có giá trị thấp, trong khi những mặt hàng phức tạp hơn như điện thoại di động, máy tính xách tay, dịch vụ tài chính, công việc và du lịch có giá trị cao hơn Mức độ cấu trúc phức tạp của Items tùy thuộc vào hệ thống và kỹ thuật đề xuất được sử dụng.

Hình 1.5: Ví dụ ma trận xếp hạng user-item trong đề xuất phim

Điểm đánh giá là yếu tố quan trọng mà RS dựa vào, chủ yếu dựa trên tính sẵn có của thông tin cập nhật về sở thích của người dùng thông qua phản hồi Phản hồi này có thể được phân loại thành rõ ràng hoặc ẩn ý, với người dùng cung cấp ý kiến qua thang đánh giá như số (1-5 sao), thứ tự (rất đồng ý đến rất không đồng ý) hoặc nhị phân (thích/không thích) Mặc dù phản hồi rõ ràng phổ biến hơn nhờ vào nhiều bộ dữ liệu có sẵn, nhưng thực tế, việc thu thập phản hồi ẩn ý từ hành vi người dùng lại thường gặp hơn, cho phép hệ thống suy ra sở thích mà không làm phiền người dùng.

Trong quá trình xây dựng hệ thống khuyến nghị, việc dự đoán xếp hạng là một yếu tố quan trọng, với mục tiêu chính là cung cấp cho người dùng danh sách đề xuất được xếp hạng, đặc biệt là N đề xuất hàng đầu Mặc dù hệ thống tập trung vào việc dự đoán chính xác các xếp hạng, nhưng trong nhiều trường hợp, chỉ những đề xuất tốt nhất mới được hiển thị mà không công khai giá trị xếp hạng dự đoán.

3.2.3 Các phương pháp, kỹ thuật trong Recommender System

Có nhiều kỹ thuật và phương pháp khuyến nghị khác nhau tùy thuộc vào cách ước tính hàm tiện ích và dữ liệu sản phẩm, trong đó hai phương pháp chính là lọc cộng tác (Collaborative filtering) và dựa trên nội dung (Content-based) Ngoài hai phương pháp này, còn có các cách tiếp cận khác như dựa trên tri thức (knowledge-based), nhân khẩu học và dựa vào cộng đồng (community-based) Hệ thống khuyến nghị thường được sử dụng trong thực tế là hệ thống tư vấn kết hợp (Hybrid recommenders), áp dụng các chiến lược khác nhau nhằm cải thiện hiệu suất và nâng cao chất lượng đề xuất.

Hình 1.6: Các phương pháp, kỹ thuật trong Recommender System

3.3 Tìm hiểu các phương pháp, kỹ thuật trong Recommender Systems

Lọc cộng tác (Collaborative Filtering) là phương pháp đánh giá sản phẩm dựa trên ý kiến của người dùng khác Phương pháp này tạo ra các đề xuất cá nhân hóa cho người dùng mục tiêu bằng cách sử dụng thông tin từ những người có sở thích tương đồng Giả định chính của lọc cộng tác là những người dùng có sở thích tương tự trong quá khứ sẽ tiếp tục có sở thích tương tự trong tương lai.

Hình 1.7: Minh hoạ hệ thống khuyến nghị dựa trên Collaborative Filtering

Khác với các kỹ thuật khác, CF-RS chỉ sử dụng ma trận xếp hạng user-item làm dữ liệu đầu vào Ví dụ, trong trường hợp lọc cộng tác, nếu Alice là người dùng mục tiêu, các đề xuất sẽ dựa trên xếp hạng của những người dùng có sở thích tương tự Cụ thể, John và Alice có sở thích chung khi cả hai đều đánh giá cao Argo và Righteous.

Hệ thống có khả năng sử dụng xếp hạng của John để dự đoán xếp hạng chưa biết của Alice Nguyên tắc cơ bản là nếu John thực sự thích bộ phim Heat, thì khả năng cao Alice cũng sẽ thích bộ phim này.

PHÂN TÍCH THIẾT KẾ HỆ THỐNG

YÊU CẦU HỆ THỐNG

1.1 Sơ đồ tổng quan usecase của hệ thống

- Tác nhân tham gia vào hệ thống:

Bảng 2: Bảng mô tả các tác nhân của hệ thống

STT Tác nhân Mô tả

1 Người dùng Người sử dụng ứng dụng để mua sách, theo dõi đơn hàng, đọc sách, nghe sách điện tử và quản lý sách của mình.

2 Quản lý Người quản lý phụ trách sách, tải sách mới lên, quản lý đơn hàng.

1.1.2 Danh sách các chức năng chính

Bảng 3: Bảng danh sách các chức năng chính

STT Tên chức năng Mô tả

1 Đăng ký Cho phép người dùng đăng ký tài khoản để sử dụng hệ thống

2 Đăng nhập Cho phép người dung đăng nhập vào hệ thống

3 Đăng ký với tài khoản thứ 3

Cho phép người dùng đăng ký tài khoản bằng tài khoản của bên thứ 3

4 Đăng nhập với tìa khoản thứ 3

Cho phép người dùng đăng nhập bằng tài khoản của bên thứ 3.

5 Tìm kiếm sách Cho phép người dùng tìm kiếm sách trong thư viện.

6 Đọc sách điện tử Cho phép người dùng đọc sách điện tử trong thư viện.

7 Nghe sách nói Cho phép người dùng nghe sách nói trong thư viện.

8 Thêm dấu sách Cho phép người dùng lưu vị trí dấu sách ở trong sách điện tử và sách nói.

9 Thêm sách yêu thích Cho phép người dùng thêm sách yêu thích vào mục sở thích của bản thân.

10 Xem dấu sách Cho phép người dùng xem danh sách các dấu sách đã được lưu.

11 Xem sách yêu thích Cho phép người dùng xem được danh sách sách yêu thích đã được lưu.

12 Lịch sử truy cập Cho phép người dùng truy cập vào lịch sử những sách đã đọc thời gian gần nhất.

13 Thông tin chi tiết sách Cho phép người dùng xem thông tin chi tiết của sách bao gồm nội dung, tác giả, …

14 Chỉnh sửa thông tin tài khoản

Cho phép người dùng thay đổi thông tin cơ bản của tài khoản cá nhân.

15 Thay đổi mật khẩu Cho phép người dùng thay đổi mật khẩu của tài khoản

16 Chỉnh phông chữ Cho phép người dùng thay đổi kích cỡ phông chữ khi đang đọc sách điện tử.

17 Nổi bật văn bản Cho phép người dùng đánh dấu vị trí những chỗ nổi bật trong sách điện tử.

18 Thay đổi cách đọc sách Cho phép người dùng thay đổi cách đọc sách điện tử ở dạng cuộn và dạng trang sách.

19 Danh mục chương Cho phép người dùng lựa chọn danh mục các chương trong sách điện tử và sách nói.

20 Giao diện đọc sách Cho phép người dùng thay đổi giao diện đọc sách điện tử với các chế độ nền sáng, nền tối.

21 Phóng to Cho phép người dùng phóng to màn hình khi đang đọc sách điện tử.

22 Toàn màn hình Cho phép người dùng đọc sách điện tử trong chế độ toàn màn hình.

23 Chỉnh sửa màu chữ và màu nền

Cho phép người dùng thay đổi màu chữ và màu nền trong giao diện đọc sách điện tử.

24 Chuyển sách Cho phép người dùng chuyển sang chương khác của sách nói hoặc tự động chuyển khi chương kết thúc.

25 Tua nhanh chậm Cho phép người dùng tua nhanh hoặc chậm khi đang nghe sách nói.

26 Thay đổi tốc độ đọc Cho phép người dùng thay đổi tốc độ độc của sách nói.

27 Lặp lại Cho phép người dùng lặp lại chương sách nói đang được bật.

28 Hẹn giờ Cho phép người dùng hẹn giờ để tự động tắt sách nói đang bật.

29 Đồng bộ sách nói Cho phép người dùng chuyển đến vị trí sách đang nghe sang vị trí sách điện tử tương ứng.

30 Đồng bộ sách điện tử Cho phép người dùng chuyển vị trí sách điện tử đang đọc sang vị trí sách nói tương ứng.

1.1.3 Biểu đồ Usecase tổng quát

Hình 2.1: Usecase tổng quan hệ thống

1.2 Một số chức năng chính của hệ thống

Người dùng mới có thể dễ dàng tạo tài khoản bằng cách cung cấp các thông tin cần thiết như tên, năm sinh, số điện thoại, địa chỉ email hợp lệ và mật khẩu an toàn Chức năng này không chỉ giúp người dùng truy cập vào ứng dụng mà còn cho phép họ sử dụng đầy đủ các tính năng mà ứng dụng cung cấp.

Hình 2.2: Biểu đồ usecase chức năng Đăng ký

Bảng 4: Kịch bản chức năng Đăng ký

Người dùng chưa đăng ký tài khoản là tác nhân chính trong quá trình đăng ký Để đảm bảo tối thiểu, người dùng cần được phép đăng ký lại Mục tiêu cuối cùng là đảm bảo người dùng hoàn tất việc đăng ký tài khoản thành công vào ứng dụng hệ thống.

1 Người dùng mở ứng dụng và chọn chức năng "Đăng Ký" từ màn hình chính của ứng dụng.

2 Người dùng nhập thông tin cá nhân bao gồm tên, năm sinh, số điện thoại, địa chỉ email, mật khẩu và xác nhận mật khẩu.

3 Người dùng bấm nút “Đăng ký”.

4 Hệ thống xác thực, lưu trữ thông tin và người dùng được chuyển tiếp sang giao diện Đăng nhập.

4.1 Người dùng không nhập đủ thông tin yêu cầu

4.1.1 Hệ thống thông báo yêu cầu người dùng phải nhập đủ các trường thông tin cần thiết.

4.2 Người dùng nhập email đã tồn tại

4.2.1 Hệ thống thông báo email đã tồn tại và yêu cầu người dùng nhập lại. 4.3 Người dùng nhập mật khẩu không đủ 6 ký tự.

4.3.1 Hệ thống thông báo lỗi và yêu cầu người dùng nhập lại.

1.2.2 Đăng nhập tài khoản với các bên thứ 3

Người dùng mới có thể dễ dàng tạo tài khoản bằng cách sử dụng tài khoản từ các dịch vụ bên thứ ba như Google hoặc Facebook Chức năng này giúp người dùng truy cập vào ứng dụng và tận hưởng đầy đủ các tính năng mà hệ thống cung cấp.

Hình 2.3: Biểu đồ usecase chức năng Đăng nhập với các bên thứ 3

Bảng 5: Kịch bản chức năng Đăng ký với các bên thứ 3

Tên usecase Đăng nhập với các bên thứ 3

Người dùng chưa đăng nhập tài khoản sẽ cần đăng nhập lại để đảm bảo tối thiểu Để đạt được điều này, người dùng cần đăng ký tài khoản thành công và sau đó có thể đăng nhập vào ứng dụng một cách dễ dàng.

1 Người dùng mở ứng dụng.

2 Người dùng chọn đăng nhập qua tài khoản Google hoặc tài khoản mạng xã hội (Google, Facebook …).

3 Hệ thống hiển thị màn hình đăng nhập với bên tài khoản thứ 3.

4 Người dùng nhập thông tin tài khoản, mật khẩu và đăng nhập

5 Hệ thống bên thứ 3 xác thực thông tin và gửi thông tin trả lại hệ thống Hệ thống xác thực thông tin, lưu trữ thông tin và người dùng được chuyển sang giao diện Đăng nhập.

5.1 Người dùng không nhập đủ thông tin yêu cầu

5.1.1 Hệ thống thông báo yêu cầu người dùng phải nhập đủ các trường thông tin cần thiết.

5.2 Hệ thống bên thứ 3 xác thực sai thông tin

5.2.1 Hệ thống yêu cầu người dùng nhập lại thông tin đăng nhập với các tài khoản thứ 3.

Người dùng có thể dễ dàng đăng nhập vào ứng dụng bằng tài khoản và mật khẩu đã đăng ký, cho phép họ truy cập đầy đủ các chức năng của ứng dụng Chức năng này đảm bảo rằng người dùng có trải nghiệm sử dụng mượt mà và an toàn.

Hình 2.4: Biểu đồ use case chức năng Đăng nhập Bảng 6: Kịch bản chức năng Đăng nhập

Người dùng chưa đăng nhập vào hệ thống cần thực hiện đăng nhập lại để đảm bảo quyền truy cập Để đảm bảo thành công, người dùng phải hoàn tất quá trình đăng nhập và truy cập vào ứng dụng hệ thống một cách hiệu quả.

1 Người dùng mở ứng dụng

2 Hệ thống hiển thị chức năng "Đăng Nhập".

3 Người dùng nhập tài khoản, mật khẩu và bấm nút đăng nhập.

4 Hệ thống kiểm tra và xác thực thông tin đăng nhập Hệ thống xác thực, thông báo người dùng đăng nhập thành công và chuyển đến giao diện chính của ứng dụng

4.1 Người dùng không nhập đủ thông tin yêu cầu

4.1.1 Hệ thống thông báo yêu cầu người dùng phải nhập đủ các trường thông tin cần thiết.

4.2 Người dùng nhập sai định dạng của email.

4.2.1 Hệ thống thông báo sai email định dạng và yêu cầu người dùng nhập lại.

4.3 Người dùng nhập sai thông tin đăng nhập.

4.3.1 Hệ thống thông báo lỗi và yêu cầu người dùng nhập lại.

1.2.4 Đọc sách điện tử (Reading e-book)

Người dùng có thể dễ dàng chọn sách từ thư viện trên giao diện chính của ứng dụng và đọc trực tiếp trên điện thoại Giao diện hiển thị thông tin và đánh giá sách, cho phép người dùng tùy chỉnh cỡ chữ, màu sắc, độ sáng và đánh dấu trang hiện tại, từ đó tối ưu hóa trải nghiệm đọc sách.

Hình 2.5: Biểu đồ usecase chức năng Đọc sách điện tử Bảng 7: Kịch bản chức năng Đọc sách điện tử

Tên usecase Đọc sách điện tử

Tác nhân chính Người dùng (User) Điều kiện - Người dùng đăng nhập vào hệ thống.

- Người dùng có ít nhất 1 quyển sách ebook trong thư viện của mình. Đảm bảo thành công Người dùng đọc được sách điện tử.

1 Người dùng đăng nhập thành công vào ứng dụng.

2 Hệ thống hiển thị giao diện chính của ứng dụng Hệ thống hiển thị danh sách các sách điện tử được phân loại chia theo thể loại, sách yêu thích và sách khuyến nghị.

3 Người dùng bấm chọn vào một quyển sách.

4 Giao diện thông tin và đánh giá sách được hiển thị.

5 Người dùng bấm nút Đọc sách.

6 Hệ thống hiển thị nội dung sách và người dùng có thể cuộn trang, và đánh dấu trang sách hiện tại, thêm sách vào mục yêu thích

1.2.5 Nghe sách (Listening audio book)

Người dùng có thể dễ dàng chọn chức năng audiobook từ thư viện trên giao diện chính của ứng dụng, cho phép nghe như một tệp âm thanh Họ có thể điều chỉnh âm lượng, tạm dừng, tua nhanh, tua chậm và lựa chọn từng phần muốn nghe theo ý thích Bên cạnh đó, tính năng tạm dừng và lưu lại phần đang nghe cũng được hỗ trợ, mang lại trải nghiệm tiện lợi và linh hoạt.

Hình 2.6: Biểu đồ usecase chức năng Nghe sách trực tuyến

Bảng 8: Kịch bản chức năng Nghe sách

Tác nhân chính Người dùng (User) Điều kiện - Người dùng đăng nhập vào hệ thống.

- Người dùng có ít nhất 1 quyển sách trong thư viện của mình. Đảm bảo thành công Người dùng nghe được sách từ ứng dụng hệ thống.

1 Người dùng đăng nhập thành công vào ứng dụng.

2 Hệ thống hiển thị giao diện chính của ứng dụng Hệ thống hiển thị danh sách các sách điện tử được phân loại chia theo thể loại, sách yêu thích và sách khuyến nghị.

3 Người dùng bấm chọn vào một quyển sách.

4 Giao diện thông tin và đánh giá sách được hiển thị.

5 Người dùng bấm nút Nghe sách.

6 Ứng dụng bắt đầu phát âm thanh và người dùng có thể sử dụng các nút điều chỉnh như tăng/giảm âm lượng, tạm dừng, tua nhanh/tua chậm, chuyển đoạn qua các phần hoặc đánh dấu lưu phần đang nghe hiện tại.

1.2.6 Chỉnh sửa thông tin tài khoản (Profile)

- Mô tả chức năng: Người dùng có thể xem và chỉnh sửa thông tin cá nhân tài khoản của họ từ hồ sơ người dùng

Hình 2.7: Biểu đồ usecase chức năng Chỉnh sửa thông tin tài khoản

Bảng 9: Kịch bản chức năng Chỉnh sửa thông tin tài khoản

Tên usecase Chỉnh sửa thông tin tài khoản

Người dùng là tác nhân chính trong hệ thống, với điều kiện là họ đã đăng nhập thành công Khi đó, người dùng có khả năng chỉnh sửa thông tin tài khoản và cá nhân của mình một cách dễ dàng.

1 Người dùng đăng nhập thành công vào ứng dụng.

2 Hệ thống hiển thị giao diện chính của ứng dụng

3 Người dùng chọn chức năng “Thông tin tài khoản” ở trên giao diện chính.

4 Hệ thống hiển thị trang quản lý thông tin cá nhân của người.

5 Người dùng chọn chức năng chỉnh sửa thông tin cá nhân.

6 Hệ thống hiện thị trang sửa thông tin cá nhân với các ô nhập.

7 Người dùng thực hiện điền thông tin cá nhân muốn sửa và bấm nút Xác nhận.

8 Hệ thống xác thực thông tin được nhập, lưu trữ vào cơ sở dữ liệu và chuyển tiếp sang màn hình Thông tin tài khoản.

1.1 Người dùng không nhập đủ thông tin yêu cầu

1.1.1 Hệ thống thông báo yêu cầu người dùng phải nhập đủ các trường thông tin cần thiết.

1.1.2 Người dùng nhập sai định dạng của các trường.

1.1.3 Hệ thống thông báo sai định dạng ở các trường ô nhập đó và yêu cầu người dùng nhập lại.

1.2.7 Đánh dấu sách (Book mark)

- Mô tả chức năng: Người dùng có thể đánh dấu trang hoặc vị trí trong sách ebook hoặc audiobook để tìm lại dễ dàng sau này.

Hình 2.8: Biểu đồ usecase chức năng Đánh dấu sách

Bảng 10: Kịch bản chức năng Đánh dấu sách

Tên usecase Đánh dấu sách

Tác nhân chính Người dùng (User) Điều kiện - Người dùng đăng nhập vào hệ thống.

- Người dùng có ít nhất 1 quyển sách trong thư viện của mình. Đảm bảo thành công Người lưu được trạng thái sách đang đọc của mình vào hệ thống

1 Người dùng đăng nhập thành công vào ứng dụng.

2 Hệ thống hiển thị giao diện chính của ứng dụng Hệ thống hiển thị danh sách các sách điện tử được phân loại chia theo thể loại, sách yêu thích và sách khuyến nghị.

3 Người dùng bấm chọn vào một quyển sách.

4 Giao diện thông tin và đánh giá sách được hiển thị.

5 Người dùng bấm Đọc/Nghe sách.

6 Hệ thống chuyển tiếp sang giao diện ứng dụng dùng để đọc/nghe sách

7 Người dùng chọn biểu tượng Đánh dấu sách trên giao diện.

8 Hệ thống xác nhận và lưu lại thông tin số trang hoặc vị trí audio book.

1.2.8 Thêm sách yêu thích (Favorite book)

- Mô tả chức năng: Người dùng có thể thêm sách vào danh sách yêu thích để dễ dàng truy cập sau này.

Hình 2.9: Biểu đồ usecase chức năng Thêm sách yêu thích

Bảng 11: Kịch bản chức năng Thêm sách yêu thích

Tên usecase Thêm sách yêu thích

Tác nhân chính Người dùng (User) Điều kiện - Người dùng đăng nhập vào hệ thống.

- Người dùng có ít nhất 1 quyển sách trong thư viện của mình. Đảm bảo thành công Người thêm được sách vào danh mục yêu thích của mình

1 Người dùng đăng nhập thành công vào ứng dụng.

KIẾN TRÚC HỆ THỐNG

2.1 Sơ đồ mô tả kiến trúc hệ thống

Trong hệ thống quản lý sách, các đối tượng thực thể cần xử lý bao gồm: Người dùng (Lớp thực thể User), Quyển sách (Lớp thực thể Book), Tác giả (Lớp thực thể Author), Nhà xuất bản (Lớp thực thể Publishing house), Đơn hàng (Lớp thực thể Order), Sách yêu thích (Lớp thực thể User favorite), Giỏ hàng (Lớp thực thể User cart), Danh mục (Lớp thực thể Category), Dấu sách (Lớp thực thể Book mark), Đánh giá (Lớp thực thể Ratings), Thanh toán (Lớp thực thể Payment), và Theo dõi đơn hàng (Lớp thực thể Tracking) Những lớp thực thể này đóng vai trò quan trọng trong việc tổ chức và quản lý thông tin liên quan đến sách và người dùng.

Trong hệ thống quản lý sách, các mối quan hệ số lượng giữa các lớp thực thể được xác định như sau: Một quyển sách (Book) có thể được viết bởi nhiều tác giả (Authors), và một tác giả có thể viết nhiều quyển sách, tạo thành mối quan hệ n-n với lớp kết nối giữa Books và Authors Tương tự, một quyển sách có thể được mua bởi nhiều người dùng (Users), và một người dùng có thể mua nhiều quyển sách, hình thành mối quan hệ n-n với lớp kết nối mua sách Ngoài ra, một quyển sách có thể nằm trong nhiều đơn hàng (Orders), và một đơn hàng có thể chứa nhiều quyển sách, cũng tạo thành mối quan hệ n-n với lớp kết nối giữa Books và Orders Một quyển sách có thể thuộc nhiều thể loại (Categories), và một thể loại có thể chứa nhiều quyển sách, dẫn đến mối quan hệ n-n với lớp kết nối giữa Books và Categories Các mối quan hệ n-n khác cũng tồn tại khi một quyển sách có thể được đọc/nghe, đánh giá, và yêu thích bởi nhiều người dùng, trong khi một người dùng cũng có thể thực hiện các hành động tương tự với nhiều quyển sách, mỗi trường hợp đều cần một lớp kết nối riêng.

2.3 Biểu đồ lớp thực thể pha phân tích

Hình 2.11: Biểu đồ lớp thực thể pha phân tích

2.4 Biểu đồ lớp thực thể pha thiết kế

Hình 2.12: Biểu đồ lớp thực thể pha thiết kế

Hình 2.13: Cơ sở dữ liệu

2.6.1 Biểu đồ hoạt động Module Đăng nhập

Hình 2.14: Biểu đồ hoạt động module Đăng nhập 2.6.2 Biểu đồ hoạt động Module Đăng ký

Hình 2.15: Biểu đồ hoạt động module Đăng ký

2.6.3 Biểu đồ hoạt động Module Đăng nhập tài khoản với bên thứ 3

Hình 2.16: Biểu đồ hoạt động module Đăng nhập tài khoản với các bên thứ 3 2.6.4 Biểu đồ hoạt động Module Đọc sách điện tử

Hình 2.17: Biểu đồ hoạt động module Đọc sách điện tử

2.6.5 Biểu đồ hoạt động Module Nghe sách trực tuyến

Hình 2.18: Biểu đồ hoạt động module Nghe sách trực tuyến 2.6.6 Biểu đồ hoạt động Module Đánh dấu sách

Hình 2.19: Biểu đồ hoạt động module Đánh dấu sách

2.6.7 Biểu đồ hoạt động Module Chỉnh sửa thông tin tài khoản

Hình 2.20: Biểu đồ hoạt động module Chỉnh sửa thông tin tài khoản

2.6.8 Biểu đồ hoạt động Module Thêm sách yêu thích

Hình 2.21: Biểu đồ hoạt động module Thêm sách yêu thích 2.6.9 Biểu đồ hoạt động Module Truy cập lịch sử

Hình 2.22: Biểu đồ hoạt động module Truy cập lịch sử sách

CHƯƠNG 3: PHÁT TRIỂN ỨNG DỤNG

PHÁT TRIỂN CHỨC NĂNG ĐỌC SÁCH ĐIỆN TỬ

Hình 3.1: Giao diện Đọc sách điện tử (1) Hình 3.2: Giao diện Đọc sách điện tử (2)

Hình 3.3: Giao diện Đọc sách điện tử (3) Hình 3.4: Giao diện Đọc sách điện tử (4)

Hình 3.4: Giao diện Đọc sách điện tử (5) Hình 3.5: Giao diện Đọc sách điện tử (6)

Sử dụng thư viện ReactReader giúp người dùng đọc các định dạng sách điện tử phổ biến như epub và pdf Ứng dụng cung cấp nhiều chức năng hỗ trợ như lựa chọn chương, thay đổi phông chữ, đánh dấu nội dung, chuyển đổi giữa chế độ đọc trang và cuộn, cũng như tùy chỉnh nền sáng hoặc tối.

The ReactReader component allows users to read ePub files by specifying a URL, while also adapting to dark or light themes based on user preferences It tracks the reader's location within the book, updating it in local storage for continuity Additionally, it integrates with a table of contents (TOC) to facilitate navigation by identifying the current chapter based on the displayed location.

=== href) setPage(`Page ${displayed.page} of ${displayed.total} in chapter ${chapter ? chapter.label : 'n/a' }`

}} tocChanged={(_toc: NavItem[]) => (toc.current = _toc)} getRendition={(_rendition: Rendition) => { renditionRef.current = _rendition setRendition(_rendition);

_rendition.hooks.content.register((contents: Contents) => { const body = contents.window.document.querySelector('body') if (body) { body.oncontextmenu = () => { return false

}} epubOptions={getLocalStorage('is_scroll', false) ? { flow:

The API GET method retrieves information about eBooks using the userId parameter, allowing access to the database to fetch the eBooks that the user has purchased and added to their library The function `findAllBookBuyByUser (userId: number)` checks for the user’s existence in the database using Prisma If the user is not found, it returns a failure response.

'User ' + RESPONSE_MESSAGE.NOT_FOUND,

} const books = await this.prisma.userBuyBook.findMany({ where: { userId: userId,

}, include: { book: { include: { authorsBooks: { include: { author: true,

}); if (!books) { return new FailureResponse(

'Books ' + RESPONSE_MESSAGE.NOT_FOUND,

} return new SuccessResponseArray(STATUS_CODE.OK,

Hình 3.6: Ví dụ kết quả trả về sau lấy thông tin sách điện tử thành công

PHÁT TRIỂN CHỨC NĂNG NGHE SÁCH TRỰC TUYẾN

Chức năng nghe sách trực tuyến cho phép người dùng lựa chọn audiobook từ thư viện trên giao diện chính của ứng dụng, nghe như một tệp âm thanh Người dùng có thể dễ dàng điều chỉnh âm lượng, tạm dừng, tua nhanh, tua chậm và chọn từng phần mong muốn nghe Đặc biệt, tính năng tạm dừng và lưu lại phần đang nghe giúp người dùng tiếp tục trải nghiệm một cách thuận tiện.

Hình 3.7: Giao diện Nghe sách trực tuyến (1) Hình 3.8: Giao diện Nghe sách trực tuyến (2)

Sử dụng thư viện React Native Sound cho phép đọc các định dạng âm thanh phổ biến như MP3, AAC và ID3 trong ứng dụng sách nói Ứng dụng tích hợp nhiều chức năng hữu ích như lựa chọn chương, thay đổi tốc độ phát và tua nhanh hoặc chậm, nhằm nâng cao trải nghiệm người dùng.

// Load the sound file when the component mounts const newSound = new Sound('audio1.mp3', Sound.MAIN_BUNDLE, error

=> { if (error) { console.log('Error loading sound: ', error); return;

// Release the sound and clear the interval when the component unmounts return () => { if (newSound) { newSound.release();

To access purchased e-books, the API GET retrieves information using the userId parameter, allowing access to the database for the user's library The function `findAllBookBuyByUser (userId: number)` checks for the user's existence in the database with Prisma If the user is not found, it returns a failure response.

'User ' + RESPONSE_MESSAGE.NOT_FOUND,

} const books = await this.prisma.userBuyBook.findMany({ where: { userId: userId,

}, include: { book: { include: { authorsBooks: { include: { author: true,

}); if (!books) { return new FailureResponse(

'Books ' + RESPONSE_MESSAGE.NOT_FOUND,

} return new SuccessResponseArray(STATUS_CODE.OK,

Hình 3.9: Ví dụ kết quả trả về sau lấy thông tin sách điện tử thành công

PHÁT TRIỂN CHỨC NĂNG ĐĂNG KÝ, ĐĂNG NHẬP

- Chức năng Đăng nhập: Cho phép người dùng sử dụng tài khoản đã được đăng ký trong hệ thống để đăng nhập vào ứng dụng.

Hình 3.10: Giao diện Đăng nhập (1) Hình 10.11: Giao diện Đăng nhập (2)

Người dùng cần điền đầy đủ thông tin và nhấn nút đăng nhập Hàm “handleLogin” trong ứng dụng sẽ thực hiện việc xác minh thông tin Sau khi xác nhận thành công, hệ thống sẽ gửi phản hồi cho người dùng.

API POST Login đến server yêu cầu đăng nhập.

Sau khi server nhận yêu cầu từ API Login, nó sẽ xử lý thông tin và truy xuất dữ liệu từ database để trả về thông tin của người dùng cùng với các token theo tiêu chuẩn.

JWT. async login(email: string, password: string): Promise { let user = await this.prisma.user.findFirst({ where: { email } }); if (!user) { throw new NotFoundException(`Email chưa được đăng ký!!`);

} const isPasswordValid = await bcrypt.compare( password, user.encryptedPassword,

); if (!isPasswordValid) { throw new UnauthorizedException('Mật khẩQ u không đúng!!');

} delete user.encryptedPassword; return { accessToken: this.jwtService.sign(

{ userId: user.id, role: user.roleId },

{ userId: user.id, role: user.roleId },

Hình 3.12: Ví dụ kết quả trả về sau khi đăng nhập thành công

Người dùng mới có thể dễ dàng tạo tài khoản bằng cách cung cấp tên, năm sinh, số điện thoại, địa chỉ email hợp lệ và mật khẩu an toàn Chức năng đăng ký này giúp người dùng truy cập vào ứng dụng và sử dụng đầy đủ các tính năng mà ứng dụng cung cấp.

Hình 3.13: Giao diện Đăng ký (1) Hình 3.14: Giao diện Đăng ký (2)

Người dùng cần điền đầy đủ thông tin và nhấn nút đăng ký Hàm “handleSignUp” trong ứng dụng sẽ xác minh các thông tin đã nhập Sau khi xác nhận thành công, hệ thống sẽ gửi yêu cầu đăng ký tài khoản mới đến server thông qua API POST SignUp.

After the server receives a request from the SignUp API, it processes the information to create a new user and stores it in the database, subsequently returning the user information The function `createNewUser ` utilizes `CreateUser Dto` to parse the incoming request for user creation.

); let user; try { user = await this.prisma.user.create({ data: {

} catch (e: unknown) { if (typeof e === 'string') { console.log(e.toUpperCase());

} else if (e instanceof Error) { console.log(e.message);

Hình 3.15: Ví dụ kết quả trả về sau khi đăng ký thành công

3.3 Chức năng Đăng nhập với tài khoản thứ 3

Chức năng đăng nhập bằng tài khoản thứ 3 cho phép người dùng mới dễ dàng tạo tài khoản thông qua các nền tảng như Google và Facebook Tính năng này giúp người dùng nhanh chóng truy cập vào ứng dụng và tận hưởng đầy đủ các chức năng mà hệ thống cung cấp.

- Firebase console trong Android apps

- Các tài khoản Google đăng nhập thông qua Firebase

Hình 3.18: Giao diện Đăng nhập Hình 3.19: Giao diện đăng nhập bằng tài khoản Google

Người dùng nhấn vào biểu tượng Google, ứng dụng sẽ sử dụng thư viện Firebase để thực hiện yêu cầu đăng nhập trên thiết bị di động thông qua hàm “signInGoogle” Sau khi đăng nhập thành công, Firebase sẽ lấy thông tin tài khoản Google và gửi lại cho ứng dụng.

// Get the users ID token const {idToken} = await GoogleSignin.signIn();

// Create a Google credential with the token const googleCredential = auth.GoogleAuthProvider.credential(idToken);

// Sign-in the user with the credential const user = await auth().signInWithCredential(googleCredential); return user;

} catch (error: any) { if (error.code === statusCodes.SIGN_IN_CANCELLED) {

// user cancelled the login flow

} else if (error.code === statusCodes.IN_PROGRESS) {

// operation (e.g sign in) is in progress already

} else if (error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE) {

// play services not available or outdated

// some other error happened console.log(error);

Sau khi ứng dụng nhận thông tin tài khoản Google từ Firebase, quá trình đăng nhập vào hệ thống sẽ diễn ra, giúp lấy được các JWT "token" cần thiết cho ứng dụng.

Máy chủ nhận thông tin tài khoản Google và thực hiện kiểm tra Nếu tài khoản chưa tồn tại, thông tin sẽ được lưu trữ vào cơ sở dữ liệu Sau đó, máy chủ gửi lại ứng dụng thông tin của người dùng.

In the context of JWT standards, the `loginSocial` function processes user login requests by extracting the email and password from the `CreateUser Request` It checks for the existence of a user with the provided email using Prisma, and if the user is found, it validates the password by comparing it with the encrypted version stored in the database using bcrypt.

); if (!isPasswordValid) { throw new UnauthorizedException('LôX i login tài khoa Qn thứ 3!!'); } delete user.encryptedPassword; return { accessToken: this.jwtService.sign({ userId: user.id },

{ expiresIn: '1d' }), refreshToken: this.jwtService.sign({ userId: user.id },

} else { const userDto = await new

CreateUserDto().ParseFromRequest(createUserRequest); let user = null; try { user = await this.prisma.user.create({ data: {

} catch (e: unknown) { if (typeof e === 'string') { console.log(e.toUpperCase());

} else if (e instanceof Error) { console.log(e.message);

} return { accessToken: this.jwtService.sign({ userId: user.id },

{ expiresIn: '1d' }), refreshToken: this.jwtService.sign({ userId: user.id },

Hình 3.20: Ví dụ kết quả trả về sau khi đăng nhập thành công

PHÁT TRIỂN CHỨC NĂNG CHỈNH SỬA THÔNG TIN TÀI KHOẢN .72 5 MỘT SỐ GIAO DIỆN CHỨC NĂNG KHÁC CỦA ỨNG DỤNG

Hình 3.21: Giao diện Thông tin tài khoản

Hình 3.22: Giao diện Chỉnh sửa thông tin

Sau khi người dùng nhấp vào biểu tượng chỉnh sửa Hồ sơ trên thanh tác vụ, họ cần nhập đầy đủ thông tin tài khoản và nhấn nút xác nhận Ứng dụng sẽ gọi hàm “onEditProfile” để xác thực thông tin, sau đó gửi yêu cầu chỉnh sửa qua API Patch đến máy chủ.

} if (profileData.firstname === '' && profileData.lastname === '') { showToast('info', 'Vui lòng nhập tên!!'); return;

} dispatch(loadingSliceActions.setIsLoading(true)); const payload: Partial = {

profileData, id: currentUser.id, thumbnailUrl: selectedImage ? selectedImage : profileData.thumbnailUrl,

The profile editing process was successful, as indicated by a status code of 200 from the API response Following this, the current user information was updated in the application state After a brief loading period, a success toast message was displayed, and the user was navigated back to the previous screen.

Server sẽ xác thực thông tin chỉnh sửa tài khoản và lưu trữ vào cơ sở dữ liệu Sau khi hoàn tất, server sẽ gửi thông báo thành công về cho ứng dụng.

update({ where: { id: id }, data: updateUserDto })

STATUS_CODE.SERVER_INTERNAL_ERROR,

RESPONSE_MESSAGE.SERVER_INTERNAL_ERROR, e,

5 MỘT SỐ GIAO DIỆN CHỨC NĂNG KHÁC CỦA ỨNG DỤNG

Hình 3.23: Giao diện Thư viện (1) Hình 3.24: Giao diện Thư viện (2)

Hình 3.25: Giao diện Thông tin sách (1) Hình 3.26: Giao diện Thông tin sách (2)

Hình 3.27: Giao diện Tìm kiếm sách (1) Hình 3.28: Giao diện Tìm kiếm sách (2)

Hình 3.29: Giao diện Lịch sử truy cập Hình 3.30: Giao diện Sách yêu thích

HỆ THỐNG KHUYẾN NGHỊ

Hệ thống khuyến nghị là công cụ thông minh nhằm cá nhân hóa trải nghiệm người dùng Sau khi đã trình bày cơ sở lý thuyết ở Chương 1, chúng ta sẽ áp dụng hệ thống này vào ứng dụng nghe và đọc sách.

6.1 Các thư viện sử dụng và xử lý dữ liệu:

- Pandas: Thư viện cung cấp cấu trúc, công cụ phân tích và xử lý dữ liệu đặc biệt.

- Numpy: Sử dụng để tính toán, các mảng đa chiều và cấc chức năng hỗ trợ khác.

- Matplotlib: Thư viện vẽ biểu đồ, đồ thị và hình ảnh để trực quan hoá dữ liệu.

Cosine Similarity là một công cụ trong thư viện scikit-learn, được sử dụng để tính toán độ tương đồng cosine giữa các vector Công cụ này giúp đo lường sự tương đồng giữa các đặc trưng của sách, từ đó xác định mức độ tương đồng giữa chúng.

- Regular Expression: Thư viện cung cấp công cụ để xử lý và phân tích các biểu thức chính quy trong Python.

- PIL: Là 1 thư viện mạnh mẽ để mở, chỉnh sửa và lưu trữ các hình ảnh.

- Random: Thư viện này cung cấp các công cụ để làm việc với số ngẫu nhiên.

CountVectorizer là một công cụ trong thư viện scikit-learn, giúp chuyển đổi danh sách văn bản thành ma trận đặc trưng dựa trên tần suất xuất hiện của từng từ trong các văn bản.

NLTK, hay Natural Language Toolkit, là một thư viện mạnh mẽ trong Python, cung cấp các công cụ và tài nguyên cần thiết cho xử lý ngôn ngữ tự nhiên Thư viện này bao gồm các chức năng như tokenization và stopwords, cùng với nhiều nguồn dữ liệu hữu ích cho việc phân tích ngôn ngữ.

- Stopwords: NLTK cung cấp danh sách các stopwords, các từ phổ biến như "và", "là",

"của", không mang ý nghĩa đặc biệt trong việc phân tích ngôn ngữ, thường được loại bỏ trong quá trình xử lý văn bản.

- Có 3 bảng dữ liệu chính sau bao gồm Ratings, Users và Books.

Hình 3.32: Cấu trúc dữ liệu từ file csv mẫu

Để đảm bảo chất lượng dữ liệu, việc làm sạch và xử lý dữ liệu về sách và đánh giá là rất quan trọng Quá trình này bao gồm việc loại bỏ dữ liệu thiếu, xóa các cột không cần thiết, chuẩn hóa tiêu đề sách và loại bỏ những đánh giá không hợp lý Những bước này giúp cải thiện độ chính xác và tính khả thi của phân tích dữ liệu.

Để xác định những cuốn sách phổ biến nhất, chúng ta cần tính toán số lượt đánh giá và điểm đánh giá trung bình cho từng cuốn sách Sau đó, thông tin đánh giá sẽ được kết hợp để đưa ra giá trị trung bình của điểm đánh giá cùng với ngưỡng số lượt đánh giá đáng tin cậy Kết quả cuối cùng sẽ là danh sách các sách được yêu thích nhất.

Công thức tính trọng số giúp xác định "weighted_avg" được tính bằng công thức: weighted_avg = (v * R) + (m * C) / (v + m), trong đó v là số lượt đánh giá cho sách, R là điểm đánh giá trung bình của sách, C là điểm đánh giá trung bình của tất cả các sách trong tập dữ liệu, và m là ngưỡng số lượng đánh giá đáng tin cậy, thường được xác định dựa trên phân vị nhất định của số lượt đánh giá.

Để xác định danh sách sách phổ biến, chúng ta sử dụng chỉ số phổ biến dựa trên hàm weighted_rate, thường được áp dụng để đánh giá sự phổ biến của sản phẩm dựa trên số lượng và chất lượng của các đánh giá Hàm popular_books(df, n0) sẽ nhóm các đánh giá theo tiêu đề sách và đếm số lượng đánh giá cho mỗi cuốn sách thông qua câu lệnh rating_countgroupby("BookTitle").count()["BookRating"] Kết quả sẽ được sắp xếp theo chỉ số phổ biến này để hiển thị những cuốn sách được yêu thích nhất.

reset_index() rating_count.rename(columns={"BookRating":"NumberOfVotes"}, inplace=True) rating_averagegroupby("BookTitle")["BookRating"].mean()

reset_index() rating_average.rename(columns={"BookRating":"AverageRatings"}, inplace=True) popularBooks=rating_count.merge(rating_average,on="Book-Title")

C=popularBooks["AverageRatings"].mean() m=popularBooks["NumberOfVotes"].quantile(0.90) def weighted_rate(x): v=x["NumberOfVotes"]

R=x["AverageRatings"] return ((v*R) + (m*C)) / (v+m) popularBooks=popularBooks[popularBooks["NumberOfVotes"] >%0] popularBooks["Popularity"]=popularBooks.apply(weighted_rate,axis=1) popularBooks=popularBooks.sort_values(by="Popularity",ascendingse) return popularBooks[["Book-

Title","NumberOfVotes","AverageRatings","Popularity"]].reset_index(drop

Hình 3.33: Kết quả 10 sách phổ biến nhất

Item-based collaborative filtering là phương pháp dự đoán sở thích của người dùng dựa trên lịch sử hành vi của họ với sản phẩm hoặc dịch vụ Để tính toán độ tương tự giữa các cuốn sách, cần sử dụng "Pivot table" trong tập dữ liệu hiện tại.

Bảng pivot (pivot table) là công cụ mạnh mẽ giúp tóm tắt và phân tích dữ liệu từ bảng lớn Nó chuyển đổi dữ liệu từ dạng dài, không cấu trúc sang dạng rộng, có cấu trúc, giúp người dùng dễ dàng hiểu và phân tích thông tin.

Để tính toán độ tương tự giữa các cuốn sách, tôi sẽ sử dụng hàm “pivot_table” tích hợp sẵn trong Pandas Hàm này sẽ giúp tạo bảng xoay, từ đó phân tích mối quan hệ giữa các cuốn sách dựa trên dữ liệu người dùng Cụ thể, tôi sẽ định nghĩa hàm `item_based` với tham số là tên cuốn sách, và sử dụng `common_books.pivot_table` để tính toán.

To generate book recommendations based on user preferences, we create a pivot table that correlates book ratings with a specific title By utilizing the correlation values, we can identify similar books and sort them accordingly If the selected book title exists in our recommendation dataset, we filter out that title from the results to ensure a diverse selection of recommendations.

] less_rating = recommendation_df[ recommendation_df["Book-Title"].apply( lambda x: df[df["Book-Title"] == x]["Book-Rating"].mean()

Ngày đăng: 22/12/2024, 08:38

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] “Sách điện tử”. [Online]. Available:https://vi.wikipedia.org/wiki/Sách_điện_tử[2] “Sách nói”. [Online]. Available:https://vi.wikipedia.org/wiki/Sách_nói Sách, tạp chí
Tiêu đề: Sách điện tử”. [Online]. Available:https://vi.wikipedia.org/wiki/Sách_điện_tử[2] “Sách nói
[3] “PostgreSQL: The World's Most Advanced Open Source Relational Database”.[Online]. Available Sách, tạp chí
Tiêu đề: PostgreSQL: The World's Most Advanced Open Source Relational Database
[4] “React Native: Setting up the development environment”. [Online]. Available:https://reactnative.dev/docs/environment-setup Sách, tạp chí
Tiêu đề: React Native: Setting up the development environment
[5] “A progressive Node.js framework for building efficient, reliable and scalable server-side applications”. [Online]. Available:https://docs.nestjs.com Sách, tạp chí
Tiêu đề: A progressive Node.js framework for building efficient, reliable and scalableserver-side applications
[6] “Next-generation & fully type-safe ORM for NestJS”. [Online]. Available:https://www.prisma.io/nestjs Sách, tạp chí
Tiêu đề: Next-generation & fully type-safe ORM for NestJS
[8] “Epubjs - Enhanced eBooks in the browser.”. [Online]. Available:https://idpf.org/epub/30/spec/epub30-overview.html[9] “Độ tương tự cosin” . [Online]. Available:https://vi.wikipedia.org/wiki/%C4%90%E1%BB%99_t%C6%B0%C6%A1ng_t%E1%BB%B1_cosin Sách, tạp chí
Tiêu đề: Epubjs - Enhanced eBooks in the browser.”. [Online]. Available:https://idpf.org/epub/30/spec/epub30-overview.html[9] “Độ tương tự cosin
[10] “Weighted arithmetic mean”. [Online]. Available:https://en.wikipedia.org/wiki/Weighted_arithmetic_mean Sách, tạp chí
Tiêu đề: Weighted arithmetic mean
[7] Trần Đình Quế. Phân tích và thiết kế hệ thống thông tin. Học viện Công nghệ Bưu chính Viễn thông. 2018https://www.postgresql.org/docs Link
[11] (PDF) Recommender Systems and Linked Open Data. [Online]. Available https://www.researchgate.net/publication/300646445_Recommender_Systems_and_Linked_Open_Data [accessed Nov 25 2023] Link

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w