From 55858eb9ca9d93c8ffa8fafd4c5d965b602326be Mon Sep 17 00:00:00 2001 From: Logan Hunt Date: Thu, 7 Apr 2022 15:52:32 -0600 Subject: [PATCH] Attach upload, room, user to post --- lib/aggiedit/accounts.ex | 1 + lib/aggiedit/rooms.ex | 8 ++++++- lib/aggiedit/uploads.ex | 16 +++---------- .../live/post_live/form_component.ex | 23 +++++++++++-------- lib/aggiedit_web/live/post_live/index.ex | 3 +-- .../live/post_live/index.html.heex | 1 + 6 files changed, 26 insertions(+), 26 deletions(-) diff --git a/lib/aggiedit/accounts.ex b/lib/aggiedit/accounts.ex index 36dbd0c..1852393 100644 --- a/lib/aggiedit/accounts.ex +++ b/lib/aggiedit/accounts.ex @@ -247,6 +247,7 @@ defmodule Aggiedit.Accounts do def get_user_by_session_token(token) do {:ok, query} = UserToken.verify_session_token_query(token) Repo.one(query) + |> Repo.preload(:room) end @doc """ diff --git a/lib/aggiedit/rooms.ex b/lib/aggiedit/rooms.ex index 272f9b4..8f2e39f 100644 --- a/lib/aggiedit/rooms.ex +++ b/lib/aggiedit/rooms.ex @@ -6,6 +6,7 @@ defmodule Aggiedit.Rooms do import Ecto.Query, warn: false alias Aggiedit.Repo + alias Aggiedit.Accounts alias Aggiedit.Rooms.Room @doc """ @@ -140,9 +141,14 @@ defmodule Aggiedit.Rooms do """ def get_post!(id), do: Repo.get!(Post, id) - def create_post(attrs, after_save \\ &{:ok, &1}) do + def create_post(attrs, user, after_save \\ &{:ok, &1}) do + user = Repo.preload(user, :room) + %Post{} + |> Repo.preload([:user, :room]) |> Post.changeset(attrs) + |> Ecto.Changeset.put_assoc(:user, user) + |> Ecto.Changeset.put_assoc(:room, user.room) |> Repo.insert() |> post_saved(after_save) end diff --git a/lib/aggiedit/uploads.ex b/lib/aggiedit/uploads.ex index 2dcdcc3..4cbc237 100644 --- a/lib/aggiedit/uploads.ex +++ b/lib/aggiedit/uploads.ex @@ -37,21 +37,11 @@ defmodule Aggiedit.Uploads do """ def get_upload!(id), do: Repo.get!(Upload, id) - @doc """ - Creates a upload. - - ## Examples - - iex> create_upload(%{field: value}) - {:ok, %Upload{}} - - iex> create_upload(%{field: bad_value}) - {:error, %Ecto.Changeset{}} - - """ - def create_upload(attrs \\ %{}) do + def create_upload(attrs, user) do %Upload{} + |> Repo.preload(:user) |> Upload.changeset(attrs) + |> Ecto.Changeset.put_assoc(:user, user) |> Repo.insert() end diff --git a/lib/aggiedit_web/live/post_live/form_component.ex b/lib/aggiedit_web/live/post_live/form_component.ex index 53b19dd..532950c 100644 --- a/lib/aggiedit_web/live/post_live/form_component.ex +++ b/lib/aggiedit_web/live/post_live/form_component.ex @@ -3,17 +3,19 @@ defmodule AggieditWeb.PostLive.FormComponent do alias Aggiedit.Rooms alias Aggiedit.Rooms.Post + alias Aggiedit.Uploads alias Aggiedit.Uploads.Upload alias Aggiedit.Repo @impl true - def update(%{post: post} = assigns, socket) do + def update(%{current_user: current_user, post: post} = assigns, socket) do changeset = Rooms.change_post(post) {:ok, socket |> assign(assigns) |> assign(:changeset, changeset) + |> assign(:current_user, current_user) |> assign(:uploaded_files, []) |> allow_upload(:upload, accept: ~w(.jpg .jpeg .png .gif), max_entries: 1) } @@ -38,19 +40,20 @@ defmodule AggieditWeb.PostLive.FormComponent do consume_uploaded_entries(socket, :upload, fn data, upload -> [extension | _] = MIME.extensions(upload.client_type) filename = "#{upload.uuid}-#{extension}" - upload = %Upload{ - file: filename, - size: upload.client_size, - mime: upload.client_type - } dest = Path.join("priv/static/uploads", filename) File.cp!(data.path, dest) - Repo.preload(post, :upload) + {:ok, upload} = Uploads.create_upload(%{ + file: filename, + size: upload.client_size, + mime: upload.client_type, + }, socket.assigns.current_user) + + post + |> Repo.preload(:upload) |> Post.change_upload(upload) - |> Repo.update - IO.puts(inspect(upload)) + |> Repo.update() {:ok, upload} end) @@ -71,7 +74,7 @@ defmodule AggieditWeb.PostLive.FormComponent do end defp save_post(socket, :new, post_params) do - case Rooms.create_post(post_params, &save_upload(socket, &1)) do + case Rooms.create_post(post_params, socket.assigns.current_user, &save_upload(socket, &1)) do {:ok, _post} -> {:noreply, socket diff --git a/lib/aggiedit_web/live/post_live/index.ex b/lib/aggiedit_web/live/post_live/index.ex index 1952625..8ec98c7 100644 --- a/lib/aggiedit_web/live/post_live/index.ex +++ b/lib/aggiedit_web/live/post_live/index.ex @@ -26,10 +26,9 @@ defmodule AggieditWeb.PostLive.Index do end defp apply_action(socket, :new, _params) do - post = %Post{user_id: socket.assigns[:current_user].id} socket |> assign(:page_title, "New Post") - |> assign(:post, post) + |> assign(:post, %Post{}) end defp apply_action(socket, :index, _params) do diff --git a/lib/aggiedit_web/live/post_live/index.html.heex b/lib/aggiedit_web/live/post_live/index.html.heex index 4297d5a..1804971 100644 --- a/lib/aggiedit_web/live/post_live/index.html.heex +++ b/lib/aggiedit_web/live/post_live/index.html.heex @@ -3,6 +3,7 @@ <%= if @live_action in [:new, :edit] do %> <.modal return_to={Routes.post_index_path(@socket, :index)}> <.live_component + current_user={@current_user} module={AggieditWeb.PostLive.FormComponent} id={@post.id || :new} title={@page_title}