View Source AshPagify.Meta (ash_pagify v1.1.0)
Defines a struct for holding meta information of a query result.
Summary
Functions
Returns a AshPagify.Meta struct with the given params, errors, and opts.
Types
@type t() :: %AshPagify.Meta{ ash_pagify: AshPagify.t(), current_limit: pos_integer() | nil, current_offset: non_neg_integer() | nil, current_page: pos_integer() | nil, current_search: String.t() | nil, default_scopes: map() | nil, errors: [{atom(), term()}] | nil, has_next_page?: boolean(), has_previous_page?: boolean(), next_offset: non_neg_integer() | nil, opts: Keyword.t(), params: %{optional(String.t()) => term()}, previous_offset: non_neg_integer() | nil, resource: Ash.Resource.t() | nil, total_count: non_neg_integer() | nil, total_pages: non_neg_integer() | nil }
Meta information for a query result.
:current_limit- The:limitvalue used in the query:current_offset- The:offsetvalue used in the query:current_page- A derived value when using offset-based pagination. Note that the value will be rounded if the offset lies between pages.:current_search- The current full-text search term.:default_scopes- Default scopes loaded for this resource and query.:errors- Any validation errors that occurred.:has_previous_page?,:has_next_page?- Whether there are previous or next pages based on the current page and total pages.:previous_offset,:next_offset- Values based on:current_pageand:current_offset/current_limit.:opts- The options passed to theAshPagifystruct.:ash_pagify- TheAshPagifystruct used in the query.:params- The original, unvalidated params that were passed. Only set if validation errors occurred.:resource- TheAsh.Resourcethat was queried.:total_count- The total count of records for the given query.:total_pages- The total page count based on the total record count and the limit.
Functions
Returns a AshPagify.Meta struct with the given params, errors, and opts.
This function is used internally to build error responses in case of validation errors. You can use it to add additional parameter validation.
Example
In this list function, the given parameters are first validated with
AshPagify.validate/2, which returns a AshPagify struct on success. You can then pass
that struct to a custom validation function, along with the original
parameters and the opts, which both are needed to call this function.
def list_posts(%{} = params) do
opts = []
with {:ok, %AshPagify{} = ash_pagify} <- AshPagify.validate(Post, params, opts),
{:ok, %AshPagify{} = ash_pagify} <- custom_validation(ash_pagify, params, opts) do
AshPagify.run(Post, ash_pagify, opts)
end
endIn your custom validation function, you can retrieve and manipulate the filter
values in the AshPagify struct.
defp custom_validation(%AshPagify{} = ash_pagify, %{} = params, opts) do
filters = ash_pagify.filters
if Keyword.get(filters, :name) != nil do
errors = [filters: [%Ash.Error.Query.InvalidFilterReference{field: :name}]]
{:error, AshPagify.Meta.with_errors(params, errors, opts)}
else
{:ok, ash_pagify}
end
end