Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mutations should return the same types that the query is on to leverage client cache like apollo #315

Closed
coco98 opened this issue Aug 26, 2018 · 1 comment
Assignees
Labels
c/server Related to server k/enhancement New feature or improve an existing feature p/urgent Immediate action required s/wip Status: This issue is a work in progress

Comments

@coco98
Copy link
Contributor

coco98 commented Aug 26, 2018

(via @thangngoc89#8365)

Is there a way to return the real type on mutation
for example, a mutation with that add a new note returns note_no_rels type
I understand why is that happens from PostgreSQL perspective
but this makes apollo cache very hard to use
in other projects, when the returning type is the same as query type
simply return the correct will update apollo cache

@0x777 this seems to be an important request. What are your thoughts?

@coco98 coco98 added the p/urgent Immediate action required label Aug 26, 2018
@0x777 0x777 added k/enhancement New feature or improve an existing feature c/server Related to server labels Aug 27, 2018
@0x777
Copy link
Member

0x777 commented Aug 27, 2018

Yes, this has been on my mind for a while. The return type of a query and a mutation on a table should have the same types. Currently, the return type of a mutation is based on the returning clause of a Postgres DML mutation.

@rakeshkky rakeshkky added the s/wip Status: This issue is a work in progress label Aug 27, 2018
@rakeshkky rakeshkky self-assigned this Aug 27, 2018
rakeshkky added a commit to rakeshkky/graphql-engine that referenced this issue Aug 28, 2018
-> mutations returning type is 'table' instead of 'table_no_rels'
karthikvt26 pushed a commit to karthikvt26/graphql-engine that referenced this issue Sep 5, 2018
* add a query to reload schema cache (metadata), close hasura#292

* minor code refactor

* simpler root level select fields using primary keys (fix hasura#304) (hasura#306)

* select fields by primary key col values as argument values, fix hasura#304

* change field name 'table_by_pkey' to 'table_by_pk'

* add links to share and help (hasura#303)

* add req_user_id as alias to x-hasura-user-id (fix hasura#317) (hasura#320)

* fix insert fails for non-admin roles on v1/query  (fix hasura#327) (hasura#328)

* fix insert fails for non-admin roles on v1/query, fix hasura#327

* add test case for user role upsert usint constraint name

* mutation return type and query type are same (close hasura#315) (hasura#324)

* add support for jwt authorization (close hasura#186) (hasura#255)

The API:
1. HGE has `--jwt-secret` flag or `HASURA_GRAPHQL_JWT_SECRET` env var. The value of which is a JSON.

2. The structure of this JSON is: `{"type": "<standard-JWT-algorithms>", "key": "<the-key>"}`
`type` : Standard JWT algos : `HS256`, `RS256`, `RS512` etc. (see jwt.io).
`key`:
  i. Incase of symmetric key, the key as it is.
  ii. Incase of asymmetric keys, only the public key, in a PEM encoded string or as a X509 certificate.

3. The claims in the JWT token must contain the following:
  i. `x-hasura-default-role` field: default role of that user
  ii. `x-hasura-allowed-roles` : A list of allowed roles for the user. The default role is overriden by `x-hasura-role` header.

4. The claims in the JWT token,  can have other `x-hasura-*` fields where their values can only be strings.

5. The JWT tokens are sent as `Authorization: Bearer <token>` headers.

---
To test:
1. Generate a shared secret (for HMAC-SHA256) or RSA key pair.
2. Goto https://jwt.io/ , add the keys
3. Edit the claims to have `x-hasura-role` (mandatory) and other `x-hasura-*` fields. Add permissions related to the claims to test permissions.
4. Start HGE with `--jwt-secret` flag or `HASURA_GRAPHQL_JWT_SECRET` env var, which takes a JSON string: `{"type": "HS256", "key": "mylongsharedsecret"}` or `{"type":"RS256", "key": "<PEM-encoded-public-key>"}`
5. Copy the JWT token from jwt.io and use it in the `Authorization: Bearer <token>` header.

---
TODO: Support EC public keys. It is blocked on frasertweedale/hs-jose#61

* compare only major and minor versions for cli-server (fix hasura#331) (hasura#332)

* Revert "add links to share and help (hasura#303)" (hasura#334)

This reverts commit 798efdd.

* update tests to use access key (close hasura#113) (hasura#296)

Closes hasura#113

* generate a returning field in a mutation only when the select permission is defined (fix hasura#340) (hasura#341)

* allow selectively updating columns on a conflict during insert (fix hasura#342)

* fix primary key changing on upsert, fix hasura#342

* add 'update_columns' in 'on_conflict' object, consider 'allowUpsert'

* 'ConflictCtx' type should respect upsert cases

* validation for not null fields in an object

* console: fix error notification non json, auto height css (hasura#354)
shahidhk pushed a commit to shahidhk/graphql-engine that referenced this issue Sep 11, 2018
add doc for converting any repo to hasura project
hasura-bot pushed a commit that referenced this issue Feb 5, 2024
V3_GIT_ORIGIN_REV_ID: 5d782bc8dec8630b5b63821b61ecec615f0ed47f
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
c/server Related to server k/enhancement New feature or improve an existing feature p/urgent Immediate action required s/wip Status: This issue is a work in progress
Projects
None yet
Development

No branches or pull requests

3 participants