diff --git a/lib/elixir_status/impressionist.ex b/lib/elixir_status/impressionist.ex index 3e88699..98e0e6d 100644 --- a/lib/elixir_status/impressionist.ex +++ b/lib/elixir_status/impressionist.ex @@ -85,6 +85,25 @@ defmodule ElixirStatus.Impressionist do |> Enum.filter(&(&1.context == "postings:#{uid}" && &1.subject_type == "short_link")) |> Enum.count end + def urls_sorted_by_most_clicks(stats_clicks, uid) do + stats_clicks + |> List.wrap + |> Enum.filter(&(&1.context == "postings:#{uid}" && &1.subject_type == "short_link")) + |> Enum.group_by(&(&1.subject_uid)) + |> Map.values + |> Enum.sort_by(fn(list) -> Enum.count(list) end) + |> Enum.map(&list_to_url/1) + |> Enum.reverse + |> IO.inspect + end + + defp list_to_url(nil), do: nil + defp list_to_url([]), do: nil + defp list_to_url(list) do + impression = list |> List.last + impression.subject_uid + |> ElixirStatus.LinkShortener.to_url + end def count_views(stats_views, uid) do stats_views diff --git a/web/views/admin/api_view.ex b/web/views/admin/api_view.ex index c85c7c7..5c2a068 100644 --- a/web/views/admin/api_view.ex +++ b/web/views/admin/api_view.ex @@ -11,15 +11,26 @@ defmodule ElixirStatus.Admin.ApiView do } end + def to_json(%ElixirStatus.User{} = user) do + %{ + full_name: user.full_name, + email: user.email, + provider: user.provider, + user_name: user.user_name, + twitter_handle: user.twitter_handle, + } + end def to_json(posting, conn, stats_clicks, stats_views) do {:safe, html} = posting.text |> sanitized_markdown %{ id: posting.id, - published_at: posting.published_at |> xml_readable_date, + published_at: posting.published_at |> xml_readable_date(), + type: posting.type, + author: posting.user |> to_json(), title: posting.title, text: posting.text, html: html, - referenced_urls: posting.referenced_urls |> Poison.decode!, + urls: Impressionist.urls_sorted_by_most_clicks(stats_clicks, posting.uid), permalink: permalink_posting_path(conn, :show, posting.permalink), link_clicks: Impressionist.count_clicks(stats_clicks, posting.uid), detail_views: Impressionist.count_views(stats_views, posting.uid)