--- title: 'PTUDW - Final Project - Online Academy' --- <style> div p { text-align: justify; text-justify: inter-word; } mark { background: none !important; font-family: monospace; color: #c0341d; font-weight: bold; } .markdown-body code { color: #c0341d !important; background-color: #fbe5e1 !important; font-weight: bold; } pre>code.hljs { color: inherit !important; background-color: inherit !important; font-weight: inherit !important; } </style> PTUDW - Final Project - Online Academy === ###### tags: `PTUDW-LT` `project` :::info **Yêu cầu**: xây dựng ứng dụng web **Online Academy** gồm các phân hệ & chức năng sau ::: ## 1. Phân hệ người dùng nặc danh - ==guest== ### 1.1 Hệ thống Menu - Hiển thị danh sách lĩnh vực ==category== - Có 2 cấp lĩnh vực - IT ➠ Lập trình Web - IT ➠ Lập trình thiết bị di động ### 1.2 Trang chủ - Hiển thị 3-4 khoá học nổi bật nhất trong tuần qua - Hiển thị 10 khoá học được xem nhiều nhất (ở mọi lĩnh vực) - Hiển thị 10 khoá học mới nhất (ở mọi lĩnh vực) - Hiển thị danh sách lĩnh vực được đăng ký học nhiều nhất trong tuần qua ###### Khuyến khích _hiệu ứng_ ở trang chủ - slideshow - carousel ### 1.3 Xem danh sách khoá học - Theo lĩnh vực ==category== - Có **phân trang** danh sách các khoá học ###### _Lưu ý_: Khoá học hiển thị trên trang chủ & trang danh sách gồm các thông tin sau - Tiêu đề - Lĩnh vực - Giảng viên - Đánh giá kèm số lượng học viên đánh giá - Ảnh đại diện khoá học - Giá đăng ký học kèm giá khuyến mại (nếu có) ### 1.4 Tìm kiếm khoá học :::success Sử dụng kỹ thuật `Full-text search`, cho phép user tìm với các từ khoá gần đúng. ::: - Tìm theo ==tên khoá học== and/or tìm theo ==lĩnh vực== - **Phân trang** kết quả - Sắp xếp theo ý người dùng - Điểm đánh giá giảm dần - Giá tăng dần - Những khoá học mới đăng hoặc các khoá học có nhiều học viên đăng ký học (Best Seller) sẽ có thể hiện khác với các khoá học còn lại :::warning Người dùng có thể click vào ==category== để chuyển nhanh sang màn hình ==XEM DANH SÁCH KHOÁ HỌC== ::: :::info Tham khảo https://www.udemy.com/courses/search/?src=ukw&q=python ::: ### 1.5 Xem chi tiết khoá học - Nội dung đầy đủ của khoá học - Ảnh đại diện (size lớn) - Tên khoá học - Mô tả ngắn gọn nội dung khoá học - Mô tả chi tiết nội dung khoá học - Điểm đánh giá & số lượng học viên đánh giá & số lượng học viên đăng ký học - Học phí & thông tin khuyến mại (nếu có) - Lần cập nhật cuối - Đề cương khoá học, cho phép xem trước (preview) một số chương - 5 khoá học khác cùng lĩnh vực được mua nhiều nhất - Thông tin giảng viên - Danh sách feedback của học viên về khoá học :::info Tham khảo thêm https://www.udemy.com/course/complete-python-bootcamp/ ::: ### 1.6 Đăng ký - Người dùng cần đăng ký tài khoản để có thể tham gia học cũng như thực hiện đánh giá, phản hồi chất lượng khoá học - Mật khẩu được mã hoá bằng thuật toán `bcrypt` - Thông tin - Họ tên - Email - Email không được trùng - Có ==xác nhận OTP== ## 2. Phân hệ học viên ### 2.1 Lưu khoá học vào danh sách yêu thích ==Watch List== - Thực hiện tại view ==Chi tiết khoá học== ### 2.2 Quản lý hồ sơ cá nhân - Thay đổi các thông tin: email, họ tên, mật khẩu (yêu cầu nhập mật khẩu cũ) - Xem danh sách khoá học yêu thích của mình (watchlist) - Loại bỏ các khoá học ra khỏi danh sách yêu thích - Xem danh sách khoá học mà mình đã đăng ký học ### 2.3 Tham gia khoá học - Học viên mua khoá học để có thể tham gia học - Hình thức học là xem các video của khoá học được cung cấp bởi giảng viên - Hệ thống lưu trữ trạng thái các bài giảng (video clip) mà học viên đã học giúp học viên dễ dàng theo dõi quá trình học của mình ### 2.4 Đánh giá & phản hồi các khoá học - Chỉ đánh giá & phản hồi các khoá mà học viên có tham gia học ### 2.5 Xem nội dung bài giảng - Xem các clip bài giảng của khoá học - Sử dụng thư viện javascript media player + https://plyr.io + https://videojs.com ## 3. Giảng viên ### 3.1 Đăng khoá học - Nhập đủ các thông tin của khoá học (xem phần ==Chi tiết khoá học==) - Mô tả khoá học - Hỗ trợ `WYSIWYG` - TinyMCE (https://www.tiny.cloud) - ckeditor (https://ckeditor.com) - quilljs (https://quilljs.com) - Bài giảng được đăng có thể chưa có đầy đủ các chương, khoá học sẽ có trạng thái là ==chưa hoàn thành==; khi giảng viên cập nhật nội dung các chương, khoá học sẽ có trạng thái ==đã hoàn thành== ### 3.2 Bổ sung thông tin & bài giảng cho khoá học - Cập nhật thông tin mô tả khoá học & nội dung khoá học - Upload video tương ứng với các chương còn thiếu - Đánh dấu ==Hoàn Thành== khi đã cập nhật đầy đủ nội dung của khoá học ### 3.3 Quản lý hồ sơ cá nhân - Cập nhật thông tin cá nhân, thông tin này được thể hiện ở view ==Chi tiết khoá học==, mục ==Thông tin giảng viên== - Xem danh sách khoá học do mình giảng dạy & đăng tải ## 4. Phân hệ quản trị viên - ==administrator== :::info ==Quản lý== bao gồm các thao tác sau: 1. Xem danh sách 1. Xem chi tiết 1. Thêm 1. Xoá 1. Cập nhật 1. Và các thao tác chuyên biệt khác ::: ### 4.1 Quản lý lĩnh vực ==category== - Các chức năng ==quản lý== cơ bản - Không được xoá lĩnh vực đã có khoá học ### 4.2 Quản lý khoá học - Gỡ bỏ khoá học ### 4.3 Quản lý danh sách học viên & giảng viên - Các chức năng ==quản lý== cơ bản :::warning - Tài khoản học viên có được từ chức năng đăng ký tài khoản - Tài khoản giảng viên do ban quản trị cấp riêng ::: ## 5. Các tính năng chung cho các phân hệ người dùng ### 5.1 Đăng nhập - Tự cài đặt - Hoặc sử dụng `passportjs` (http://www.passportjs.org) - _Khuyến khích_ cài đặt thêm chức năng đăng nhập qua Google, Facebook, Twitter, Github, ... ### 5.2 Cập nhật thông tin cá nhân - Họ tên - Email liên lạc ### 5.3 Đổi mật khẩu - Mật khẩu được mã hoá bằng thuật toán `bcrypt` ## 6. Các yêu cầu khác ### 6.1 Yêu cầu kỹ thuật - Web App **MVC** - Technical Stack - framework: `expressjs` - view engine: `handlebars/ejs` - db: `mysql/postgres/mongodb` - Chỉ hoàn thành **ĐÚNG** các chức năng được yêu cầu - Có thể bổ sung các hiệu ứng để tăng tính tiện dụng của từng chức năng cụ thể ### 6.2 Yêu cầu dữ liệu - Cần có ít nhất 10 khoá học thuộc 4-5 lĩnh vực, nội dung mô tả, hình ảnh & clips đầy đủ. - Các khoá học phải có thông tin đánh giá & feedback đầy đủ ### 6.3 Yêu cầu quản lý mã nguồn - Sinh viên cần upload mã nguồn lên ==github== từ lúc bắt đầu thực hiện đồ án. - Nhóm nào lịch sử commit/push không nghiêm túc ➠ 0đ.