From 763ea5331b1977dd949c776215f2c7719f81ee9a Mon Sep 17 00:00:00 2001 From: Logan Hunt Date: Wed, 20 Apr 2022 16:03:17 -0600 Subject: Initial chat box; man phoenix does not have the best docs --- lib/aggiedit_web/channels/post_channel.ex | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'lib/aggiedit_web/channels') diff --git a/lib/aggiedit_web/channels/post_channel.ex b/lib/aggiedit_web/channels/post_channel.ex index 308c6de..ea79d76 100644 --- a/lib/aggiedit_web/channels/post_channel.ex +++ b/lib/aggiedit_web/channels/post_channel.ex @@ -2,21 +2,35 @@ defmodule AggieditWeb.PostChannel do use AggieditWeb, :channel alias Aggiedit.Roles + alias Aggiedit.Repo alias Aggiedit.Rooms @impl true def join("post:" <> post_id, _payload, socket) do post = Rooms.get_post!(post_id) if Roles.guard?(socket.assigns.current_user, :show, post) do - {:ok, socket} + send(self(), :after_join) + {:ok, assign(socket, %{:post => post})} else {:error, "You do not have permission to view this post."} end end @impl true - def handle_in("send", body, socket) do - broadcast!(socket, "shout", body) + def handle_info(:after_join, socket) do + comments = socket.assigns.post + |> Repo.preload(comments: [:user]) + |> Map.get(:comments) + |> Enum.map(fn c -> Aggiedit.Post.Comment.serialize(c) end) + push(socket, "initial-comments", %{:comments => comments}) + + {:noreply, socket} + end + + @impl true + def handle_in("send", %{"body" => comment}=body, socket) do + {:ok, comment} = Rooms.comment_post(socket.assigns.post, socket.assigns.current_user, comment) + broadcast!(socket, "shout", Aggiedit.Post.Comment.serialize(comment)) {:reply, :ok, socket} end end \ No newline at end of file -- cgit v1.2.3-70-g09d2