🧙♀️
【Go】gqlgenでGraphQLのスキーマへMapのスカラー型を指定してみる
概要
gqlgenのスキーマの項目設定では、Mapのscalarが用意されています。これはGoでのmap型に変換され、キー項目に対して任意の型の値を設定することができます。今回はこのMapのスカラーを使ってみたのでメモ書きします。
前提
- 使用したgqlgenのバージョンは
v0.17.74
です。
実装サンプル
まずはスキーマファイルで、以下のような定義を用意します。
schema.graphqls
scalar Map
input TaskInput {
title: String!
mapSetting: Map
detail: String
}
type Mutation {
createTask(input: TaskInput!): Boolean!
}
これをジェネレートすると、以下のようなモデルが生成されます。
models_gen.go
type TaskInput struct {
Title string `json:"title"`
MapSetting map[string]any `json:"deadLineCheckSubSetting,omitempty"`
Detail *string `json:"detail,omitempty"`
}
フロントエンド側では今回はobject型で渡すようにします。以下のように、codegen.ts
のgenerate
sへscalarsを設定します。なお、Parseのロジックを別途実装することで、Map型を設定することも可能と思います。
codegen.ts
generates: {
"./src/graphql/gen/graphql.tsx": {
plugins: ["typescript", "typescript-operations", "typescript-urql"],
config: {
scalars: {
Map: "object",
},
},
},
Discussion