Merge branch 'feat/openapi-spec-export' into 'develop'
authorrinpatch <rinpatch@sdf.org>
Wed, 3 Feb 2021 13:21:19 +0000 (13:21 +0000)
committerrinpatch <rinpatch@sdf.org>
Wed, 3 Feb 2021 13:21:19 +0000 (13:21 +0000)
Improve OpenAPI spec and deploy it to api.pleroma.social

See merge request pleroma/pleroma!3296

1  2 
lib/pleroma/web/api_spec/operations/account_operation.ex
lib/pleroma/web/api_spec/operations/admin/report_operation.ex
lib/pleroma/web/api_spec/operations/admin/status_operation.ex
lib/pleroma/web/api_spec/operations/timeline_operation.ex

index 3d451cd5af5e23d5cc3b76912fc176f54d0ae8e8,f11ae53ab9252a49fcddf338c4c057be8cdad8bb..54e5ebc76e2ae943e02b3026d85799f7cf511641
@@@ -26,7 -26,7 +26,7 @@@ defmodule Pleroma.Web.ApiSpec.AccountOp
    @spec create_operation() :: Operation.t()
    def create_operation do
      %Operation{
-       tags: ["accounts"],
+       tags: ["Account credentials"],
        summary: "Register an account",
        description:
          "Creates a user and account records. Returns an account access token for the app that initiated the request. The app should save this token for later, and should wait for the user to confirm their account by clicking a link in their email inbox.",
@@@ -43,7 -43,7 +43,7 @@@
  
    def verify_credentials_operation do
      %Operation{
-       tags: ["accounts"],
+       tags: ["Account credentials"],
        description: "Test to make sure that the user token works.",
        summary: "Verify account credentials",
        operationId: "AccountController.verify_credentials",
@@@ -56,7 -56,7 +56,7 @@@
  
    def update_credentials_operation do
      %Operation{
-       tags: ["accounts"],
+       tags: ["Account credentials"],
        summary: "Update account credentials",
        description: "Update the user's display and preferences.",
        operationId: "AccountController.update_credentials",
@@@ -71,8 -71,8 +71,8 @@@
  
    def relationships_operation do
      %Operation{
-       tags: ["accounts"],
-       summary: "Check relationships to other accounts",
+       tags: ["Retrieve account information"],
+       summary: "Relationship with current account",
        operationId: "AccountController.relationships",
        description: "Find out whether a given account is followed, blocked, muted, etc.",
        security: [%{"oAuth" => ["read:follows"]}],
  
    def show_operation do
      %Operation{
-       tags: ["accounts"],
+       tags: ["Retrieve account information"],
        summary: "Account",
        operationId: "AccountController.show",
        description: "View information about a profile.",
 -      parameters: [%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}],
 +      parameters: [
 +        %Reference{"$ref": "#/components/parameters/accountIdOrNickname"},
 +        with_relationships_param()
 +      ],
        responses: %{
          200 => Operation.response("Account", "application/json", Account),
          401 => Operation.response("Error", "application/json", ApiError),
  
    def statuses_operation do
      %Operation{
-       tags: ["accounts"],
        summary: "Statuses",
+       tags: ["Retrieve account information"],
        operationId: "AccountController.statuses",
        description:
          "Statuses posted to the given account. Public (for public statuses only), or user token + `read:statuses` (for private statuses the user is authorized to see)",
              :with_muted,
              :query,
              BooleanLike,
 -            "Include statuses from muted acccounts."
 +            "Include statuses from muted accounts."
            ),
            Operation.parameter(:exclude_reblogs, :query, BooleanLike, "Exclude reblogs"),
            Operation.parameter(:exclude_replies, :query, BooleanLike, "Exclude replies"),
              :with_muted,
              :query,
              BooleanLike,
 -            "Include reactions from muted acccounts."
 +            "Include reactions from muted accounts."
            )
          ] ++ pagination_params(),
        responses: %{
  
    def followers_operation do
      %Operation{
-       tags: ["accounts"],
+       tags: ["Retrieve account information"],
        summary: "Followers",
        operationId: "AccountController.followers",
        security: [%{"oAuth" => ["read:accounts"]}],
  
    def following_operation do
      %Operation{
-       tags: ["accounts"],
+       tags: ["Retrieve account information"],
        summary: "Following",
        operationId: "AccountController.following",
        security: [%{"oAuth" => ["read:accounts"]}],
  
    def lists_operation do
      %Operation{
-       tags: ["accounts"],
+       tags: ["Retrieve account information"],
        summary: "Lists containing this account",
        operationId: "AccountController.lists",
        security: [%{"oAuth" => ["read:lists"]}],
  
    def follow_operation do
      %Operation{
-       tags: ["accounts"],
+       tags: ["Account actions"],
        summary: "Follow",
        operationId: "AccountController.follow",
        security: [%{"oAuth" => ["follow", "write:follows"]}],
  
    def unfollow_operation do
      %Operation{
-       tags: ["accounts"],
+       tags: ["Account actions"],
        summary: "Unfollow",
        operationId: "AccountController.unfollow",
        security: [%{"oAuth" => ["follow", "write:follows"]}],
  
    def mute_operation do
      %Operation{
-       tags: ["accounts"],
+       tags: ["Account actions"],
        summary: "Mute",
        operationId: "AccountController.mute",
        security: [%{"oAuth" => ["follow", "write:mutes"]}],
  
    def unmute_operation do
      %Operation{
-       tags: ["accounts"],
+       tags: ["Account actions"],
        summary: "Unmute",
        operationId: "AccountController.unmute",
        security: [%{"oAuth" => ["follow", "write:mutes"]}],
  
    def block_operation do
      %Operation{
-       tags: ["accounts"],
+       tags: ["Account actions"],
        summary: "Block",
        operationId: "AccountController.block",
        security: [%{"oAuth" => ["follow", "write:blocks"]}],
  
    def unblock_operation do
      %Operation{
-       tags: ["accounts"],
+       tags: ["Account actions"],
        summary: "Unblock",
        operationId: "AccountController.unblock",
        security: [%{"oAuth" => ["follow", "write:blocks"]}],
  
    def follow_by_uri_operation do
      %Operation{
-       tags: ["accounts"],
+       tags: ["Account actions"],
        summary: "Follow by URI",
        operationId: "AccountController.follows",
        security: [%{"oAuth" => ["follow", "write:follows"]}],
  
    def mutes_operation do
      %Operation{
-       tags: ["accounts"],
-       summary: "Muted accounts",
+       tags: ["Blocks and mutes"],
+       summary: "Retrieve list of mutes",
        operationId: "AccountController.mutes",
        description: "Accounts the user has muted.",
        security: [%{"oAuth" => ["follow", "read:mutes"]}],
 -      parameters: pagination_params(),
 +      parameters: [with_relationships_param() | pagination_params()],
        responses: %{
          200 => Operation.response("Accounts", "application/json", array_of_accounts())
        }
  
    def blocks_operation do
      %Operation{
-       tags: ["accounts"],
-       summary: "Blocked users",
+       tags: ["Blocks and mutes"],
+       summary: "Retrieve list of blocks",
        operationId: "AccountController.blocks",
        description: "View your blocks. See also accounts/:id/{block,unblock}",
        security: [%{"oAuth" => ["read:blocks"]}],
  
    def endorsements_operation do
      %Operation{
-       tags: ["accounts"],
+       tags: ["Retrieve account information"],
        summary: "Endorsements",
        operationId: "AccountController.endorsements",
        description: "Not implemented",
  
    def identity_proofs_operation do
      %Operation{
-       tags: ["accounts"],
+       tags: ["Retrieve account information"],
        summary: "Identity proofs",
        operationId: "AccountController.identity_proofs",
        # Validators complains about unused path params otherwise
index e7acfa27107da71c48324284ce459bf8e19fac18,2e115f241e3b3268bfebdf16f4b9a91c76059606..cfa892d296abba21076839d4b95630e6835d1811
@@@ -19,8 -19,8 +19,8 @@@ defmodule Pleroma.Web.ApiSpec.Admin.Rep
  
    def index_operation do
      %Operation{
-       tags: ["Admin", "Reports"],
-       summary: "Get a list of reports",
+       tags: ["Report managment"],
+       summary: "Retrieve a list of reports",
        operationId: "AdminAPI.ReportController.index",
        security: [%{"oAuth" => ["read:reports"]}],
        parameters: [
@@@ -69,8 -69,8 +69,8 @@@
  
    def show_operation do
      %Operation{
-       tags: ["Admin", "Reports"],
-       summary: "Get an individual report",
+       tags: ["Report managment"],
+       summary: "Retrieve a report",
        operationId: "AdminAPI.ReportController.show",
        parameters: [id_param() | admin_api_params()],
        security: [%{"oAuth" => ["read:reports"]}],
@@@ -83,8 -83,8 +83,8 @@@
  
    def update_operation do
      %Operation{
-       tags: ["Admin", "Reports"],
-       summary: "Change the state of one or multiple reports",
+       tags: ["Report managment"],
+       summary: "Change state of specified reports",
        operationId: "AdminAPI.ReportController.update",
        security: [%{"oAuth" => ["write:reports"]}],
        parameters: admin_api_params(),
@@@ -99,8 -99,8 +99,8 @@@
  
    def notes_create_operation do
      %Operation{
-       tags: ["Admin", "Reports"],
-       summary: "Create report note",
+       tags: ["Report managment"],
+       summary: "Add a note to the report",
        operationId: "AdminAPI.ReportController.notes_create",
        parameters: [id_param() | admin_api_params()],
        requestBody:
  
    def notes_delete_operation do
      %Operation{
-       tags: ["Admin", "Reports"],
-       summary: "Delete report note",
+       tags: ["Report managment"],
+       summary: "Delete note attached to the report",
        operationId: "AdminAPI.ReportController.notes_delete",
        parameters: [
          Operation.parameter(:report_id, :path, :string, "Report ID"),
        properties:
          Map.merge(Account.schema().properties, %{
            nickname: %Schema{type: :string},
 -          deactivated: %Schema{type: :boolean},
 +          is_active: %Schema{type: :boolean},
            local: %Schema{type: :boolean},
            roles: %Schema{
              type: :object,
index 34a0bce07575fa42b37a8e14eeca835a0d68018b,04c97fad91bd48ffdbffe34f25945eb550846352..bbfbd8f930bcb69a6f9efb4bd0742d49c7230bc4
@@@ -21,8 -21,9 +21,9 @@@ defmodule Pleroma.Web.ApiSpec.Admin.Sta
  
    def index_operation do
      %Operation{
-       tags: ["Admin", "Statuses"],
+       tags: ["Status administration"],
        operationId: "AdminAPI.StatusController.index",
+       summary: "Get all statuses",
        security: [%{"oAuth" => ["read:statuses"]}],
        parameters: [
          Operation.parameter(
@@@ -69,8 -70,8 +70,8 @@@
  
    def show_operation do
      %Operation{
-       tags: ["Admin", "Statuses"],
-       summary: "Show Status",
+       tags: ["Status adminitration)"],
+       summary: "Get status",
        operationId: "AdminAPI.StatusController.show",
        parameters: [id_param() | admin_api_params()],
        security: [%{"oAuth" => ["read:statuses"]}],
@@@ -83,8 -84,8 +84,8 @@@
  
    def update_operation do
      %Operation{
-       tags: ["Admin", "Statuses"],
-       summary: "Change the scope of an individual reported status",
+       tags: ["Status adminitration)"],
+       summary: "Change the scope of a status",
        operationId: "AdminAPI.StatusController.update",
        parameters: [id_param() | admin_api_params()],
        security: [%{"oAuth" => ["write:statuses"]}],
@@@ -98,8 -99,8 +99,8 @@@
  
    def delete_operation do
      %Operation{
-       tags: ["Admin", "Statuses"],
-       summary: "Delete an individual reported status",
+       tags: ["Status adminitration)"],
+       summary: "Delete status",
        operationId: "AdminAPI.StatusController.delete",
        parameters: [id_param() | admin_api_params()],
        security: [%{"oAuth" => ["write:statuses"]}],
          avatar: %Schema{type: :string},
          nickname: %Schema{type: :string},
          display_name: %Schema{type: :string},
 -        deactivated: %Schema{type: :boolean},
 +        is_active: %Schema{type: :boolean},
          local: %Schema{type: :boolean},
          roles: %Schema{
            type: :object,
index 01396642c6776d60ac1c2db5d3d5feabcc457471,44f5fb0bd2e32f4bf40a81c64da7945b9f59fcdc..cae18c75813c39841bee8107ab64f46f18f8b2c5
@@@ -25,8 -25,6 +25,8 @@@ defmodule Pleroma.Web.ApiSpec.TimelineO
        security: [%{"oAuth" => ["read:statuses"]}],
        parameters: [
          local_param(),
 +        remote_param(),
 +        only_media_param(),
          with_muted_param(),
          exclude_visibilities_param(),
          reply_visibility_param() | pagination_params()
@@@ -43,8 -41,7 +43,7 @@@
        tags: ["Timelines"],
        summary: "Direct timeline",
        description:
-         "View statuses with a “direct” privacy, from your account or in your notifications",
-       deprecated: true,
+         "View statuses with a “direct” scope addressed to the account. Using this endpoint is discouraged, please use [conversations](#tag/Conversations) or [chats](#tag/Chats).",
        parameters: [with_muted_param() | pagination_params()],
        security: [%{"oAuth" => ["read:statuses"]}],
        operationId: "TimelineController.direct",
@@@ -63,7 -60,6 +62,7 @@@
          local_param(),
          instance_param(),
          only_media_param(),
 +        remote_param(),
          with_muted_param(),
          exclude_visibilities_param(),
          reply_visibility_param() | pagination_params()
          ),
          local_param(),
          only_media_param(),
 +        remote_param(),
          with_muted_param(),
          exclude_visibilities_param() | pagination_params()
        ],
            required: true
          ),
          with_muted_param(),
 +        local_param(),
 +        remote_param(),
 +        only_media_param(),
          exclude_visibilities_param() | pagination_params()
        ],
        operationId: "TimelineController.list",
        "Show only statuses with media attached?"
      )
    end
 +
 +  defp remote_param do
 +    Operation.parameter(
 +      :remote,
 +      :query,
 +      %Schema{allOf: [BooleanLike], default: false},
 +      "Show only remote statuses?"
 +    )
 +  end
  end