summaryrefslogtreecommitdiff
path: root/lib/pleroma/web/api_spec/operations/pleroma_report_operation.ex
blob: ee8870dc2bd879cfa956f14a617b9d8ee715c77b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# Pleroma: A lightweight social networking server
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.Web.ApiSpec.PleromaReportOperation do
  alias OpenApiSpex.Operation
  alias OpenApiSpex.Schema
  alias Pleroma.Web.ApiSpec.Admin.ReportOperation
  alias Pleroma.Web.ApiSpec.Schemas.Account
  alias Pleroma.Web.ApiSpec.Schemas.ApiError
  alias Pleroma.Web.ApiSpec.Schemas.FlakeID
  alias Pleroma.Web.ApiSpec.Schemas.Status

  def open_api_operation(action) do
    operation = String.to_existing_atom("#{action}_operation")
    apply(__MODULE__, operation, [])
  end

  def index_operation do
    %Operation{
      tags: ["Reports"],
      summary: "Get a list of your own reports",
      operationId: "PleromaAPI.ReportController.index",
      security: [%{"oAuth" => ["read:reports"]}],
      parameters: [
        Operation.parameter(
          :state,
          :query,
          ReportOperation.report_state(),
          "Filter by report state"
        ),
        Operation.parameter(
          :limit,
          :query,
          %Schema{type: :integer},
          "The number of records to retrieve"
        ),
        Operation.parameter(
          :page,
          :query,
          %Schema{type: :integer, default: 1},
          "Page number"
        ),
        Operation.parameter(
          :page_size,
          :query,
          %Schema{type: :integer, default: 50},
          "Number number of log entries per page"
        )
      ],
      responses: %{
        200 =>
          Operation.response("Response", "application/json", %Schema{
            type: :object,
            properties: %{
              total: %Schema{type: :integer},
              reports: %Schema{
                type: :array,
                items: report()
              }
            }
          }),
        404 => Operation.response("Not Found", "application/json", ApiError)
      }
    }
  end

  def show_operation do
    %Operation{
      tags: ["Reports"],
      summary: "Get an individual report",
      operationId: "PleromaAPI.ReportController.show",
      parameters: [ReportOperation.id_param()],
      security: [%{"oAuth" => ["read:reports"]}],
      responses: %{
        200 => Operation.response("Report", "application/json", report()),
        404 => Operation.response("Not Found", "application/json", ApiError)
      }
    }
  end

  # Copied from ReportOperation.report with removing notes
  defp report do
    %Schema{
      type: :object,
      properties: %{
        id: FlakeID,
        state: ReportOperation.report_state(),
        account: Account,
        actor: Account,
        content: %Schema{type: :string},
        created_at: %Schema{type: :string, format: :"date-time"},
        statuses: %Schema{type: :array, items: Status}
      }
    }
  end
end