Browse Source

Move notification actions to PleromaAPI.NotificationController

chore/expose-invalidation-to-adminfe
Egor Kislitsyn 4 years ago
parent
commit
5ba6e1c322
No known key found for this signature in database GPG Key ID: 1B49CB15B71E7805
5 changed files with 41 additions and 51 deletions
  1. +3
    -3
      lib/pleroma/web/api_spec/operations/pleroma_notification_operation.ex
  2. +36
    -0
      lib/pleroma/web/pleroma_api/controllers/notification_controller.ex
  3. +0
    -46
      lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex
  4. +1
    -1
      lib/pleroma/web/router.ex
  5. +1
    -1
      test/web/pleroma_api/controllers/notification_controller_test.exs

lib/pleroma/web/api_spec/operations/pleroma_operation.ex → lib/pleroma/web/api_spec/operations/pleroma_notification_operation.ex View File

@@ -2,7 +2,7 @@
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.Web.ApiSpec.PleromaOperation do
defmodule Pleroma.Web.ApiSpec.PleromaNotificationOperation do
alias OpenApiSpex.Operation
alias OpenApiSpex.Schema
alias Pleroma.Web.ApiSpec.NotificationOperation
@@ -13,7 +13,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaOperation do
apply(__MODULE__, operation, [])
end

def mark_notifications_as_read_operation do
def mark_as_read_operation do
%Operation{
tags: ["Notifications"],
summary: "Mark notifications as read. Query parameters are mutually exclusive.",
@@ -22,7 +22,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaOperation do
Operation.parameter(:max_id, :query, :string, "Read all notifications up to this id")
],
security: [%{"oAuth" => ["write:notifications"]}],
operationId: "PleromaController.mark_notifications_as_read",
operationId: "PleromaAPI.NotificationController.mark_as_read",
responses: %{
200 =>
Operation.response(

+ 36
- 0
lib/pleroma/web/pleroma_api/controllers/notification_controller.ex View File

@@ -0,0 +1,36 @@
# Pleroma: A lightweight social networking server
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.Web.PleromaAPI.NotificationController do
use Pleroma.Web, :controller

alias Pleroma.Notification
alias Pleroma.Plugs.OAuthScopesPlug

plug(Pleroma.Web.ApiSpec.CastAndValidate)
plug(OAuthScopesPlug, %{scopes: ["write:notifications"]} when action == :mark_as_read)
plug(:put_view, Pleroma.Web.MastodonAPI.NotificationView)

defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaNotificationOperation

def mark_as_read(%{assigns: %{user: user}} = conn, %{id: notification_id}) do
with {:ok, notification} <- Notification.read_one(user, notification_id) do
render(conn, "show.json", notification: notification, for: user)
else
{:error, message} ->
conn
|> put_status(:bad_request)
|> json(%{"error" => message})
end
end

def mark_as_read(%{assigns: %{user: user}} = conn, %{max_id: max_id}) do
notifications =
user
|> Notification.set_read_up_to(max_id)
|> Enum.take(80)

render(conn, "index.json", notifications: notifications, for: user)
end
end

+ 0
- 46
lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex View File

@@ -1,46 +0,0 @@
# Pleroma: A lightweight social networking server
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.Web.PleromaAPI.PleromaAPIController do
use Pleroma.Web, :controller

alias Pleroma.Notification
alias Pleroma.Plugs.OAuthScopesPlug
alias Pleroma.Web.MastodonAPI.NotificationView

plug(Pleroma.Web.ApiSpec.CastAndValidate)

plug(
OAuthScopesPlug,
%{scopes: ["write:notifications"]} when action == :mark_notifications_as_read
)

defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaOperation

def mark_notifications_as_read(%{assigns: %{user: user}} = conn, %{id: notification_id}) do
with {:ok, notification} <- Notification.read_one(user, notification_id) do
conn
|> put_view(NotificationView)
|> render("show.json", %{notification: notification, for: user})
else
{:error, message} ->
conn
|> put_status(:bad_request)
|> json(%{"error" => message})
end
end

def mark_notifications_as_read(%{assigns: %{user: user}} = conn, %{max_id: max_id}) do
with notifications <- Notification.set_read_up_to(user, max_id) do
notifications = Enum.take(notifications, 80)

conn
|> put_view(NotificationView)
|> render("index.json",
notifications: notifications,
for: user
)
end
end
end

+ 1
- 1
lib/pleroma/web/router.ex View File

@@ -312,7 +312,7 @@ defmodule Pleroma.Web.Router do

put("/statuses/:id/reactions/:emoji", EmojiReactionController, :create)
delete("/statuses/:id/reactions/:emoji", EmojiReactionController, :delete)
post("/notifications/read", PleromaAPIController, :mark_notifications_as_read)
post("/notifications/read", NotificationController, :mark_as_read)

patch("/accounts/update_avatar", AccountController, :update_avatar)
patch("/accounts/update_banner", AccountController, :update_banner)


test/web/pleroma_api/controllers/pleroma_api_controller_test.exs → test/web/pleroma_api/controllers/notification_controller_test.exs View File

@@ -2,7 +2,7 @@
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do
defmodule Pleroma.Web.PleromaAPI.NotificationControllerTest do
use Pleroma.Web.ConnCase

alias Pleroma.Notification

Loading…
Cancel
Save