update mastofe paths (#95)
[akkoma] / lib / pleroma / web / api_spec / operations / chat_operation.ex
index 16d3d5e22bbbc79432ac41453a1b2246ededdf40..31fd150de4a8618fe0c22ae5d9d06592ff13506b 100644 (file)
@@ -1,10 +1,12 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.Web.ApiSpec.ChatOperation do
   alias OpenApiSpex.Operation
   alias OpenApiSpex.Schema
+  alias Pleroma.Web.ApiSpec.Schemas.ApiError
+  alias Pleroma.Web.ApiSpec.Schemas.BooleanLike
   alias Pleroma.Web.ApiSpec.Schemas.Chat
   alias Pleroma.Web.ApiSpec.Schemas.ChatMessage
 
@@ -18,10 +20,11 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
 
   def mark_as_read_operation do
     %Operation{
-      tags: ["chat"],
+      tags: ["Chats"],
       summary: "Mark all messages in the chat as read",
       operationId: "ChatController.mark_as_read",
       parameters: [Operation.parameter(:id, :path, :string, "The ID of the Chat")],
+      requestBody: request_body("Parameters", mark_as_read()),
       responses: %{
         200 =>
           Operation.response(
@@ -32,7 +35,63 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
       },
       security: [
         %{
-          "oAuth" => ["write"]
+          "oAuth" => ["write:chats"]
+        }
+      ]
+    }
+  end
+
+  def mark_message_as_read_operation do
+    %Operation{
+      tags: ["Chats"],
+      summary: "Mark a message as read",
+      operationId: "ChatController.mark_message_as_read",
+      parameters: [
+        Operation.parameter(:id, :path, :string, "The ID of the Chat"),
+        Operation.parameter(:message_id, :path, :string, "The ID of the message")
+      ],
+      responses: %{
+        200 =>
+          Operation.response(
+            "The read ChatMessage",
+            "application/json",
+            ChatMessage
+          )
+      },
+      security: [
+        %{
+          "oAuth" => ["write:chats"]
+        }
+      ]
+    }
+  end
+
+  def show_operation do
+    %Operation{
+      tags: ["Chats"],
+      summary: "Retrieve a chat",
+      operationId: "ChatController.show",
+      parameters: [
+        Operation.parameter(
+          :id,
+          :path,
+          :string,
+          "The id of the chat",
+          required: true,
+          example: "1234"
+        )
+      ],
+      responses: %{
+        200 =>
+          Operation.response(
+            "The existing chat",
+            "application/json",
+            Chat
+          )
+      },
+      security: [
+        %{
+          "oAuth" => ["read"]
         }
       ]
     }
@@ -40,7 +99,7 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
 
   def create_operation do
     %Operation{
-      tags: ["chat"],
+      tags: ["Chats"],
       summary: "Create a chat",
       operationId: "ChatController.create",
       parameters: [
@@ -63,24 +122,27 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
       },
       security: [
         %{
-          "oAuth" => ["write"]
+          "oAuth" => ["write:chats"]
         }
       ]
     }
   end
 
-  def index_operation do
+  def index2_operation do
     %Operation{
-      tags: ["chat"],
-      summary: "Get a list of chats that you participated in",
-      operationId: "ChatController.index",
-      parameters: pagination_params(),
+      tags: ["Chats"],
+      summary: "Retrieve list of chats",
+      operationId: "ChatController.index2",
+      parameters: [
+        Operation.parameter(:with_muted, :query, BooleanLike, "Include chats from muted users")
+        | pagination_params()
+      ],
       responses: %{
         200 => Operation.response("The chats of the user", "application/json", chats_response())
       },
       security: [
         %{
-          "oAuth" => ["read"]
+          "oAuth" => ["read:chats"]
         }
       ]
     }
@@ -88,8 +150,8 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
 
   def messages_operation do
     %Operation{
-      tags: ["chat"],
-      summary: "Get the most recent messages of the chat",
+      tags: ["Chats"],
+      summary: "Retrieve chat's messages",
       operationId: "ChatController.messages",
       parameters:
         [Operation.parameter(:id, :path, :string, "The ID of the Chat")] ++
@@ -100,11 +162,12 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
             "The messages in the chat",
             "application/json",
             chat_messages_response()
-          )
+          ),
+        404 => Operation.response("Not Found", "application/json", ApiError)
       },
       security: [
         %{
-          "oAuth" => ["read"]
+          "oAuth" => ["read:chats"]
         }
       ]
     }
