[day-03] create custom scalar for uuid
Graphql doesn't support uuid natively. So, we must create a custom scalar to handle this type.
This commit is contained in:
parent
8787973075
commit
c5612f9398
32
lib/wabanex_web/schema/types/custom/uuid4.ex
Normal file
32
lib/wabanex_web/schema/types/custom/uuid4.ex
Normal file
@ -0,0 +1,32 @@
|
||||
defmodule WabanexWeb.Schema.Types.Custom.UUID4 do
|
||||
use Absinthe.Schema.Notation
|
||||
|
||||
alias Ecto.UUID
|
||||
|
||||
scalar :uuid4, name: "UUID4" do
|
||||
description("""
|
||||
The `UUID4` scalar type represents UUID4 compliant string data, represented as UTF-8
|
||||
character sequences. The UUID4 type is most often used to represent unique
|
||||
human-readable ID strings.
|
||||
""")
|
||||
|
||||
serialize(&encode/1)
|
||||
parse(&decode/1)
|
||||
end
|
||||
|
||||
@spec decode(Absinthe.Blueprint.Input.String.t()) :: {:ok, term()} | :error
|
||||
@spec decode(Absinthe.Blueprint.Input.Null.t()) :: {:ok, nil}
|
||||
defp decode(%Absinthe.Blueprint.Input.String{value: value}) do
|
||||
UUID.cast(value)
|
||||
end
|
||||
|
||||
defp decode(%Absinthe.Blueprint.Input.Null{}) do
|
||||
{:ok, nil}
|
||||
end
|
||||
|
||||
defp decode(_) do
|
||||
:error
|
||||
end
|
||||
|
||||
defp encode(value), do: value
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user