feat: add like and save for playlist

This commit is contained in:
2026-05-30 18:17:27 +03:30
parent 8923810df3
commit 230bfc2ad8
4 changed files with 26 additions and 12 deletions
+6 -4
View File
@@ -12,7 +12,7 @@ class LikeController extends Controller
public function like(Request $request) public function like(Request $request)
{ {
$request->validate([ $request->validate([
'type' => 'required|string|in:music,media', 'type' => 'required|string|in:music,media,playlist',
'id' => 'required|integer', 'id' => 'required|integer',
]); ]);
@@ -39,7 +39,7 @@ public function like(Request $request)
public function unlike(Request $request) public function unlike(Request $request)
{ {
$request->validate([ $request->validate([
'type' => 'required|string|in:music,media', 'type' => 'required|string|in:music,media,playlist',
'id' => 'required|integer', 'id' => 'required|integer',
]); ]);
@@ -66,7 +66,7 @@ public function unlike(Request $request)
public function toggleLike(Request $request) public function toggleLike(Request $request)
{ {
$request->validate([ $request->validate([
'type' => 'required|string|in:music,media', 'type' => 'required|string|in:music,media,playlist',
'id' => 'required|integer', 'id' => 'required|integer',
]); ]);
@@ -110,6 +110,7 @@ public function myLikedItems(Request $request)
'types' => [ 'types' => [
'music' => 'App\\Models\\Music', 'music' => 'App\\Models\\Music',
'media' => 'App\\Models\\Media', 'media' => 'App\\Models\\Media',
'playlist' => 'App\\Models\\MusicPlaylist',
] ]
]); ]);
// Transform the response // Transform the response
@@ -167,7 +168,7 @@ public function myLikedItems(Request $request)
public function checkLiked(Request $request) public function checkLiked(Request $request)
{ {
$request->validate([ $request->validate([
'type' => 'required|string|in:music,media', 'type' => 'required|string|in:music,media,playlist',
'id' => 'required|integer', 'id' => 'required|integer',
]); ]);
@@ -227,6 +228,7 @@ private function getModelClass($type)
$models = [ $models = [
'music' => \App\Models\Music::class, 'music' => \App\Models\Music::class,
'media' => \App\Models\Media::class, 'media' => \App\Models\Media::class,
'playlist' => \App\Models\MusicPlaylist::class,
]; ];
return $models[$type] ?? null; return $models[$type] ?? null;
@@ -81,11 +81,15 @@ public function show($id)
'total_musics' => $playlist->musics->count(), 'total_musics' => $playlist->musics->count(),
'total_duration' => $playlist->total_duration, 'total_duration' => $playlist->total_duration,
'total_comments' => $playlist->comments_count, 'total_comments' => $playlist->comments_count,
'total_likes' => $playlist->likes_count,
'total_saves' => $playlist->saved_count,
], ],
'user_interaction' => [ 'user_interaction' => [
'has_commented' => $playlist->has_user_commented, 'has_commented' => $playlist->has_user_commented,
'user_comment' => $playlist->user_comment, 'user_comment' => $playlist->user_comment,
'user_comment_id' => $playlist->user_comment_id, 'user_comment_id' => $playlist->user_comment_id,
'has_liked' => $playlist->is_liked,
'has_saved' => $playlist->is_saved,
], ],
'comments' => $comments, 'comments' => $comments,
]); ]);
+6 -4
View File
@@ -13,7 +13,7 @@ class SaveController extends Controller
public function save(Request $request) public function save(Request $request)
{ {
$request->validate([ $request->validate([
'type' => 'required|string|in:music,media,breathing-template', 'type' => 'required|string|in:music,media,breathing-template,playlist',
'id' => 'required|integer', 'id' => 'required|integer',
]); ]);
@@ -40,7 +40,7 @@ public function save(Request $request)
public function unsave(Request $request) public function unsave(Request $request)
{ {
$request->validate([ $request->validate([
'type' => 'required|string|in:music,media,breathing-template', 'type' => 'required|string|in:music,media,breathing-template,playlist',
'id' => 'required|integer', 'id' => 'required|integer',
]); ]);
@@ -67,7 +67,7 @@ public function unsave(Request $request)
public function toggleSave(Request $request) public function toggleSave(Request $request)
{ {
$request->validate([ $request->validate([
'type' => 'required|string|in:music,media,breathing-template', 'type' => 'required|string|in:music,media,breathing-template,playlist',
'id' => 'required|integer', 'id' => 'required|integer',
]); ]);
@@ -112,6 +112,7 @@ public function mySavedItems(Request $request)
'music' => 'App\\Models\\Music', 'music' => 'App\\Models\\Music',
'media' => 'App\\Models\\Media', 'media' => 'App\\Models\\Media',
'breathing-template' => 'App\\Models\\BreathingTemplate', 'breathing-template' => 'App\\Models\\BreathingTemplate',
'playlist' => 'App\\Models\\MusicPlaylist',
] ]
]); ]);
} }
@@ -121,7 +122,7 @@ public function mySavedItems(Request $request)
public function checkSaved(Request $request) public function checkSaved(Request $request)
{ {
$request->validate([ $request->validate([
'type' => 'required|string|in:music,media,breathing-template', 'type' => 'required|string|in:music,media,breathing-template,playlist',
'id' => 'required|integer', 'id' => 'required|integer',
]); ]);
@@ -151,6 +152,7 @@ private function getModelClass($type)
'music' => \App\Models\Music::class, 'music' => \App\Models\Music::class,
'media' => \App\Models\Media::class, 'media' => \App\Models\Media::class,
'breathing-template' => \App\Models\BreathingTemplate::class, 'breathing-template' => \App\Models\BreathingTemplate::class,
'playlist' => \App\Models\MusicPlaylist::class,
]; ];
return $models[$type] ?? null; return $models[$type] ?? null;
+8 -2
View File
@@ -6,9 +6,11 @@
use Illuminate\Database\Eloquent\Relations\BelongsTo; // ← Add this use Illuminate\Database\Eloquent\Relations\BelongsTo; // ← Add this
use Illuminate\Database\Eloquent\Relations\HasMany; // ← Add this use Illuminate\Database\Eloquent\Relations\HasMany; // ← Add this
use App\Traits\HasComments; // Add this use App\Traits\HasComments; // Add this
use App\Traits\HasLikes;
use App\Traits\HasSaves;
class MusicPlaylist extends Model class MusicPlaylist extends Model
{ {
use HasComments; use HasComments, HasLikes, HasSaves;
protected $table = 'music_playlists'; protected $table = 'music_playlists';
protected $fillable = [ protected $fillable = [
@@ -23,7 +25,11 @@ class MusicPlaylist extends Model
'comments_count', 'comments_count',
'has_user_commented', 'has_user_commented',
'user_comment', 'user_comment',
'user_comment_id' 'user_comment_id',
'is_liked',
'likes_count',
'is_saved',
'saved_count'
]; ];
public function category(): BelongsTo public function category(): BelongsTo
{ {