Use group by for grouping tweets

This commit is contained in:
Uku Taht 2020-01-16 15:13:03 +02:00
parent 55bca892d1
commit 9df398b663
3 changed files with 28 additions and 4 deletions

View File

@ -253,10 +253,7 @@ defmodule Plausible.Stats do
tweets = Repo.all(
from t in Plausible.Twitter.Tweet,
where: t.link in ^urls
) |> Enum.reduce(%{}, fn tweet, acc ->
Map.update(acc, tweet.link, [tweet], &([tweet | &1]))
end)
|> IO.inspect
) |> Enum.group_by(&(&1.link))
Enum.map(referring_urls, fn url ->
Map.put(url, :tweets, tweets[url[:name]])

View File

@ -133,5 +133,21 @@ defmodule PlausibleWeb.Api.StatsController.ReferrersTest do
"search_terms" => terms
}
end
test "enriches twitter referrers with tweets if available", %{conn: conn, site: site} do
insert(:pageview, hostname: site.domain, referrer: "t.co/some-link", referrer_source: "Twitter", timestamp: ~N[2019-01-01 01:00:00])
insert(:pageview, hostname: site.domain, referrer: "t.co/some-link", referrer_source: "Twitter", timestamp: ~N[2019-01-01 01:00:00])
insert(:pageview, hostname: site.domain, referrer: "t.co/nonexistent-link", referrer_source: "Twitter", timestamp: ~N[2019-01-01 02:00:00])
insert(:tweet, link: "t.co/some-link", text: "important tweet")
conn = get(conn, "/api/stats/#{site.domain}/referrers/Twitter?period=day&date=2019-01-01")
res = json_response(conn, 200)
assert res["total_visitors"] == 3
assert [tweet1, tweet2] = res["referrers"]
assert %{"name" => "t.co/some-link", "count" => 2, "tweets" => [%{"text" => "important tweet"}]} = tweet1
assert %{"name" => "t.co/nonexistent-link", "count" => 1, "tweets" => nil} = tweet2
end
end
end

View File

@ -79,4 +79,15 @@ defmodule Plausible.Factory do
expires: Timex.now() |> Timex.shift(days: 1)
}
end
def tweet_factory do
%Plausible.Twitter.Tweet{
tweet_id: UUID.uuid4(),
author_handle: "author-handle",
author_name: "author-name",
author_image: "pic.twitter.com/author.png",
text: "tweet-text",
created: Timex.now()
}
end
end