defmodule FeedPugWeb.Api.ItemController do
use FeedPugWeb, :controller
alias FeedPug.{Feeds, Reactions}
alias FeedPugWeb.Api.Shape
@doc "GET /api/items/:id — full item content with read state and reactions."
def show(conn, %{"id" => id}) do
scope = conn.assigns.current_scope
item = Feeds.get_user_item!(scope.user.id, id)
[item] = Reactions.put_reactions(scope, [item])
json(conn, %{item: Shape.item_full(item)})
end
@doc "POST /api/items/:id/read — mark an item read."
def read(conn, %{"id" => id}) do
scope = conn.assigns.current_scope
Feeds.mark_read(scope.user.id, id)
json(conn, %{ok: true})
end
@doc "POST /api/items/:id/unread — mark an item unread."
def unread(conn, %{"id" => id}) do
scope = conn.assigns.current_scope
Feeds.mark_unread(scope.user.id, id)
json(conn, %{ok: true})
end
@doc "POST /api/items/:id/reactions — toggle an emoji reaction. Body: {emoji}."
def react(conn, %{"id" => id, "emoji" => emoji}) do
scope = conn.assigns.current_scope
state = Reactions.toggle_item_reaction(scope, id, emoji)
reactions = Reactions.reactions_for_items(scope, [id]) |> Map.get(id, [])
json(conn, %{state: state, reactions: reactions})
end
end
neiam
/feedpug
feedpub
public · Issues · Pulls · Labels · Forks · Compare · Actions success · Badges · Packages
⭐
Log in to mark this repository.
1.2 KiB · text
History
6d24830