middleware('auth')->except(['index']); } public function index(Video $video) { $comments = $video->comments()->whereNull('parent_id')->with(['user', 'replies.user'])->get(); return response()->json($comments); } public function store(Request $request, Video $video) { $request->validate([ 'body' => 'required|string|max:1000', 'parent_id' => 'nullable|exists:comments,id', ]); $commenter = Auth::user(); $comment = $video->comments()->create([ 'user_id' => $commenter->id, 'body' => $request->body, 'parent_id' => $request->parent_id, ]); $comment->load('user:id,name,avatar'); // Fire notifications (never notify yourself) if ($request->parent_id) { // Reply — notify the parent comment's author $parent = Comment::find($request->parent_id); if ($parent && $parent->user_id !== $commenter->id) { $parent->user->notify(new NewReplyNotification($video, $comment, $commenter)); } } else { // Top-level comment — notify the video owner if ($video->user_id !== $commenter->id) { $video->user->notify(new NewCommentNotification($video, $comment, $commenter)); } } return response()->json([ 'success' => true, 'comment' => $comment->load('user:id,name,avatar'), ]); } public function update(Request $request, Comment $comment) { if ($comment->user_id !== Auth::id()) { return response()->json(['error' => 'Unauthorized'], 403); } $request->validate([ 'body' => 'required|string|max:1000', ]); $comment->update(['body' => $request->body]); $comment->load('user:id,name,avatar'); return response()->json($comment->load('user:id,name,avatar')); } public function destroy(Comment $comment) { if ($comment->user_id !== Auth::id()) { return response()->json(['error' => 'Unauthorized'], 403); } $comment->delete(); return response()->json(['success' => true]); } public function like(Comment $comment) { $userId = Auth::id(); $existing = CommentLike::where('comment_id', $comment->id) ->where('user_id', $userId) ->first(); if ($existing) { $existing->delete(); $liked = false; } else { CommentLike::create(['comment_id' => $comment->id, 'user_id' => $userId]); $liked = true; // Notify the comment author (not self-likes) if ($comment->user_id !== $userId) { $video = $comment->video; if ($video) { $comment->user->notify( new NewCommentLikeNotification($video, $comment, Auth::user()) ); } } } $count = CommentLike::where('comment_id', $comment->id)->count(); return response()->json(['liked' => $liked, 'count' => $count]); } }