[#2456] OpenAPI-related tweaks. Removed support for with_relationships param in GET /api/v1/accounts/search.
				
					
				
			This commit is contained in:
		
							parent
							
								
									59b6d5f2aa
								
							
						
					
					
						commit
						8062d590dd
					
				
					 7 changed files with 31 additions and 29 deletions
				
			
		| 
						 | 
				
			
			@ -49,7 +49,12 @@ def pagination_params do
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  def with_relationships_param do
 | 
			
		||||
    Operation.parameter(:with_relationships, :query, BooleanLike, "Include relationships")
 | 
			
		||||
    Operation.parameter(
 | 
			
		||||
      :with_relationships,
 | 
			
		||||
      :query,
 | 
			
		||||
      BooleanLike,
 | 
			
		||||
      "Embed relationships into accounts."
 | 
			
		||||
    )
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def empty_object_response do
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,7 @@ def open_api_operation(action) do
 | 
			
		|||
    apply(__MODULE__, operation, [])
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Note: `with_relationships` param is not supported (PleromaFE uses this op for autocomplete)
 | 
			
		||||
  def account_search_operation do
 | 
			
		||||
    %Operation{
 | 
			
		||||
      tags: ["Search"],
 | 
			
		||||
| 
						 | 
				
			
			@ -45,8 +46,7 @@ def account_search_operation do
 | 
			
		|||
          :query,
 | 
			
		||||
          %Schema{allOf: [BooleanLike], default: false},
 | 
			
		||||
          "Only include accounts that the user is following"
 | 
			
		||||
        ),
 | 
			
		||||
        with_relationships_param()
 | 
			
		||||
        )
 | 
			
		||||
      ],
 | 
			
		||||
      responses: %{
 | 
			
		||||
        200 =>
 | 
			
		||||
| 
						 | 
				
			
			@ -139,8 +139,8 @@ def search2_operation do
 | 
			
		|||
          :query,
 | 
			
		||||
          %Schema{allOf: [BooleanLike], default: false},
 | 
			
		||||
          "Only include accounts that the user is following"
 | 
			
		||||
        )
 | 
			
		||||
        | pagination_params()
 | 
			
		||||
        ),
 | 
			
		||||
        with_relationships_param() | pagination_params()
 | 
			
		||||
      ],
 | 
			
		||||
      responses: %{
 | 
			
		||||
        200 => Operation.response("Results", "application/json", results2())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,6 @@ defmodule Pleroma.Web.ApiSpec.StatusOperation do
 | 
			
		|||
  alias OpenApiSpex.Schema
 | 
			
		||||
  alias Pleroma.Web.ApiSpec.AccountOperation
 | 
			
		||||
  alias Pleroma.Web.ApiSpec.Schemas.ApiError
 | 
			
		||||
  alias Pleroma.Web.ApiSpec.Schemas.BooleanLike
 | 
			
		||||
  alias Pleroma.Web.ApiSpec.Schemas.FlakeID
 | 
			
		||||
  alias Pleroma.Web.ApiSpec.Schemas.ScheduledStatus
 | 
			
		||||
  alias Pleroma.Web.ApiSpec.Schemas.Status
 | 
			
		||||
| 
						 | 
				
			
			@ -349,10 +348,7 @@ def bookmarks_operation do
 | 
			
		|||
      summary: "Bookmarked statuses",
 | 
			
		||||
      description: "Statuses the user has bookmarked",
 | 
			
		||||
      operationId: "StatusController.bookmarks",
 | 
			
		||||
      parameters: [
 | 
			
		||||
        Operation.parameter(:with_relationships, :query, BooleanLike, "Include relationships")
 | 
			
		||||
        | pagination_params()
 | 
			
		||||
      ],
 | 
			
		||||
      parameters: pagination_params(),
 | 
			
		||||
      security: [%{"oAuth" => ["read:bookmarks"]}],
 | 
			
		||||
      responses: %{
 | 
			
		||||
        200 => Operation.response("Array of Statuses", "application/json", array_of_statuses())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,8 +27,7 @@ def home_operation do
 | 
			
		|||
        local_param(),
 | 
			
		||||
        with_muted_param(),
 | 
			
		||||
        exclude_visibilities_param(),
 | 
			
		||||
        reply_visibility_param(),
 | 
			
		||||
        with_relationships_param() | pagination_params()
 | 
			
		||||
        reply_visibility_param() | pagination_params()
 | 
			
		||||
      ],
 | 
			
		||||
      operationId: "TimelineController.home",
 | 
			
		||||
      responses: %{
 | 
			
		||||
| 
						 | 
				
			
			@ -63,8 +62,7 @@ def public_operation do
 | 
			
		|||
        only_media_param(),
 | 
			
		||||
        with_muted_param(),
 | 
			
		||||
        exclude_visibilities_param(),
 | 
			
		||||
        reply_visibility_param(),
 | 
			
		||||
        with_relationships_param() | pagination_params()
 | 
			
		||||
        reply_visibility_param() | pagination_params()
 | 
			
		||||
      ],
 | 
			
		||||
      operationId: "TimelineController.public",
 | 
			
		||||
      responses: %{
 | 
			
		||||
| 
						 | 
				
			
			@ -109,8 +107,7 @@ def hashtag_operation do
 | 
			
		|||
        local_param(),
 | 
			
		||||
        only_media_param(),
 | 
			
		||||
        with_muted_param(),
 | 
			
		||||
        exclude_visibilities_param(),
 | 
			
		||||
        with_relationships_param() | pagination_params()
 | 
			
		||||
        exclude_visibilities_param() | pagination_params()
 | 
			
		||||
      ],
 | 
			
		||||
      operationId: "TimelineController.hashtag",
 | 
			
		||||
      responses: %{
 | 
			
		||||
| 
						 | 
				
			
			@ -134,8 +131,7 @@ def list_operation do
 | 
			
		|||
          required: true
 | 
			
		||||
        ),
 | 
			
		||||
        with_muted_param(),
 | 
			
		||||
        exclude_visibilities_param(),
 | 
			
		||||
        with_relationships_param() | pagination_params()
 | 
			
		||||
        exclude_visibilities_param() | pagination_params()
 | 
			
		||||
      ],
 | 
			
		||||
      operationId: "TimelineController.list",
 | 
			
		||||
      responses: %{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -104,8 +104,16 @@ def put_if_exist(map, _key, nil), do: map
 | 
			
		|||
 | 
			
		||||
  def put_if_exist(map, key, value), do: Map.put(map, key, value)
 | 
			
		||||
 | 
			
		||||
  def with_relationships?(params) do
 | 
			
		||||
    # To do: change to `truthy_param?(params["with_relationships"])` once PleromaFE supports it
 | 
			
		||||
    not explicitly_falsy_param?(params["with_relationships"])
 | 
			
		||||
  @doc """
 | 
			
		||||
  Returns true if request specifies to include embedded relationships in account objects.
 | 
			
		||||
  May only be used in selected account-related endpoints; has no effect for status- or
 | 
			
		||||
    notification-related endpoints.
 | 
			
		||||
  """
 | 
			
		||||
  # Intended for PleromaFE: https://git.pleroma.social/pleroma/pleroma-fe/-/issues/838
 | 
			
		||||
  def embed_relationships?(params) do
 | 
			
		||||
    # To do once OpenAPI transition mess is over: just `truthy_param?(params[:with_relationships])`
 | 
			
		||||
    params
 | 
			
		||||
    |> Map.get(:with_relationships, params["with_relationships"])
 | 
			
		||||
    |> truthy_param?()
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
 | 
			
		|||
      add_link_headers: 2,
 | 
			
		||||
      truthy_param?: 1,
 | 
			
		||||
      assign_account_by_id: 2,
 | 
			
		||||
      with_relationships?: 1,
 | 
			
		||||
      embed_relationships?: 1,
 | 
			
		||||
      json_response: 3
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -275,7 +275,7 @@ def followers(%{assigns: %{user: for_user, account: user}} = conn, params) do
 | 
			
		|||
      for: for_user,
 | 
			
		||||
      users: followers,
 | 
			
		||||
      as: :user,
 | 
			
		||||
      embed_relationships: with_relationships?(params)
 | 
			
		||||
      embed_relationships: embed_relationships?(params)
 | 
			
		||||
    )
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -300,7 +300,7 @@ def following(%{assigns: %{user: for_user, account: user}} = conn, params) do
 | 
			
		|||
      for: for_user,
 | 
			
		||||
      users: followers,
 | 
			
		||||
      as: :user,
 | 
			
		||||
      embed_relationships: with_relationships?(params)
 | 
			
		||||
      embed_relationships: embed_relationships?(params)
 | 
			
		||||
    )
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,12 +33,10 @@ def account_search(%{assigns: %{user: user}} = conn, %{q: query} = params) do
 | 
			
		|||
 | 
			
		||||
    conn
 | 
			
		||||
    |> put_view(AccountView)
 | 
			
		||||
    # https://git.pleroma.social/pleroma/pleroma-fe/-/issues/838#note_59223
 | 
			
		||||
    |> render("index.json",
 | 
			
		||||
      users: accounts,
 | 
			
		||||
      for: user,
 | 
			
		||||
      as: :user,
 | 
			
		||||
      embed_relationships: ControllerHelper.with_relationships?(params)
 | 
			
		||||
      as: :user
 | 
			
		||||
    )
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -82,7 +80,7 @@ defp search_options(params, user) do
 | 
			
		|||
      offset: params[:offset],
 | 
			
		||||
      type: params[:type],
 | 
			
		||||
      author: get_author(params),
 | 
			
		||||
      embed_relationships: ControllerHelper.with_relationships?(params),
 | 
			
		||||
      embed_relationships: ControllerHelper.embed_relationships?(params),
 | 
			
		||||
      for_user: user
 | 
			
		||||
    ]
 | 
			
		||||
    |> Enum.filter(&elem(&1, 1))
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +93,6 @@ defp resource_search(_, "accounts", query, options) do
 | 
			
		|||
      users: accounts,
 | 
			
		||||
      for: options[:for_user],
 | 
			
		||||
      as: :user,
 | 
			
		||||
      # https://git.pleroma.social/pleroma/pleroma-fe/-/issues/838#note_59223
 | 
			
		||||
      embed_relationships: options[:embed_relationships]
 | 
			
		||||
    )
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue