defmodule AnonbbWeb.RoomChannel do use Phoenix.Channel alias Anonbb.{Repo, Room, Message} import Ecto.Query def join("room:" <> room, _message, socket) do # Make sure the room exists room_name = Repo.one(from r in Room, where: r.name == ^room, select: r.name) if !room_name do Repo.insert(%Room{name: room}) room_name = room end {:ok, socket |> assign(:room, room_name)} end def handle_in("new_msg", %{"body" => body}, socket) do room = socket.assigns.room body = String.slice(body, 0..1000) insert_message(room, body) broadcast!(socket, "new_msg", %{body: body}) {:noreply, socket} end defp insert_message(room_name, message) do room_id = Repo.one(from r in Room, where: r.name == ^room_name, select: r.id) Repo.insert(%Message{text: message, room_id: room_id}) end end