From cca3fa0c9a9d83f2a03dbf0512b5fc2efc1acff7 Mon Sep 17 00:00:00 2001 From: Ondrej Prazak Date: Tue, 22 Dec 2020 11:46:49 +0100 Subject: [PATCH] Fixes #156 - Deprecate "shout" event Deprecate "shout" event for conversation channel in favor of "message:created". --- .../channels/conversation_channel.ex | 20 ++++++++++++++----- .../channels/conversation_channel_test.exs | 6 ++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/lib/chat_api_web/channels/conversation_channel.ex b/lib/chat_api_web/channels/conversation_channel.ex index e6ea1a17e..734742b7c 100644 --- a/lib/chat_api_web/channels/conversation_channel.ex +++ b/lib/chat_api_web/channels/conversation_channel.ex @@ -3,6 +3,7 @@ defmodule ChatApiWeb.ConversationChannel do alias ChatApiWeb.Presence alias ChatApi.{Messages, Conversations} + require Logger @impl true def join("conversation:lobby", payload, socket) do @@ -80,9 +81,18 @@ defmodule ChatApiWeb.ConversationChannel do {:reply, {:ok, payload}, socket} end + def handle_in("shout", payload, socket) do + Logger.notice("'shout' is deprecated as event name on a new message and will be removed in a future version. Please migrate to a newer version of a client.") + handle_in_msg "shout", payload, socket + end + + def handle_in("message:created", payload, socket) do + handle_in_msg "message:created", payload, socket + end + # It is also common to receive messages from the client and # broadcast to everyone in the current topic (conversation:lobby). - def handle_in("shout", payload, socket) do + defp handle_in_msg(event_name, payload, socket) do with %{conversation: conversation} <- socket.assigns, %{id: conversation_id, account_id: account_id} <- conversation, {:ok, message} <- @@ -90,10 +100,10 @@ defmodule ChatApiWeb.ConversationChannel do |> Map.merge(%{"conversation_id" => conversation_id, "account_id" => account_id}) |> Messages.create_message(), message <- Messages.get_message!(message.id) do - broadcast_new_message(socket, message) + broadcast_new_message(socket, event_name, message) else _ -> - broadcast(socket, "shout", payload) + broadcast(socket, event_name, payload) end {:noreply, socket} @@ -123,9 +133,9 @@ defmodule ChatApiWeb.ConversationChannel do }) end - defp broadcast_new_message(socket, message) do + defp broadcast_new_message(socket, event_name, message) do broadcast_conversation_update(message) - broadcast(socket, "shout", Messages.Helpers.format(message)) + broadcast(socket, event_name, Messages.Helpers.format(message)) message |> Messages.Notification.notify(:slack) diff --git a/test/chat_api_web/channels/conversation_channel_test.exs b/test/chat_api_web/channels/conversation_channel_test.exs index 06d550687..d64ef58f9 100644 --- a/test/chat_api_web/channels/conversation_channel_test.exs +++ b/test/chat_api_web/channels/conversation_channel_test.exs @@ -25,6 +25,12 @@ defmodule ChatApiWeb.ConversationChannelTest do assert_broadcast "shout", _msg end + test "message:created broadcasts to conversation:lobby", %{socket: socket, account: account} do + msg = %{body: "Hello world!", account_id: account.id} + push(socket, "message:created", msg) + assert_broadcast "message:created", _msg + end + test "broadcasts are pushed to the client", %{socket: socket} do broadcast_from!(socket, "broadcast", %{"some" => "data"}) assert_push "broadcast", %{"some" => "data"}