Merge branch 'develop' of git.pleroma.social:pleroma/pleroma into remake-remodel-dms
[akkoma] / lib / pleroma / web / api_spec / operations / chat_operation.ex
index 546bc4d9b9f38df90efd1d520dc0bb8ed37b5477..8ba10c60338eddb338960f2da2c9e64fbe426d57 100644 (file)
@@ -5,10 +5,10 @@
 defmodule Pleroma.Web.ApiSpec.ChatOperation do
   alias OpenApiSpex.Operation
   alias OpenApiSpex.Schema
-  alias Pleroma.Web.ApiSpec.Helpers
-  alias Pleroma.Web.ApiSpec.Schemas.ChatMessageCreateRequest
-  alias Pleroma.Web.ApiSpec.Schemas.ChatMessageResponse
-  alias Pleroma.Web.ApiSpec.Schemas.ChatResponse
+  alias Pleroma.Web.ApiSpec.Schemas.Chat
+  alias Pleroma.Web.ApiSpec.Schemas.ChatMessage
+
+  import Pleroma.Web.ApiSpec.Helpers
 
   @spec open_api_operation(atom) :: Operation.t()
   def open_api_operation(action) do
@@ -16,6 +16,59 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
     apply(__MODULE__, operation, [])
   end
 
+  def mark_as_read_operation do
+    %Operation{
+      tags: ["chat"],
+      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")],
+      responses: %{
+        200 =>
+          Operation.response(
+            "The updated chat",
+            "application/json",
+            Chat
+          )
+      },
+      security: [
+        %{
+          "oAuth" => ["write"]
+        }
+      ]
+    }
+  end
+
+  def show_operation do
+    %Operation{
+      tags: ["chat"],
+      summary: "Create 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"]
+        }
+      ]
+    }
+  end
+
   def create_operation do
     %Operation{
       tags: ["chat"],
@@ -23,12 +76,12 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
       operationId: "ChatController.create",
       parameters: [
         Operation.parameter(
-          :ap_id,
+          :id,
           :path,
           :string,
-          "The ActivityPub id of the recipient of this chat.",
+          "The account id of the recipient of this chat",
           required: true,
-          example: "https://lain.com/users/lain"
+          example: "someflakeid"
         )
       ],
       responses: %{
@@ -36,7 +89,7 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
           Operation.response(
             "The created or existing chat",
             "application/json",
-            ChatResponse
+            Chat
           )
       },
       security: [
@@ -52,11 +105,7 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
       tags: ["chat"],
       summary: "Get a list of chats that you participated in",
       operationId: "ChatController.index",
-      parameters: [
-        Operation.parameter(:limit, :query, :integer, "How many results to return", example: 20),
-        Operation.parameter(:min_id, :query, :string, "Return only chats after this id"),
-        Operation.parameter(:max_id, :query, :string, "Return only chats before this id")
-      ],
+      parameters: pagination_params(),
       responses: %{
         200 => Operation.response("The chats of the user", "application/json", chats_response())
       },
@@ -73,12 +122,9 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
       tags: ["chat"],
       summary: "Get the most recent messages of the chat",
       operationId: "ChatController.messages",
-      parameters: [
-        Operation.parameter(:id, :path, :string, "The ID of the Chat"),
-        Operation.parameter(:limit, :query, :integer, "How many results to return", example: 20),
-        Operation.parameter(:min_id, :query, :string, "Return only messages after this id"),
-        Operation.parameter(:max_id, :query, :string, "Return only messages before this id")
-      ],
+      parameters:
+        [Operation.parameter(:id, :path, :string, "The ID of the Chat")] ++
+          pagination_params(),
       responses: %{
         200 =>
           Operation.response(
@@ -103,13 +149,38 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
       parameters: [
         Operation.parameter(:id, :path, :string, "The ID of the Chat")
       ],
-      requestBody: Helpers.request_body("Parameters", ChatMessageCreateRequest, required: true),
+      requestBody: request_body("Parameters", chat_message_create(), required: true),
       responses: %{
         200 =>
           Operation.response(
             "The newly created ChatMessage",
             "application/json",
-            ChatMessageResponse
+            ChatMessage
+          )
+      },
+      security: [
+        %{
+          "oAuth" => ["write"]
+        }
+      ]
+    }
+  end
+
+  def delete_message_operation do
+    %Operation{
+      tags: ["chat"],
+      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: [
@@ -125,11 +196,10 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
       title: "ChatsResponse",
       description: "Response schema for multiple Chats",
       type: :array,
-      items: ChatResponse,
+      items: Chat,
       example: [
         %{
-          "recipient" => "https://dontbulling.me/users/lain",
-          "recipient_account" => %{
+          "account" => %{
             "pleroma" => %{
               "is_admin" => false,
               "confirmation_pending" => false,
@@ -187,7 +257,7 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
       title: "ChatMessagesResponse",
       description: "Response schema for multiple ChatMessages",
       type: :array,
-      items: ChatMessageResponse,
+      items: ChatMessage,
       example: [
         %{
           "emojis" => [
@@ -202,10 +272,10 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
           "content" => "Check this out :firefox:",
           "id" => "13",
           "chat_id" => "1",
-          "actor" => "https://dontbulling.me/users/lain"
+          "actor_id" => "someflakeid"
         },
         %{
-          "actor" => "https://dontbulling.me/users/lain",
+          "actor_id" => "someflakeid",
           "content" => "Whats' up?",
           "id" => "12",
           "chat_id" => "1",
@@ -215,4 +285,21 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do
       ]
     }
   end
+
+  def chat_message_create do
+    %Schema{
+      title: "ChatMessageCreateRequest",
+      description: "POST body for creating an chat message",
+      type: :object,
+      properties: %{
+        content: %Schema{type: :string, description: "The content of your message"},
+        media_id: %Schema{type: :string, description: "The id of an upload"}
+      },
+      required: [:content],
+      example: %{
+        "content" => "Hey wanna buy feet pics?",
+        "media_id" => "134234"
+      }
+    }
+  end
 end