philomena/lib/philomena_web/controllers/profile_controller.ex
2019-11-18 09:14:26 -05:00

56 lines
1.4 KiB
Elixir

defmodule PhilomenaWeb.ProfileController do
use PhilomenaWeb, :controller
alias Philomena.{Images, Images.Image, Users.User}
import Ecto.Query
plug :load_and_authorize_resource, model: User, only: :show, id_field: "slug", preload: [awards: :badge, public_links: :tag]
def show(conn, _params) do
current_user = conn.assigns.current_user
filter = conn.assigns.compiled_filter
user = conn.assigns.user
{:ok, upload_query} = Images.Query.compile(current_user, "uploader_id:#{user.id}")
{:ok, fave_query} = Images.Query.compile(current_user, "faved_by_id:#{user.id}")
recent_uploads =
Image.search_records(
%{
query: %{
bool: %{
must_not: filter,
must: upload_query
}
},
sort: %{created_at: :desc}
},
%{page_number: 1, page_size: 6},
Image |> preload([:tags])
)
recent_faves =
Image.search_records(
%{
query: %{
bool: %{
must_not: filter,
must: fave_query
}
},
sort: %{created_at: :desc}
},
%{page_number: 1, page_size: 6},
Image |> preload([:tags])
)
render(
conn,
"show.html",
user: user,
recent_uploads: recent_uploads,
recent_faves: recent_faves,
layout_class: "layout--wide"
)
end
end