[#1296] removed legacy api: "/objects/:uuid/likes" See merge request pleroma/pleroma!1788object-id-column
@@ -82,38 +82,6 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do | |||||
conn | conn | ||||
end | end | ||||
def object_likes(conn, %{"uuid" => uuid, "page" => page}) do | |||||
with ap_id <- o_status_url(conn, :object, uuid), | |||||
%Object{} = object <- Object.get_cached_by_ap_id(ap_id), | |||||
{_, true} <- {:public?, Visibility.is_public?(object)}, | |||||
likes <- Utils.get_object_likes(object) do | |||||
{page, _} = Integer.parse(page) | |||||
conn | |||||
|> put_resp_content_type("application/activity+json") | |||||
|> put_view(ObjectView) | |||||
|> render("likes.json", %{ap_id: ap_id, likes: likes, page: page}) | |||||
else | |||||
{:public?, false} -> | |||||
{:error, :not_found} | |||||
end | |||||
end | |||||
def object_likes(conn, %{"uuid" => uuid}) do | |||||
with ap_id <- o_status_url(conn, :object, uuid), | |||||
%Object{} = object <- Object.get_cached_by_ap_id(ap_id), | |||||
{_, true} <- {:public?, Visibility.is_public?(object)}, | |||||
likes <- Utils.get_object_likes(object) do | |||||
conn | |||||
|> put_resp_content_type("application/activity+json") | |||||
|> put_view(ObjectView) | |||||
|> render("likes.json", %{ap_id: ap_id, likes: likes}) | |||||
else | |||||
{:public?, false} -> | |||||
{:error, :not_found} | |||||
end | |||||
end | |||||
def activity(conn, %{"uuid" => uuid}) do | def activity(conn, %{"uuid" => uuid}) do | ||||
with ap_id <- o_status_url(conn, :activity, uuid), | with ap_id <- o_status_url(conn, :activity, uuid), | ||||
%Activity{} = activity <- Activity.normalize(ap_id), | %Activity{} = activity <- Activity.normalize(ap_id), | ||||
@@ -251,16 +251,6 @@ defmodule Pleroma.Web.ActivityPub.Utils do | |||||
|> Repo.one() | |> Repo.one() | ||||
end | end | ||||
@doc """ | |||||
Returns like activities targeting an object | |||||
""" | |||||
def get_object_likes(%{data: %{"id" => id}}) do | |||||
id | |||||
|> Activity.Queries.by_object_id() | |||||
|> Activity.Queries.by_type("Like") | |||||
|> Repo.all() | |||||
end | |||||
@spec make_like_data(User.t(), map(), String.t()) :: map() | @spec make_like_data(User.t(), map(), String.t()) :: map() | ||||
def make_like_data( | def make_like_data( | ||||
%User{ap_id: ap_id} = actor, | %User{ap_id: ap_id} = actor, | ||||
@@ -37,40 +37,4 @@ defmodule Pleroma.Web.ActivityPub.ObjectView do | |||||
Map.merge(base, additional) | Map.merge(base, additional) | ||||
end | end | ||||
def render("likes.json", %{ap_id: ap_id, likes: likes, page: page}) do | |||||
collection(likes, "#{ap_id}/likes", page) | |||||
|> Map.merge(Pleroma.Web.ActivityPub.Utils.make_json_ld_header()) | |||||
end | |||||
def render("likes.json", %{ap_id: ap_id, likes: likes}) do | |||||
%{ | |||||
"id" => "#{ap_id}/likes", | |||||
"type" => "OrderedCollection", | |||||
"totalItems" => length(likes), | |||||
"first" => collection(likes, "#{ap_id}/likes", 1) | |||||
} | |||||
|> Map.merge(Pleroma.Web.ActivityPub.Utils.make_json_ld_header()) | |||||
end | |||||
def collection(collection, iri, page) do | |||||
offset = (page - 1) * 10 | |||||
items = Enum.slice(collection, offset, 10) | |||||
items = Enum.map(items, fn object -> Transmogrifier.prepare_object(object.data) end) | |||||
total = length(collection) | |||||
map = %{ | |||||
"id" => "#{iri}?page=#{page}", | |||||
"type" => "OrderedCollectionPage", | |||||
"partOf" => iri, | |||||
"totalItems" => total, | |||||
"orderedItems" => items | |||||
} | |||||
if offset + length(items) < total do | |||||
Map.put(map, "next", "#{iri}?page=#{page + 1}") | |||||
else | |||||
map | |||||
end | |||||
end | |||||
end | end |
@@ -580,7 +580,6 @@ defmodule Pleroma.Web.Router do | |||||
pipe_through(:ostatus) | pipe_through(:ostatus) | ||||
get("/users/:nickname/outbox", ActivityPubController, :outbox) | get("/users/:nickname/outbox", ActivityPubController, :outbox) | ||||
get("/objects/:uuid/likes", ActivityPubController, :object_likes) | |||||
end | end | ||||
pipeline :activitypub_client do | pipeline :activitypub_client do | ||||
@@ -225,69 +225,6 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do | |||||
end | end | ||||
end | end | ||||
describe "/object/:uuid/likes" do | |||||
setup do | |||||
like = insert(:like_activity) | |||||
like_object_ap_id = Object.normalize(like).data["id"] | |||||
uuid = | |||||
like_object_ap_id | |||||
|> String.split("/") | |||||
|> List.last() | |||||
[id: like.data["id"], uuid: uuid] | |||||
end | |||||
test "it returns the like activities in a collection", %{conn: conn, id: id, uuid: uuid} do | |||||
result = | |||||
conn | |||||
|> put_req_header("accept", "application/activity+json") | |||||
|> get("/objects/#{uuid}/likes") | |||||
|> json_response(200) | |||||
assert List.first(result["first"]["orderedItems"])["id"] == id | |||||
assert result["type"] == "OrderedCollection" | |||||
assert result["totalItems"] == 1 | |||||
refute result["first"]["next"] | |||||
end | |||||
test "it does not crash when page number is exceeded total pages", %{conn: conn, uuid: uuid} do | |||||
result = | |||||
conn | |||||
|> put_req_header("accept", "application/activity+json") | |||||
|> get("/objects/#{uuid}/likes?page=2") | |||||
|> json_response(200) | |||||
assert result["type"] == "OrderedCollectionPage" | |||||
assert result["totalItems"] == 1 | |||||
refute result["next"] | |||||
assert Enum.empty?(result["orderedItems"]) | |||||
end | |||||
test "it contains the next key when likes count is more than 10", %{conn: conn} do | |||||
note = insert(:note_activity) | |||||
insert_list(11, :like_activity, note_activity: note) | |||||
uuid = | |||||
note | |||||
|> Object.normalize() | |||||
|> Map.get(:data) | |||||
|> Map.get("id") | |||||
|> String.split("/") | |||||
|> List.last() | |||||
result = | |||||
conn | |||||
|> put_req_header("accept", "application/activity+json") | |||||
|> get("/objects/#{uuid}/likes?page=1") | |||||
|> json_response(200) | |||||
assert result["totalItems"] == 11 | |||||
assert length(result["orderedItems"]) == 10 | |||||
assert result["next"] | |||||
end | |||||
end | |||||
describe "/activities/:uuid" do | describe "/activities/:uuid" do | ||||
test "it returns a json representation of the activity", %{conn: conn} do | test "it returns a json representation of the activity", %{conn: conn} do | ||||
activity = insert(:note_activity) | activity = insert(:note_activity) | ||||