-

🎵 Music Streaming

Thiết kế sơ đồ Use Case

Sơ đồ use case

User Use Cases

Use Case Brief Description Pre-Conditions Post-Conditions Basic Flow Alternate Flow
Đăng ký / Đăng nhập Người dùng tạo tài khoản hoặc đăng nhập để truy cập hệ thống. Chưa đăng nhập. Tài khoản hợp lệ, người dùng được chuyển đến trang chính. Nhập email và mật khẩu → Hệ thống xác thực → Đăng nhập thành công. Email tồn tại hoặc mật khẩu sai → thông báo lỗi.
Tìm kiếm nội dung Tìm kiếm bài hát, nghệ sĩ, album hoặc playlist qua từ khóa. Người dùng đã đăng nhập. Hiển thị danh sách kết quả liên quan. Nhập từ khóa → Hệ thống truy vấn → Hiển thị kết quả tìm kiếm. Không có kết quả → hiển thị thông báo “Không tìm thấy”.
Phát nhạc Nghe bài hát với các chức năng điều khiển (play/pause/next/...) Đăng nhập, có kết nối Internet. Bài hát phát thành công, lịch sử nghe được lưu. Chọn bài hát → Ghi lịch sử → Streaming (HLS/DASH) → Phát nhạc. Không tải được audio → hiển thị lỗi.
Trang bài hát (Lyrics + Metadata + Đề xuất) Hiển thị thông tin chi tiết, lời nhạc và các bài hát tương tự. Đang phát hoặc chọn bài hát cụ thể. Thông tin chi tiết hiển thị. Truy vấn dữ liệu bài hát → Hiển thị lyrics, metadata → Gợi ý bài tương tự. Dữ liệu bị lỗi hoặc không có lyrics → chỉ hiển thị metadata.
Yêu thích bài hát Người dùng thêm hoặc bỏ thích một bài hát. Đăng nhập. Bản ghi Like được thêm hoặc xóa trong cơ sở dữ liệu. Nhấn biểu tượng ❤️ → Thêm vào danh sách yêu thích. Đã thích → Nhấn lại để bỏ thích.
Theo dõi nghệ sĩ / album Người dùng theo dõi nghệ sĩ hoặc album để nhận cập nhật mới. Đăng nhập. Follow được ghi nhận trong hệ thống. Nhấn nút Theo dõi → Hệ thống lưu follow → Hiển thị thông báo thành công. Đã theo dõi → Nhấn lại để hủy theo dõi.
Quản lý Playlist Tạo, sửa, xóa hoặc chia sẻ danh sách phát cá nhân. Đăng nhập. Playlist được lưu hoặc cập nhật. Tạo playlist → Thêm bài hát → Lưu → Chia sẻ công khai. Playlist trống → cảnh báo lỗi.
Xem lịch sử nghe + Top10 Xem các bài hát đã nghe và thống kê top nghệ sĩ/bài hát yêu thích. Đã nghe ít nhất một bài hát. Lịch sử và thống kê được hiển thị. Chọn mục “Lịch sử nghe” → Hệ thống truy vấn PlayHistory → Hiển thị danh sách. Không có lịch sử → hiển thị thông báo.
Gói thuê bao (Subscription) Đăng ký gói trả phí để mở khóa tính năng cao cấp. Đăng nhập tài khoản. Trạng thái người dùng cập nhật sang Premium. Chọn gói → Thanh toán → Cập nhật trạng thái gói thuê bao. Thanh toán thất bại → thông báo lỗi.

Admin Use Cases

Use Case Brief Description Pre-Conditions Post-Conditions Basic Flow Alternate Flow
Quản lý Nghệ sĩ Admin thêm, sửa, xóa nghệ sĩ trong hệ thống. Admin đã đăng nhập. Dữ liệu nghệ sĩ được cập nhật. Chọn thêm mới → Nhập thông tin → Lưu → Hiển thị danh sách cập nhật. Nhập thiếu thông tin → hiển thị cảnh báo.
Quản lý Album Tạo hoặc chỉnh sửa album, gán nghệ sĩ và bài hát. Admin đã đăng nhập. Album được cập nhật trong cơ sở dữ liệu. Chọn album → Nhập metadata → Upload ảnh bìa → Lưu. File không hợp lệ → thông báo lỗi.
Quản lý Bài hát Upload bài hát, cập nhật lyrics và trạng thái xuất bản. Admin đã đăng nhập. Bài hát được thêm mới và sẵn sàng phát hành. Chọn file demo → Upload → Set Publish Status → Lưu. File âm thanh lỗi → không upload được.
Quản lý Thể loại Thêm, sửa, xóa thể loại âm nhạc. Admin đã đăng nhập. Thể loại được cập nhật thành công. Thêm thể loại → Nhập tên → Lưu → Hiển thị trong danh sách. Tên trùng lặp → cảnh báo lỗi.
Báo cáo lượt nghe Thống kê số lượt nghe theo ngày/tuần. Admin đã đăng nhập. Báo cáo được hiển thị. Chọn khoảng thời gian → Hệ thống tính toán → Hiển thị biểu đồ. Không có dữ liệu → hiển thị thông báo “Không có kết quả”.

