mirror of
https://github.com/ash-project/ash.git
synced 2024-09-20 13:33:20 +12:00
f6f5d194bf
feat: validatiosn in actions feat: query arguments feat: add `Ash.Query.for_read/3` feat: return changeset with API errors feat: add case insensitive string `CiString`/`:ci_string` feat: support `context/1` and `arg/1` in filter templates feat: support targeting notifications with the `for` option feat: add `ago/2` query function feat: add basic arithmetic operators (+, *, -, /) feat: `sensitive?` option for attributes feat: `sensitive?` option for arguments feat: `private` arguments, which can’t be set using `for_<action>` feat: add `prevent_change` which will erase changes just before the changeset is committed feat: add `match?` validation that supports a custom error message feat: add `interval` type to support `ago/2` function feat: add `url_encoded_binary` type feat: add `function` type improvement: `changing?` is now a validation improvement: add `Transformer.get_persisted/3` improvement: add `api` field to `Notification` improvement: standardize errors, add `to_error_class` improvement: use `Comp` everywhere Improvement: use action on changeset if set by `for_<action_type>` improvement: `action_failed?` field on change sets improvement: remove ability for data layers to add operators (for now at least) Improvement: Changeset.apply_attributes/2 now returns an error tuple Improvement: add a bunch of new/informative errors improvement: runtime filter now uses left join logic (a naive implementation of it) improvement: support more filter templates in resources Improvement: basic/naive type system for operators/functions Fix: properly expand module aliases for options w/o compile time dependency chore(engine): track changeset changes for the request with `manage_changeset?: true`
1.2 KiB
1.2 KiB
Identities
Identities can be used to describe the ways that a resource is uniquely identified. For example, you may have a user resource that has an id
primary key, but is uniquely identifiable via the email
attribute as well.
To configure this, add an identities
block to your resource
For example:
identities do
identity :unique_email, [:email]
end
Effects
Identities are used in various ways across Ash and it's extensions. This list is not necessarily exhaustive:
Ash
- Identities can be used with
c:Ash.Api.get/3
, e.gMyApi.get(User, [email: "foo@bar.com"])
AshPostgres
- The migration generator creates unique constraints for identities
AshJsonApi
- Get routes can be configured to use a specific identity, creating a route like
GET /users/foo@bar.com
AshGraphql
- Get queries and mutations can be configured to use a specific identity, to create a query like the following. (Arbitrary filtering is supported on list queries, this is is for creating queries that return a single result)
query{
getUser(email: "foo@bar.com"){
id
}
}