validate([ 'conversation_id' => 'required|exists:conversations,id', 'message' => 'required|string' ]); $message = Message::create([ 'conversation_id' => $request->conversation_id, 'user_id' => auth()->id(), 'message' => $request->message ]); // cargar usuario para que venga en el JSON $message->load('user'); // enviar a los demás usuarios por websocket broadcast(new ChatMessageSent($message))->toOthers(); return response()->json([ 'message' => $message ]); } public function start(User $user) { $authUser = auth()->user(); // buscar conversación existente $conversation = Conversation::whereHas('users', function ($q) use ($authUser) { $q->where('user_id', $authUser->id); }) ->whereHas('users', function ($q) use ($user) { $q->where('user_id', $user->id); }) ->first(); // si no existe → crear if (!$conversation) { $conversation = Conversation::create(); $conversation->users()->attach([ $authUser->id, $user->id ]); } return response()->json($conversation); } public function show($id) { $conversation = Conversation::with([ 'messages' => function ($query) { $query->orderBy('created_at', 'asc'); }, 'messages.user' ])->findOrFail($id); return view('chat.show', compact('conversation')); } }