As mentioned in the upgrade guide, the point of dropping auto generation of
types was avoiding conflicts when two arguments had the same name but different
types. Now that we require explicit generation, we can actually support that
usecase for, e.g., arguments with the same name but different types in
create/update mutations.
Step 1: update Ash
Step 2: mass rename Api to Domain
Step 3: Ash.Query.expr -> Ash.Expr.expr
Also change ref interpolation
Step 4: remove all warnings
Step 5: remove registries from tests
Step 6: fix filter
Step 7: private? -> !public?
Step 8: Ash.Calculation -> Ash.Resource.Calculation
Step 9: use depend_on_resources/1 -> resources/1
Step 10: add Domain to all resources
Step 11: use Ash module for all actions
Step 12: add public? true all around
Step 13: remove verbose? from options passed during Domain calls
Step 14: add simple_sat
Step 15: Ash.ErrorKind is no more, so remove code from errors
Step 16: sprinkle default_accept :* around tests
Step 17: replace Ash.Changeset.new/2 with Ash.Changeset.for_*
Step 18: calculation fixups
- Context is now a struct and arguments go under the arguments key
- Function based calculations receive a list of records
- Add a select to query-based loads
- select -> load
Step 19: pass the correct name to pass the policy in tests
Step 20: Ash.Query.new/2 is no more
Step 21: add AshGraphql.Resource.embedded? utility function
Use that instead of Ash.Type.embedded_type?(resource_or_type) since resources
are not types anymore
Step 22: handle struct + instance_of: Resource in unions
Resources are not type anymore so they need to be passed this way in unions
Step 23: ensure we only check GraphQL actions for pagination
All reads are now paginated by default, so this triggered a compilation error
Step 24: swap arguments for sort on calculations
Step 25: remove unused debug? option
* fix: regenerate spark formatter and cheatsheet
Make CI pass again
* feat: allow resources without types
Ensure they only expose generic action queries. Add checks to ensure that either
`type :resource_type` or `generate_object? false` is passed if it's needed.
Close#119
* chore: update ash to use Ash.Type.Enum descriptions
Contextually, remove an unreachable clause that caused dyalizer to fail,
see https://github.com/ash-project/ash/pull/873 for the commit that made
it unreachable
* feat: allow providing descriptions for enum values
If the module exports `graphql_describe_enum_value/1`, use that. Otherwise,
fallback to the Ash.Type.Enum value descriptions introduced in
https://github.com/ash-project/ash/pull/940.
Close#116
Building upon #110, this restores the old behaviour of the result being nullable
when root level errors are present.
While the result is guaranteed to not be nullable in standard conditions (since
either result or errors are always present), when errors are moved to the root
level it could become null, so declaring it non-nullable propagates the null up
to the data field.
This actually causes compatibility problems with some client libraries (e.g.
Relay) that expect the inner result to be null, _not_ data, if there's an error.
This also adds dedicated RootLevelErrors versions of the Api and the Schema
since the configuration is accessed at compile time now, so put_env was not
enough to test them correctly.
Adds a new option for queries and mutations that defines which arguments or
attributes will use a global Relay ID and their type. This allows automatically
decoding them before hitting their action.
This paves the way to automatic translation derived from the arguments, which
will be implemented subsequently.
---------
Co-authored-by: Zach Daniel <zachary.s.daniel@gmail.com>
* feat: add support for relay global IDs
* improvement: use the GraphQL type when projecting fields
This allows picking also up fields coming from fragments in queries returning an
interface
* feat: add relay node query
Allow retrieving a resource implementing the Node interface given its Relay
global id.
An error occurs at compile time:
== Compilation error in file test/support/schema.ex ==
** (MatchError) no match of right hand side value: {:error, "Must provide field type for max"}
lib/resource/resource.ex:2278: AshGraphql.Resource.filterable?/2
(elixir 1.15.4) lib/enum.ex:4265: Enum.filter_list/2
(elixir 1.15.4) lib/enum.ex:4266: Enum.filter_list/2
lib/resource/resource.ex:2229: AshGraphql.Resource.aggregate_filter_fields/2
lib/resource/resource.ex:2195: AshGraphql.Resource.resource_filter_fields/2
lib/resource/resource.ex:1159: AshGraphql.Resource.args/5
lib/resource/resource.ex:425: anonymous fn/6 in AshGraphql.Resource.queries/5
(elixir 1.15.4) lib/enum.ex:1693: Enum."-map/2-lists^map/1-1-"/2
metadata on read actions is merged with the rest of the fields on the query, so must have a name unique from the attributes/calculations/aggregates.
The system will warn you if there is metadata on the underlying action that is being ignored, and will tell you how to fix it.