@@ -112,24 +175,51 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
 
   def post_chat_message_operation do
     %Operation{
-      tags: ["chat"],
+      tags: ["Chats"],
       summary: "Post a message to the chat",
       operationId: "ChatController.post_chat_message",
       parameters: [
         Operation.parameter(:id, :path, :string, "The ID of the Chat")
       ],
-      requestBody: request_body("Parameters", chat_message_create(), required: true),
+      requestBody: request_body("Parameters", chat_message_create()),
       responses: %{
         200 =>
           Operation.response(
             "The newly created ChatMessage",
             "application/json",
             ChatMessage
+          ),
+        400 => Operation.response("Bad Request", "application/json", ApiError),
+        422 => Operation.response("MRF Rejection", "application/json", ApiError)
+      },
+      security: [
+        %{
+          "oAuth" => ["write:chats"]
+        }
+      ]
+    }
+  end
+
+  def delete_message_operation do
+    %Operation{
+      tags: ["Chats"],
+      summary: "Delete message",
+      operationId: "ChatController.delete_message",
+      parameters: [
+        Operation.parameter(:id, :path, :string, "The ID of the Chat"),
+        Operation.parameter(:message_id, :path, :string, "The ID of the message")
+      ],
+      responses: %{
+        200 =>
+          Operation.response(
+            "The deleted ChatMessage",
+            "application/json",
+            ChatMessage
           )
       },
       security: [
         %{
-          "oAuth" => ["write"]
+          "oAuth" => ["write:chats"]
         }
       ]
     }
@@ -146,7 +236,7 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
           "account" => %{
             "pleroma" => %{
               "is_admin" => false,
-              "confirmation_pending" => false,
+              "is_confirmed" => true,
               "hide_followers_count" => false,
               "is_moderator" => false,
               "hide_favorites" => true,
@@ -216,15 +306,17 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
           "content" => "Check this out :firefox:",
           "id" => "13",
           "chat_id" => "1",
-          "actor_id" => "someflakeid"
+          "account_id" => "someflakeid",
+          "unread" => false
         },
         %{
-          "actor_id" => "someflakeid",
+          "account_id" => "someflakeid",
           "content" => "Whats' up?",
           "id" => "12",
           "chat_id" => "1",
           "emojis" => [],
-          "created_at" => "2020-04-21T15:06:45.000Z"
+          "created_at" => "2020-04-21T15:06:45.000Z",
+          "unread" => false
         }
       ]
     }
@@ -236,14 +328,34 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
       description: "POST body for creating an chat message",
       type: :object,
       properties: %{
-        content: %Schema{type: :string, description: "The content of your message"},
+        content: %Schema{
+          type: :string,
+          description: "The content of your message. Optional if media_id is present"
+        },
         media_id: %Schema{type: :string, description: "The id of an upload"}
       },
-      required: [:content],
       example: %{
         "content" => "Hey wanna buy feet pics?",
         "media_id" => "134234"
       }
     }
   end
+
+  def mark_as_read do
+    %Schema{
+      title: "MarkAsReadRequest",
+      description: "POST body for marking a number of chat messages as read",
+      type: :object,
+      required: [:last_read_id],
+      properties: %{
+        last_read_id: %Schema{
+          type: :string,
+          description: "The content of your message."
+        }
+      },
+      example: %{
+        "last_read_id" => "abcdef12456"
+      }
+    }
+  end
 end