スキーマにカスタム GeoPoint タイプを設定したいのですが、スキーマ タイプ ファイルでこれを行う方法の例が見つかりません。私が見つけた唯一の方法は、スキーマ ファイルで input_object を使用することでした。Absinthe.Blueprint.Input.Object を使用してこのようにすることは可能ですか??
これは私のカスタムタイプです:
defmodule MyAppWeb.Schema.Types.GeoPoint do
scalar :geo_point, name: "GeoPoint" do
serialize(&encode/1)
parse(&decode/1)
end
defp encode(value) do
MyApp.JasonEncoders.encode_model(value)
end
defp decode(%Absinthe.Blueprint.Input.String{value: value}) do
with {:ok, decoded} <- Jason.decode(value),
{:ok, point} <- Geo.JSON.decode(decoded) do
{:ok, point}
else
_ -> :error
end
end
defp decode(%Input.Null{}) do
{:ok, nil}
end
end
これで、このミューテーションで新しいエントリを作成できます
mutation (
$title: String!,
$geom: GeoPoint!
) {
offer: createOffer(
title: $title,
geom: $geom
)
そしてこれらの変数
{
"title": "Point",
"geom": "{\"coordinates\":[1,2],\"type\":\"Point\"}"
}
次のようなものを使用して作成することをお勧めします
{
"title": "Point",
"geom": {
"lat": 1,
"long": 2
}
}
また
{
"title": "Point",
"lat": 1,
"long": 2
}