Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions lib/jsonapi/serializer.ex
Original file line number Diff line number Diff line change
Expand Up @@ -112,13 +112,14 @@ defmodule JSONAPI.Serializer do
# Build the relationship url
rel_key = transform_fields(relationship_name)
rel_url = parent_view.url_for_rel(parent_data, rel_key, conn)
rr_url = parent_view.url_for_rr(parent_data, rel_key, conn)

# Build the relationship
acc =
put_in(
acc,
[:relationships, rel_key],
encode_relation({rel_view, rel_data, rel_url, conn})
encode_relation({rel_view, rel_data, rel_url, rr_url})
)

valid_include_view = include_view(valid_includes, relationship_name)
Expand Down Expand Up @@ -215,7 +216,7 @@ defmodule JSONAPI.Serializer do
end

@spec encode_relation(tuple()) :: map()
def encode_relation({rel_view, rel_data, _rel_url, _conn} = info) do
def encode_relation({rel_view, rel_data, _rel_url, _rr_url} = info) do
data = %{
data: encode_rel_data(rel_view, rel_data)
}
Expand Down Expand Up @@ -283,10 +284,10 @@ defmodule JSONAPI.Serializer do

defp merge_related_links(
encoded_data,
{rel_view, rel_data, rel_url, conn},
{_rel_view, _rel_data, rel_url, rr_url},
true = _add_auto_links
) do
Map.merge(encoded_data, %{links: %{self: rel_url, related: rel_view.url_for(rel_data, conn)}})
Map.merge(encoded_data, %{links: %{self: rel_url, related: rr_url}})
end

defp merge_related_links(encoded_rel_data, _info, _add_auto_links), do: encoded_rel_data
Expand Down
10 changes: 10 additions & 0 deletions lib/jsonapi/view.ex
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,7 @@ defmodule JSONAPI.View do
@callback url_for(data(), Conn.t() | nil) :: String.t()
@callback url_for_pagination(data(), Conn.t(), Paginator.params()) :: String.t()
@callback url_for_rel(term(), String.t(), Conn.t() | nil) :: String.t()
@callback url_for_rr(term(), String.t(), Conn.t() | nil) :: String.t()
@callback visible_fields(data(), Conn.t() | nil) :: list(atom)

@optional_callbacks [get_field: 3]
Expand Down Expand Up @@ -379,6 +380,10 @@ defmodule JSONAPI.View do
def url_for_rel(data, rel_type, conn),
do: View.url_for_rel(__MODULE__, data, rel_type, conn)

@impl View
def url_for_rr(data, rel_type, conn),
do: View.url_for_rr(__MODULE__, data, rel_type, conn)

@impl View
def visible_fields(data, conn),
do: View.visible_fields(__MODULE__, data, conn)
Expand Down Expand Up @@ -524,6 +529,11 @@ defmodule JSONAPI.View do
"#{url_for(view, data, conn)}/relationships/#{rel_type}"
end

@spec url_for_rr(t(), data(), String.t(), Conn.t() | nil) :: String.t()
def url_for_rr(view, data, relationship_key, conn) do
"#{url_for(view, data, conn)}/#{relationship_key}"
end

@spec url_for_rel(t(), data(), Conn.query_params(), Paginator.params()) :: String.t()
def url_for_pagination(
view,
Expand Down
Loading