- def generate_object_id do
- host =
- Application.get_env(:pleroma, Pleroma.Web.Endpoint)
- |> Keyword.fetch!(:url)
- |> Keyword.fetch!(:host)
- "https://#{host}/objects/#{Ecto.UUID.generate}"
+ def follow(follower, followed, activity_id \\ nil, local \\ true) do
+ with data <- make_follow_data(follower, followed, activity_id),
+ {:ok, activity} <- insert(data, local),
+ :ok <- maybe_federate(activity) do
+ {:ok, activity}
+ end
+ end
+
+ def unfollow(follower, followed, local \\ true) do
+ with %Activity{} = follow_activity <- fetch_latest_follow(follower, followed),
+ unfollow_data <- make_unfollow_data(follower, followed, follow_activity),
+ {:ok, activity} <- insert(unfollow_data, local),
+ :ok, maybe_federate(activity) do
+ {:ok, activity}
+ end
+ end
+
+ def fetch_activities_for_context(context) do
+ query = from activity in Activity,
+ where: fragment("? @> ?", activity.data, ^%{ type: "Create", context: context }),
+ order_by: [desc: :inserted_at]
+ Repo.all(query)