philomena/lib/philomena_web/views/api/json/profile_view.ex
liamwhite 723bfa213f
Use JSON views for API (#64)
* AwardJson, LinkJson, UserJson to views

* FilterJson -> view

* ForumJson -> view

* TopicJson -> view

* PostJson -> view

* TagJson -> view

* CommentJson -> view

* GalleryJson -> view
2020-03-29 21:11:38 -04:00

41 lines
1.1 KiB
Elixir

defmodule PhilomenaWeb.Api.Json.ProfileView do
use PhilomenaWeb, :view
def render("show.json", %{user: user} = assigns) do
%{user: render_one(user, PhilomenaWeb.Api.Json.ProfileView, "profile.json", assigns)}
end
def render("profile.json", %{user: user} = assigns) do
%{
id: user.id,
name: user.name,
slug: user.slug,
role: role(user),
description: user.description,
avatar_url: avatar_url(user),
created_at: user.created_at,
comments_count: user.comments_posted_count,
uploads_count: user.uploads_count,
posts_count: user.forum_posts_count,
topics_count: user.topic_count,
links: render_many(user.public_links, PhilomenaWeb.Api.Json.UserLinkView, "user_link.json", assigns),
awards: render_many(user.awards, PhilomenaWeb.Api.Json.AwardView, "award.json", assigns)
}
end
defp role(%{hide_default_role: true}) do
"user"
end
defp role(user) do
user.role
end
defp avatar_url(%{avatar: nil}) do
nil
end
defp avatar_url(user) do
Application.get_env(:philomena, :avatar_url_root) <> "/" <> user.avatar
end
end