code-corps / code-corps/code-corps-api

Replace json_payload strategy with DockYard's json_api_assert

Open
#490 0 comments 0 reactions 0 assignees View on GitHub
bug feature
Dominant language
Elixir
Stars
234
Forks
82
PR merge metrics
No merged PRs in 30d

Description

# Problem

Our `json_payload` strategy breaks down when the view is not rendering attributes used during record creation. The reason for that is, the strategy takes a built record, infers the view from the type of record and then uses that view to build a json api payload.

If the view does not render an attribute which is usually used to create that record, then creation fails in various ways, depending on the specific case.

I was hoping `ja_serializer` had a convenient helper which would render a record into a json_payload using ALL attributes, and created an issue about that in the repo

https://github.com/vt-elixir/ja_serializer/issues/196#issuecomment-262529168

While the response was that there is no such helper, I was pointed in the direction of https://github.com/DockYard/json_api_assert, which does seem to have such a serializer.

## Subtasks
- [ ] Try to use DockYard/json_api_assert to improve our json_api_payload strategy
- [ ] If that doesn't work, try the reflection route described in the linked issue

## References
* vt-elixir/ja_serializer#196
* https://github.com/DockYard/json_api_assert

Contributor guide

Open the contributing guide

Research direction

Start by locating the existing json_payload strategy and reviewing the linked ja_serializer discussion. Evaluate DockYard/json_api_assert as the replacement, then compare it with the reflection approach; done means the strategy can build payloads when views omit attributes used during record creation.

Written by the indexing model from the issue text.

Assessment

Tech stack
elixir
Domain
testing-qa
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.