defmodule Pleroma.Web.ApiSpec.ChatOperation do
alias OpenApiSpex.Operation
- alias Pleroma.Web.ApiSpec.Helpers
- alias Pleroma.Web.ApiSpec.Schemas.ChatMessageCreateRequest
- alias Pleroma.Web.ApiSpec.Schemas.ChatMessageResponse
- alias Pleroma.Web.ApiSpec.Schemas.ChatResponse
alias OpenApiSpex.Schema
+ alias Pleroma.Web.ApiSpec.Schemas.ChatMessageCreateRequest
+ alias Pleroma.Web.ApiSpec.Schemas.ChatMessage
+ alias Pleroma.Web.ApiSpec.Schemas.Chat
+
+ import Pleroma.Web.ApiSpec.Helpers
@spec open_api_operation(atom) :: Operation.t()
def open_api_operation(action) 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: %{
Operation.response(
"The created or existing chat",
"application/json",
- ChatResponse
+ Chat
)
},
security: [
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())
},
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(
parameters: [
Operation.parameter(:id, :path, :string, "The ID of the Chat")
],
- requestBody: Helpers.request_body("Parameters", ChatMessageCreateRequest, required: true),
+ requestBody: request_body("Parameters", ChatMessageCreateRequest, required: true),
responses: %{
200 =>
Operation.response(
"The newly created ChatMessage",
"application/json",
- ChatMessageResponse
+ ChatMessage
)
},
security: [
}
end
- def chats_response() do
+ def chats_response do
%Schema{
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,
}
end
- def chat_messages_response() do
+ def chat_messages_response do
%Schema{
title: "ChatMessagesResponse",
description: "Response schema for multiple ChatMessages",
type: :array,
- items: ChatMessageResponse,
+ items: ChatMessage,
example: [
%{
"emojis" => [
"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",