| 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. |
| 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ả”. |
| Mã | Quy tắc | Mô tả chi tiết | Cách đảm bảo trong DB |
|---|---|---|---|
| 01 | Mỗi bài hát chỉ xuất hiện một lần trong playlist | Mộ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) |
| 02 | Người dùng chỉ có thể like một bài hát một lần | Một người dùng không thể like cùng một track nhiều lần. | PRIMARY KEY (user_id, track_id) |
| 03 | Lịch sử nghe chỉ ghi lại khi phát ≥ 30 giây | Khô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 |
| 04 | Lịch sử nghe được ghi khi skip sau ≥ 30 giây | Chỉ ghi nếu skip sau 30s. | API PlayService kiểm tra thời lượng. |
| 05 | Tên thể loại là duy nhất | Không trùng tên thể loại. | UNIQUE(name) |
| 06 | Email người dùng là duy nhất | Không thể tạo hai tài khoản cùng email. | UNIQUE(email) |
| 07 | Xóa playlist kéo theo xóa bài trong đó | Giữ dữ liệu đồng nhất. | ON DELETE CASCADE playlist_tracks |
| 08 | Xó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 |
| 09 | Track phải có độ dài hợp lệ | Tránh dữ liệu lỗi. | CHECK(duration > 0) |
| 10 | Subscription phải có ngày bắt đầu hợp lệ | Không thể null. | NOT NULL(start_date) |
| TC ID | Mục tiêu kiểm thử | Điều kiện đầu vào | Bước thực hiện | Kết quả mong đợi |
|---|---|---|---|---|
| TC01 | Thêm bài trùng vào playlist | Playlist đã có bài Shape of You | POST /playlist/{id}/add?track=ShapeOfYou | Báo lỗi “Track already exists”. |
| TC02 | Like cùng track 2 lần | User Minh like bài Perfect 2 lần | POST /like?track=Perfect (2 lần) | Lần 2 trả lỗi “Already liked”. |
| TC03 | Tìm kiếm không dấu tiếng Việt | Từ khóa “tinh yeu” | GET /search?q=tinh yeu | Trả về “Tình Yêu Màu Nắng”. |
| TC04 | Thêm bài hát hợp lệ vào playlist | Playlist trống | POST /playlist/add Perfect | Bài được thêm thành công. |
| TC05 | Ghi nhận lịch sử nghe ≥ 30s | Phát bài Perfect 35s | POST /history | Lưu record mới. |
| TC06 | Skip trước 30s không ghi lịch sử | Phát bài 15s rồi skip | Không gọi /history | Không có record mới. |
| TC07 | Sắp xếp lại playlist | Playlist có nhiều bài | Kéo bài Perfect lên đầu | sort_order cập nhật đúng. |
| TC08 | Đăng ký gói Premium hợp lệ | User đã login | POST /subscription Premium | Trạng thái cập nhật Premium. |
| TC09 | Thanh toán gói thất bại | Thanh toán bị từ chối | POST /subscription | Không có bản ghi mới. |
| TC10 | Follow và Unfollow nghệ sĩ | User chưa follow Sơn Tùng M-TP | POST /follow → DELETE /follow | Tạo rồi xóa record trong follows. |