Commit graph

259 commits

Author SHA1 Message Date
Zach Daniel
4c0ed1160c chore: fix credo warning 2024-04-24 09:00:56 -04:00
Zach Daniel
e60c0def27 fix: don't process maps with no fields 2024-04-24 08:49:53 -04:00
dependabot[bot]
df04981d49
chore(deps): bump ash from 3.0.0-rc.6 to 3.0.0-rc.18 (#127)
* chore(deps): bump ash from 3.0.0-rc.6 to 3.0.0-rc.18

Bumps [ash](https://github.com/ash-project/ash) from 3.0.0-rc.6 to 3.0.0-rc.18.
- [Changelog](https://github.com/ash-project/ash/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ash-project/ash/compare/v3.0.0-rc.6...v3.0.0-rc.18)

---
updated-dependencies:
- dependency-name: ash
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: Fix dialyzer error.

`action.accept` can no longer ever be `nil`.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: James Harton <james@harton.nz>
2024-04-22 09:31:33 +12:00
Zach Daniel
1c4cf1969c fix: properly honor new pagination config everywhere
fixes #130
2024-04-20 16:18:52 +01:00
Zach Daniel
1331bdd4ce improvement: support generic actions with no return type 2024-04-11 13:11:37 -04:00
Zach Daniel
10fa6b2ff7 chore: format 2024-04-04 21:45:33 -04:00
Zach Daniel
2552f07689 fix: accept input object for destroy mutations 2024-04-03 10:19:13 -04:00
Zach Daniel
d692c931c2 chore: format 2024-04-01 16:16:05 -04:00
Zach Daniel
180d05545c improvement!: auto? managed_relationships by default
imporovement!: remove deprecated configuration
2024-04-01 16:02:30 -04:00
Zach Daniel
349086fbb8 improvement!: No longer automagically derive types 2024-04-01 15:27:43 -04:00
Riccardo Binetti
513c1ac68f
improvement!: port AshGraphql to Ash 3.0 (#123)
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
2024-04-01 14:03:06 -04:00
Riccardo Binetti
9674614b62
feat: allow resources without types (#121)
* 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
2024-03-28 11:16:32 -04:00
Dmitry Maganov
1f2358ef68
improvement: add show_fields option as explicit fields whitelist (#120) 2024-03-27 14:54:58 -04:00
Riccardo Binetti
98baf6f0be
feat: allow providing descriptions for enum values (#117)
* 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
2024-03-25 23:43:59 -04:00
Riccardo Binetti
1c47c79081
chore: fix CI failures (#118)
* chore: regenerate formatter and cheatsheets for paginate_with

* chore: fix credo errors

Use pattern matching to remove an if level and invert the logic on the
if Credo was complaining about
2024-03-22 12:59:21 -04:00
Zach Daniel
ae94fcde54 improvement: make pagination more explicitly configurable 2024-03-13 12:10:30 -04:00
Zach Daniel
d2343e5c54 chore: credo/remove inspects 2024-03-11 10:48:44 -04:00
Zach Daniel
90dc20822d improvement: add hide_inputs to queries and mutations 2024-03-11 10:46:42 -04:00
Zach Daniel
99d2d66538 chore: change is_node_type/1 to node_type?/1 per credo 2024-02-11 14:44:31 -05:00
Zach Daniel
328618fa94 fix: handle unions containing maps and vice versa 2024-02-11 14:10:20 -05:00
Riccardo Binetti
70eae5f421
fix: make results nullable again if root level errors are enabled (#114)
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.
2024-02-09 09:36:23 -05:00
Barnabas Jovanovics
c82512d70a
* improvement: support data layer functions (ilike, like) (#113)
---------

Co-authored-by: Zach Daniel <zach@zachdaniel.dev>
2024-02-09 09:03:10 -05:00
Riccardo Binetti
66d2f44443
feat: add Relay ID translation in mutation and queries (#109)
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>
2024-02-06 09:46:09 -05:00
Zach Daniel
d00ae4e315 fix: define map input types w/ nested input types 2024-02-05 13:48:22 -05:00
Zach Daniel
099540c79e fix: handle nested constraint derivation in union/map types 2024-02-04 10:36:23 -05:00
Riccardo Binetti
6b09e7309e
improvement: make the items of fields and errors non-null (#112)
Last point left from the discussion on #105
2024-01-31 17:52:33 -05:00
Riccardo Binetti
8fff0d361d
improvement: make mutation arguments non-null (#111)
* improvement: make mutation arguments non-null

As discussed in #105 and #110, put this behind an opt-in configuration to avoid
breaking existing code.
The ID in update mutations is always non-null if non-null mutation arguments are
allowed, while input is non-null if it's allowed _and_ there is at least a
non-null field in the input.

Document the newly added config variable in the getting started guide.

* chore: enable non-null mutation arguments in tests
2024-01-31 17:52:01 -05:00
Riccardo Binetti
af4193feca
improvement: make mutation results non-nullable (#110)
Adjust rool level error tests: since result is now non-nullable, if the content
of the result is nil, the whole result becomes nil. Note that this is not a
breaking change since GraphQL always allows a field nullability to propagate
upwards in case of a field error (see October 2021 spec, section 6.4.4).
2024-01-31 15:59:07 -05:00
Riccardo Binetti
afa4ae66a0
improvement: return a map from decode_relay_id/1 (#107)
Slight API improvement over #106.

This makes it more ergonomic to partially match on the return value (and it also
makes it more explicit by explicitly labeling the two parts).

Also add tests for relay id encoding/decoding.
2024-01-25 10:47:15 -05:00
Riccardo Binetti
365b3aedc6
feat: Relay refetching support (#106)
* 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.
2024-01-24 14:59:12 -05:00
Zach Daniel
e95c95282a fix: properly generate type for Ash.Type.DateTime 2023-11-28 17:32:31 -05:00
Zach Daniel
cb87e6f4f6 chore: format/credo 2023-11-13 23:23:27 -05:00
Zach Daniel
e66a3ef4b8 fix: properly generate first aggregates with correct destination type 2023-11-13 23:02:57 -05:00
Zach Daniel
2cf5b60f63 improvement: support latest ash aggregate constraints 2023-11-13 16:53:21 -05:00
Barnabas Jovanovics
34fd313901
improvement: make the node in relay edges non-null (#95)
* make the node in relay edges non-null

* make the edge non-null too

* fix edge type
2023-10-03 13:48:27 -04:00
Zach Daniel
58a038e609 fix: generic action mutations need to use the input object 2023-10-02 19:44:19 -04:00
Zach Daniel
cdb8cf7b7f fix: don't access .pagination on generic action 2023-10-02 14:47:31 -04:00
Tun Cham Roeun
4c86d31885
improvement: Add a top-level NOT filter, along with AND and OR filters. (#94) 2023-10-01 09:51:42 -04:00
Zach Daniel
ca2e5342ac fix: fix primary key delimiter verificatoin step
docs: improve docs on unions
2023-09-28 17:31:27 -04:00
Zach Daniel
fc3423b45a improvement: optimize union type resolver compile time logic 2023-09-20 09:21:44 -04:00
Zach Daniel
842e433f9f fix: don't include related fields in managed relationship inputs 2023-09-19 12:49:05 -04:00
Zach Daniel
49c6534d73 improvement: generic action support
docs: better docs
2023-09-15 13:45:12 -04:00
Zach Daniel
339a78ec98 fix: handle nested array types 2023-09-13 14:55:17 -04:00
Zach Daniel
1d69d8ef33 fix: support aggregates over calculations 2023-08-29 21:32:22 -04:00
Barnabas Jovanovics
da1d1e889c
fix: wrap type in non-null reference if allow_nil? is set to false (#90)
* fix: wrap type in non-null reference if allow_nil? is set to false

* fix: get allow_nil? from the correct place
2023-08-22 14:43:27 -04:00
Zach Daniel
700cc1adee fix: don't add filter input for non-filterable resources 2023-07-31 22:07:03 -04:00
Jeremy Grant
de149c63a5
fix(array unions): for arrays of embedded types unions when graphql_unnested_unions is used, without it they return empty values (#87) 2023-07-28 21:36:12 -04:00
Zach Daniel
bb96354470 improvement: support ForbiddenField 2023-06-23 10:10:39 -04:00
Zach Daniel
74211ef3f4 fix: properly fetch aliased all attributes 2023-06-12 13:19:07 -04:00
Zach Daniel
05be948204 improvement: revamp data loading to be a single load statement 2023-06-09 00:45:39 -04:00
Zach Daniel
309c35d405 fix: choose a better default delimiter 2023-05-18 00:16:58 -04:00
Zach Daniel
db23b32552 fix: various problems with resolving unions in relationship changes 2023-05-17 22:41:24 -04:00
Zach Daniel
6701b57afe fix: properly wrap union resolvers in a list 2023-05-17 16:20:16 -04:00
Zach Daniel
6e444da1e7 improvement: add composite pkey default delimiter 2023-05-17 14:01:20 -04:00
Zach Daniel
d80016abd7 fix: don't generate enum types when no graphql type exists 2023-05-16 12:42:10 -04:00
Zach Daniel
02dc6e0f0a chore: fix build/sobelow 2023-05-15 10:07:37 -04:00
Barnabas Jovanovics
48392115e0
feat: create types for maps with constraints (#68) 2023-05-15 09:39:32 -04:00
Zach Daniel
e0ce5c5e65 fix: don't hide fields not called :id 2023-05-08 10:57:42 -04:00
bcksl
8223797dd6
feat: add filterable_fields to limit generated filters (#69) 2023-04-28 10:04:30 -04:00
Zach Daniel
79a7145c44 improvement: support hiding fields 2023-04-26 23:40:41 -04:00
bcksl
8e6f9b7bd5
improvement: pass description through to Absinthe in more cases (#63) 2023-04-23 07:03:54 -06:00
Zach Daniel
e91001e83f improvement: better union type handling
still need to document this, but adding support for
`graphql_unnested_unions/1` on `NewType` defined unions.

This allows for lifting up union type values to not be nested under `value`
2023-04-21 01:12:20 -06:00
Zach Daniel
e83835cab9 improvement: don't define union input types for calcs/aggregates 2023-04-20 13:30:13 -06:00
Zach Daniel
d4ee7c5ac2 fix: include resource name in managed_relationship types 2023-04-16 18:15:25 -04:00
Zach Daniel
e78a9f7926 improvement: add auto? true option for managed_relationships 2023-04-16 16:52:37 -04:00
Zach Daniel
13910dd0f1 fix: handle certain types in calculations 2023-04-14 10:46:18 -04:00
Zach Daniel
6b7ea9048f fix: unique enum types by name 2023-04-03 11:20:34 -04:00
Mariusz Morawski
513e14f1d6
improvement: Add missing definition for Ash.Type.Time type (#64) 2023-04-03 11:10:55 -04:00
Zach Daniel
c711fa2e9d improvement: add tests & improve behavior of update managed relationships 2023-03-21 23:43:43 -04:00
Zach Daniel
fc1433170e improvement: include primary key when managed relationship can update 2023-03-21 23:20:15 -04:00
Zach Daniel
e4dda5a3d9 improvement: don't add types for resources w/o a GQL type
docs: add config to getting started
2023-03-21 23:06:58 -04:00
Zach Daniel
425aee20fe chore: fix sobelow 2023-03-21 21:27:07 -04:00
Zach Daniel
1bea680af3 feat: change type name generation for managed relationships.
The current type name generation could result in clashes.
We now show a warning explaining how to fix these.
2023-03-21 21:17:53 -04:00
Zach Daniel
b8b5b61786 improvement: supply arguments to relationships on loading 2023-03-17 14:56:06 -04:00
Zach Daniel
d86f6601fb fix: properly filter enum types 2023-03-13 19:13:35 -04:00
Zach Daniel
3cc3c32f45 improvement: add support for Ash.Type.NewType 2023-03-13 18:32:36 -04:00
George Anderson
c0dcd211e7
fix: Typo in name causing Error (#60) 2023-03-03 17:54:45 -05:00
Zach Daniel
9d007a8401 chore: format 2023-02-24 10:00:39 -05:00
Barnabas Jovanovics
e6aadc1221
fix: always return a list from pkey_fields (#59) 2023-02-24 10:00:00 -05:00
Zach Daniel
7083a8363b improvement: build inputs for the underlying get action 2023-02-22 16:25:21 -05:00
Zach Daniel
443e5fd680 improvement: add action_middleware option 2023-02-22 12:19:50 -05:00
Zach Daniel
4c26944f73 fix: don't traverse nested types for auto enums 2023-02-21 08:51:35 -05:00
Zach Daniel
f1d4c1a3cb improvement: better tagged union handling 2023-02-16 23:33:54 -05:00
Zach Daniel
800b7eb25d fix: properly use the nested type name for union inputs 2023-02-15 19:39:41 -05:00
Zach Daniel
b0fc800079 fix: generate proper type name for union inputs 2023-02-15 13:58:53 -05:00
Zach Daniel
ef5559ed51 fix: infinite recursion in filterability checking 2023-02-15 13:37:55 -05:00
Zach Daniel
80ee34de81 fix: pass down attribute for union type generation 2023-02-15 12:03:57 -05:00
Zach Daniel
cf8267123e improvement: support new union types in ash 2023-02-15 08:20:35 -05:00
Zach Daniel
2a81c185c0 fix: bad error message on missing actions
closes #56
2023-02-13 13:42:44 -05:00
Zach Daniel
d83dacae54 improvement: make filter & sort generation optional 2023-02-08 15:16:40 -05:00
Zach Daniel
18e5f86fde improvement: add more? (as has_next_page) to pagination info 2023-02-08 11:16:48 -05:00
Zach Daniel
4b90308173 chore: CI/dialyzer 2023-01-28 13:02:21 -05:00
Zach Daniel
f0836f18b6 improvement: support metadata on read actions
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.
2023-01-28 12:32:21 -05:00
Alan Heywood
d9e17ed42b
fix: map uuid action arguments to ID type (#52) 2023-01-18 19:07:53 -05:00
Zach Daniel
c0f5f596cb improvement: better error on empty input objects for managed relationships
closes #50
2023-01-09 19:55:35 -05:00
Zach Daniel
a58f3c998e fix: properly generate enum for atom attributes w/ one_of constraint again
closes #49
2023-01-03 10:13:17 -05:00
Zach Daniel
c62d1d50ea docs: fix docs example 2022-12-29 23:38:42 -05:00
Zach Daniel
325ce9c6be improvement: better error message on no type match 2022-12-29 23:36:55 -05:00
Zach Daniel
f259016455 improvement: support naive_datetime out of the box 2022-12-29 23:27:48 -05:00
Zach Daniel
c650126819 fix: resolve issues compiling resources with no type
fix: adding an empty query block is apparently problematic?
2022-10-31 13:07:57 -04:00