aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/web/pleroma_api/controllers/subscription_notification_controller.ex
diff options
context:
space:
mode:
authorMaksim Pechnikov <parallel588@gmail.com>2019-09-28 10:32:03 +0300
committerMaksim Pechnikov <parallel588@gmail.com>2019-09-28 10:36:04 +0300
commit1053319cd64a0eab40fab6dc9ce3a1b78711069b (patch)
tree3d613f7c6129f667ea16aedfe46259d9ca6bde29 /lib/pleroma/web/pleroma_api/controllers/subscription_notification_controller.ex
parent73ae38ca04df02656bfb239ceba4ffe64879e927 (diff)
parent50ab06435353144582f6afbf37402aef13c2b3f1 (diff)
downloadpleroma-1053319cd64a0eab40fab6dc9ce3a1b78711069b.tar.gz
Merge branch 'develop' into tests/mastodon_api_controller.ex
Diffstat (limited to 'lib/pleroma/web/pleroma_api/controllers/subscription_notification_controller.ex')
-rw-r--r--lib/pleroma/web/pleroma_api/controllers/subscription_notification_controller.ex71
1 files changed, 71 insertions, 0 deletions
diff --git a/lib/pleroma/web/pleroma_api/controllers/subscription_notification_controller.ex b/lib/pleroma/web/pleroma_api/controllers/subscription_notification_controller.ex
new file mode 100644
index 000000000..37c2222de
--- /dev/null
+++ b/lib/pleroma/web/pleroma_api/controllers/subscription_notification_controller.ex
@@ -0,0 +1,71 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.PleromaAPI.SubscriptionNotificationController do
+ use Pleroma.Web, :controller
+
+ import Pleroma.Web.ControllerHelper, only: [add_link_headers: 2]
+
+ alias Pleroma.Activity
+ alias Pleroma.SubscriptionNotification
+ alias Pleroma.User
+ alias Pleroma.Web.PleromaAPI.PleromaAPI
+
+ def index(%{assigns: %{user: user}} = conn, params) do
+ notifications =
+ user
+ |> PleromaAPI.get_subscription_notifications(params)
+ |> Enum.map(&build_notification_data/1)
+
+ conn
+ |> add_link_headers(notifications)
+ |> render("index.json", %{notifications: notifications, for: user})
+ end
+
+ def show(%{assigns: %{user: user}} = conn, %{"id" => id} = _params) do
+ with {:ok, notification} <- SubscriptionNotification.get(user, id) do
+ render(conn, "show.json", %{
+ subscription_notification: build_notification_data(notification),
+ for: user
+ })
+ else
+ {:error, reason} ->
+ conn
+ |> put_status(:forbidden)
+ |> json(%{"error" => reason})
+ end
+ end
+
+ def clear(%{assigns: %{user: user}} = conn, _params) do
+ SubscriptionNotification.clear(user)
+ json(conn, %{})
+ end
+
+ def dismiss(%{assigns: %{user: user}} = conn, %{"id" => id} = _params) do
+ with {:ok, _notif} <- SubscriptionNotification.dismiss(user, id) do
+ json(conn, %{})
+ else
+ {:error, reason} ->
+ conn
+ |> put_status(:forbidden)
+ |> json(%{"error" => reason})
+ end
+ end
+
+ def destroy_multiple(
+ %{assigns: %{user: user}} = conn,
+ %{"ids" => ids} = _params
+ ) do
+ SubscriptionNotification.destroy_multiple(user, ids)
+ json(conn, %{})
+ end
+
+ defp build_notification_data(%{activity: %{data: data}} = notification) do
+ %{
+ notification: notification,
+ actor: User.get_cached_by_ap_id(data["actor"]),
+ parent_activity: Activity.get_create_by_object_ap_id(data["object"])
+ }
+ end
+end