summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLogan Hunt <loganhunt@simponic.xyz>2022-04-07 15:52:32 -0600
committerLogan Hunt <loganhunt@simponic.xyz>2022-04-07 15:52:32 -0600
commit55858eb9ca9d93c8ffa8fafd4c5d965b602326be (patch)
treef4e511ae8345abd2f96e3271fae3a085b4056001
parented22eb20f9f320d5ded4951c16fbb867b6883ce1 (diff)
downloadaggiedit-55858eb9ca9d93c8ffa8fafd4c5d965b602326be.tar.gz
aggiedit-55858eb9ca9d93c8ffa8fafd4c5d965b602326be.zip
Attach upload, room, user to post
-rw-r--r--lib/aggiedit/accounts.ex1
-rw-r--r--lib/aggiedit/rooms.ex8
-rw-r--r--lib/aggiedit/uploads.ex16
-rw-r--r--lib/aggiedit_web/live/post_live/form_component.ex23
-rw-r--r--lib/aggiedit_web/live/post_live/index.ex3
-rw-r--r--lib/aggiedit_web/live/post_live/index.html.heex1
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}