nulla/lib/nulla_web/controllers/activitypub/follow_json.ex
2025-07-05 15:20:40 +02:00

84 lines
2.1 KiB
Elixir

defmodule NullaWeb.ActivityPub.FollowJSON do
def following(actor, total) do
Jason.OrderedObject.new(
"@context": "https://www.w3.org/ns/activitystreams",
id: "#{actor.ap_id}/following",
type: "OrderedCollection",
totalItems: total,
first: "#{actor.ap_id}/following?page=1"
)
end
def following(actor, total, following_list, page, limit) when is_integer(page) and page > 0 do
data = [
"@context": "https://www.w3.org/ns/activitystreams",
id: "#{actor.ap_id}/following?page=#{page}",
type: "OrderedCollectionPage",
totalItems: total,
next: "#{actor.ap_id}/following?page=#{page + 1}",
prev: "#{actor.ap_id}/following?page=#{page - 1}",
partOf: "#{actor.ap_id}/following",
orderedItems: following_list
]
data =
if page <= 1 do
Keyword.delete(data, :prev)
else
data
end
data =
if page * limit > total do
data
|> Keyword.delete(:next)
|> Keyword.delete(:prev)
else
data
end
Jason.OrderedObject.new(data)
end
def followers(actor, total) do
Jason.OrderedObject.new(
"@context": "https://www.w3.org/ns/activitystreams",
id: "#{actor.ap_id}/followers",
type: "OrderedCollection",
totalItems: total,
first: "#{actor.ap_id}/followers?page=1"
)
end
def followers(actor, total, followers_list, page, limit)
when is_integer(page) and page > 0 do
data = [
"@context": "https://www.w3.org/ns/activitystreams",
id: "#{actor.ap_id}/followers?page=#{page}",
type: "OrderedCollectionPage",
totalItems: total,
next: "#{actor.ap_id}/followers?page=#{page + 1}",
prev: "#{actor.ap_id}/followers?page=#{page - 1}",
partOf: "#{actor.ap_id}/followers",
orderedItems: followers_list
]
data =
if page <= 1 do
Keyword.delete(data, :prev)
else
data
end
data =
if page * limit > total do
data
|> Keyword.delete(:next)
|> Keyword.delete(:prev)
else
data
end
Jason.OrderedObject.new(data)
end
end