From 95e27c541d67f30bae9859662088028b32a5c2e3 Mon Sep 17 00:00:00 2001 From: Ondrej Prazak <o.prazak5@seznam.cz> 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 | 23 +++++++++++++++---- .../channels/conversation_channel_test.exs | 6 +++++ 2 files changed, 24 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..dbb40b45f 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,21 @@ 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 +103,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 +136,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"}