From 29411a9d08550b2bfa76ad665c5a25f8aef4d60a Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Thu, 21 Mar 2019 19:43:13 -0400 Subject: [PATCH] Add Fever API for groups --- lib/frenzy/group.ex | 14 +++++ .../controllers/fever_controller.ex | 62 ++++++++++++------- lib/frenzy_web/templates/group/show.html.eex | 2 +- 3 files changed, 54 insertions(+), 24 deletions(-) diff --git a/lib/frenzy/group.ex b/lib/frenzy/group.ex index 95d5018..6a774ae 100644 --- a/lib/frenzy/group.ex +++ b/lib/frenzy/group.ex @@ -2,6 +2,20 @@ defmodule Frenzy.Group do use Ecto.Schema import Ecto.Changeset + def to_fever_group(group) do + %{ + id: group.id, + title: group.title + } + end + + def to_fever_feeds_group(group) do + %{ + group_id: group.id, + feed_ids: group.feeds |> Enum.map(fn feed -> feed.id end) |> Enum.join(",") + } + end + schema "groups" do field :title, :string diff --git a/lib/frenzy_web/controllers/fever_controller.ex b/lib/frenzy_web/controllers/fever_controller.ex index 33b2d4a..ee96521 100644 --- a/lib/frenzy_web/controllers/fever_controller.ex +++ b/lib/frenzy_web/controllers/fever_controller.ex @@ -1,6 +1,6 @@ defmodule FrenzyWeb.FeverController do use FrenzyWeb, :controller - alias Frenzy.{Repo, Feed, Item} + alias Frenzy.{Repo, Group, Feed, Item} import Ecto.Query plug :api_check @@ -13,7 +13,7 @@ defmodule FrenzyWeb.FeverController do end end - def get(conn, params) do + def get(conn, _params) do json(conn, %{api_version: 2, auth: 0}) end @@ -40,20 +40,20 @@ defmodule FrenzyWeb.FeverController do end defp fever_response(params) do - res = - %{api_version: 2, auth: 1} - |> mark(params) - |> unread_recently_read(params) - |> groups(params) - |> feeds(params) - |> favicons(params) - |> links(params) - |> unread(params) - |> saved(params) - |> items(params) + %{api_version: 2, auth: 1} + |> mark(params) + |> unread_recently_read(params) + |> feeds(params) + |> groups(params) + |> feeds_groups(params) + |> favicons(params) + |> links(params) + |> unread(params) + |> saved(params) + |> items(params) end - defp mark(res, %{"mark" => "item", "id" => id, "as" => as} = params) do + defp mark(res, %{"mark" => "item", "id" => id, "as" => as}) do item = Repo.get(Item, id) |> Repo.preload(:feed) diff = @@ -85,14 +85,6 @@ defmodule FrenzyWeb.FeverController do defp unread_recently_read(res, _), do: res - defp groups(res, %{"groups" => _}) do - res - |> Map.put(:groups, []) - |> Map.put(:feeds_groups, []) - end - - defp groups(res, _), do: res - defp feeds(res, %{"feeds" => _}) do feeds = Repo.all(Feed) @@ -100,11 +92,34 @@ defmodule FrenzyWeb.FeverController do res |> Map.put(:feeds, feeds) - |> Map.put(:feeds_groups, []) end defp feeds(res, _), do: res + defp groups(res, %{"groups" => _}) do + groups = + Repo.all(Group) + |> Enum.map(&Group.to_fever_group/1) + + res + |> Map.put(:groups, groups) + end + + defp groups(res, _), do: res + + defp feeds_groups(res, params) do + if Map.has_key?(params, "feeds") or Map.has_key?(params, "groups") do + feeds_groups = + Repo.all(from Group, preload: [:feeds]) + |> Enum.map(&Group.to_fever_feeds_group/1) + + res + |> Map.put(:feeds_groups, feeds_groups) + else + res + end + end + defp favicons(res, %{"favicons" => _}) do res |> Map.put(:favicons, []) @@ -178,6 +193,7 @@ defmodule FrenzyWeb.FeverController do items = items |> Enum.reject(&is_nil/1) + |> Enum.reject(fn item -> item.tombstone end) |> Enum.map(&Item.to_fever/1) res diff --git a/lib/frenzy_web/templates/group/show.html.eex b/lib/frenzy_web/templates/group/show.html.eex index 24813d4..145970f 100644 --- a/lib/frenzy_web/templates/group/show.html.eex +++ b/lib/frenzy_web/templates/group/show.html.eex @@ -11,7 +11,7 @@ <%= text_input form, :feed_url %>
- <%= submit "Create Feed" %> + <%= submit "Add Feed" %>
<% end %>