From f81237b23c74574013c6486785b8ddbe9991daea Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 28 Apr 2026 17:40:16 -0600 Subject: [PATCH] =?UTF-8?q?fix/feat:=20b=C3=BAsqueda=20m=C3=B3vil,=20chat?= =?UTF-8?q?=20solo=20amigos=20y=20bloqueo=20si=20se=20elimin=C3=B3=20amist?= =?UTF-8?q?ad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Header: búsqueda móvil con panel deslizable (fixed bajo la topbar), comparte la lógica AJAX con desktop via initSearchWidget() - ChatController: index muestra solo amigos; show pasa isFriend y friendship a la vista; send valida amistad con abort_unless - chat/index: muestra amigos con @forelse y mensaje vacío si no tiene - chat/show: si no son amigos muestra banner de bloqueo con botón contextual (enviar solicitud / cancelar / aceptar según estado) Co-Authored-By: Claude Sonnet 4.6 --- app/Http/Controllers/ChatController.php | 28 ++-- resources/views/chat/index.blade.php | 20 ++- resources/views/chat/show.blade.php | 60 ++++++--- .../views/layouts/_partials/header.blade.php | 126 ++++++++++-------- 4 files changed, 151 insertions(+), 83 deletions(-) diff --git a/app/Http/Controllers/ChatController.php b/app/Http/Controllers/ChatController.php index 447b6091..5b0cf315 100644 --- a/app/Http/Controllers/ChatController.php +++ b/app/Http/Controllers/ChatController.php @@ -10,16 +10,21 @@ use Illuminate\Support\Facades\Storage; class ChatController extends Controller { - // Lista de usuarios con quienes puedo chatear + // Lista de amigos con quienes puedo chatear public function index() { - $users = User::where('id', '!=', auth()->id())->get(); - return view('chat.index', compact('users')); + $me = auth()->user(); + $friends = User::whereIn('id', $me->friendIds())->orderBy('name')->get(); + return view('chat.index', compact('friends')); } // Mensajes entre yo y otro usuario public function show(User $user) { + $me = auth()->user(); + $isFriend = $me->isFriendWith($user); + $friendship = $me->friendshipWith($user); + $messages = Message::where(function ($q) use ($user) { $q->where('user_id', auth()->id()) ->where('receiver_id', $user->id); @@ -32,13 +37,15 @@ class ChatController extends Controller ->orderBy('created_at', 'asc') ->get(); - // marcar como leídos - Message::where('user_id', $user->id) - ->where('receiver_id', auth()->id()) - ->whereNull('read_at') - ->update(['read_at' => now()]); + // marcar como leídos solo si son amigos + if ($isFriend) { + Message::where('user_id', $user->id) + ->where('receiver_id', $me->id) + ->whereNull('read_at') + ->update(['read_at' => now()]); + } - return view('chat.show', compact('user', 'messages')); + return view('chat.show', compact('user', 'messages', 'isFriend', 'friendship')); } // Enviar mensaje @@ -50,6 +57,9 @@ class ChatController extends Controller 'attachment' => 'nullable|file|max:20480', ]); + $receiver = User::findOrFail($request->receiver_id); + abort_unless(auth()->user()->isFriendWith($receiver), 403, 'No puedes enviar mensajes a esta persona.'); + $attachment = null; $attachmentType = null; diff --git a/resources/views/chat/index.blade.php b/resources/views/chat/index.blade.php index eb405eb7..ea22d060 100644 --- a/resources/views/chat/index.blade.php +++ b/resources/views/chat/index.blade.php @@ -9,20 +9,28 @@
Chats
diff --git a/resources/views/chat/show.blade.php b/resources/views/chat/show.blade.php index a09642e6..4aada1eb 100644 --- a/resources/views/chat/show.blade.php +++ b/resources/views/chat/show.blade.php @@ -51,23 +51,51 @@ diff --git a/resources/views/layouts/_partials/header.blade.php b/resources/views/layouts/_partials/header.blade.php index 8fbe384c..d8526016 100644 --- a/resources/views/layouts/_partials/header.blade.php +++ b/resources/views/layouts/_partials/header.blade.php @@ -28,24 +28,25 @@