cerebris / jsonapi-resources

A resource-focused Rails library for developing JSON:API compliant servers.
http://jsonapi-resources.com
MIT License
2.32k stars 529 forks source link

Missing key_type feature on 0.10 #1344

Open benebrice opened 3 years ago

benebrice commented 3 years ago

This issue is a (choose one):

Checklist before submitting:

Description

On 0.10, key_type still exists from 0.9 but is not manage.

Indeed, ResourceIdentity only handles primary key. It might work if key_type is actually the primary key but it's not. Errors are raising.

For example, with id as a primary key and uuid as key_type.

This is a part of the job. I'm not 100% confident with all side effects that update might have. Maybe @lgebhardt can help with his knowledge.

Gitter on 11th of December 2020

lgebhardt commented 3 years ago

@benebrice sorry I missed this in gitter. Could you explain the issue a bit more? You should be able to set the key type globally through the config like:

JSONAPI.configure do |config|
  config.resource_key_type = :uuid
end

or per resource with the key_type method in the resource declaration. This is put together in https://github.com/cerebris/jsonapi-resources/blob/master/lib/jsonapi/basic_resource.rb#L765

I'm using uuid key types set in the config in several projects with version 0.10 so I believe it's working.

From your gitter comment I'm wondering if you have renamed the primary_key field from id to uuid.

benebrice commented 3 years ago

No worries for the delay! Actually, I'm not changing resource_key_type so my primary key is still id but I'm displaying an uuid through the API. So I've changed key_type :uuid on my base resource. If you do that, you'll see that there is an issue. I've tried to fix it. It's working for #index but I've broken a lot of things.

lgebhardt commented 3 years ago

@benebrice I added a branch to the peeps_uuids app, https://github.com/cerebris/peeps-uuids/tree/base_resource_test, that shows I think what you are doing. The resources are derived from a base resource:

class BaseResource < JSONAPI::Resource
  root_resource
  caching
  key_type :uuid
end

and the config no longer sets the resource_key_type. It seems to be working.

tommy-russoniello commented 3 years ago

@benebrice are you still having this issue?

benebrice commented 3 years ago

I did not have time to check It but take a look at @lgebhardt comment above. I didn't test it yet but if it's working, I made a mistake on my configuration. 🙂