Sequence Diagram

Phát một bài nhạc Thêm bài hát vào playlist

Thiết kế sơ đồ Thực thể–Kết hợp (ER)

Sơ đồ ER

ERD

Sơ đồ ER 🔗 Xem trên dbdiagram.io 📥 Tải về file CSDL (.sql)

Quy tắc nghiệp vụ và Test Case

I. Quy tắc nghiệp vụ (Business Rules)

Quy tắcMô tả chi tiếtCách đảm bảo trong DB
01Mỗi bài hát chỉ xuất hiện một lần trong playlistMột bài hát không thể được thêm trùng vào cùng một playlist.PRIMARY KEY (playlist_id, track_id)
02Người dùng chỉ có thể like một bài hát một lầnMột người dùng không thể like cùng một track nhiều lần.PRIMARY KEY (user_id, track_id)
03Lịch sử nghe chỉ ghi lại khi phát ≥ 30 giâyKhông ghi các lượt click nhầm hoặc skip quá sớm.Logic ứng dụng: chỉ insert khi position_sec ≥ 30
04Lịch sử nghe được ghi khi skip sau ≥ 30 giâyChỉ ghi nếu skip sau 30s.API PlayService kiểm tra thời lượng.
05Tên thể loại là duy nhấtKhông trùng tên thể loại.UNIQUE(name)
06Email người dùng là duy nhấtKhông thể tạo hai tài khoản cùng email.UNIQUE(email)
07Xóa playlist kéo theo xóa bài trong đóGiữ dữ liệu đồng nhất.ON DELETE CASCADE playlist_tracks
08Xóa nghệ sĩ kéo theo album & bài hátĐảm bảo toàn vẹn dữ liệu.ON DELETE CASCADE artists→albums→tracks
09Track phải có độ dài hợp lệTránh dữ liệu lỗi.CHECK(duration > 0)
10Subscription phải có ngày bắt đầu hợp lệKhông thể null.NOT NULL(start_date)

II. Test Case (10 TC)

TC IDMục tiêu kiểm thửĐiều kiện đầu vàoBước thực hiệnKết quả mong đợi
TC01Thêm bài trùng vào playlistPlaylist đã có bài Shape of YouPOST /playlist/{id}/add?track=ShapeOfYouBáo lỗi “Track already exists”.
TC02Like cùng track 2 lầnUser Minh like bài Perfect 2 lầnPOST /like?track=Perfect (2 lần)Lần 2 trả lỗi “Already liked”.
TC03Tìm kiếm không dấu tiếng ViệtTừ khóa “tinh yeu”GET /search?q=tinh yeuTrả về “Tình Yêu Màu Nắng”.
TC04Thêm bài hát hợp lệ vào playlistPlaylist trốngPOST /playlist/add PerfectBài được thêm thành công.
TC05Ghi nhận lịch sử nghe ≥ 30sPhát bài Perfect 35sPOST /historyLưu record mới.
TC06Skip trước 30s không ghi lịch sửPhát bài 15s rồi skipKhông gọi /historyKhông có record mới.
TC07Sắp xếp lại playlistPlaylist có nhiều bàiKéo bài Perfect lên đầusort_order cập nhật đúng.
TC08Đăng ký gói Premium hợp lệUser đã loginPOST /subscription PremiumTrạng thái cập nhật Premium.
TC09Thanh toán gói thất bạiThanh toán bị từ chốiPOST /subscriptionKhông có bản ghi mới.
TC10Follow và Unfollow nghệ sĩUser chưa follow Sơn Tùng M-TPPOST /follow → DELETE /followTạo rồi xóa record trong follows.

UI/UX Prototype

🔗 Trang Web Prototype Music Streaming

Demo Video

🔗 Midterm Git Reposity