使用Rails+graphql-ruby来定义日期和时间类型
首先
由于在工作中试用了GraphQL,我决定提取一些看起来可用的内容来写。这次我将定义日期时间类型。
环境
红宝石2.4.2
轨道5.1.4
GraphQL-Ruby 1.7.4
使用情境
当需要将MySQL等数据库连接并处理数据库中的“datetime型”时,希望在应用程序的GraphQL中实现共通化处理时。
你要怎么做?
使用GraphQL的ScalarType。
GraphQL原本已定义以下标量类型:
Int
Float
String
Boolean
ID
当将DB连接在一起时,缺乏日期时间类型会带来困难。
因此,为了统一处理类型,我们将添加日期时间类型。
目录结构
├── app
│ ├── graphql
│ │ ├── functions
│ │ ├── loaders
│ │ ├── mutations
│ │ ├── schema.rb
│ │ └── types
│ │ ├── date_time_type.rb
│ │ ├── user_type.rb
│ │ ├── query_type.rb
进行解释或规定。
Types::DateTimeType = GraphQL::ScalarType.define do
name 'DateTimeType'
coerce_input ->(value, _context) { Time.zone.parse value }
coerce_result ->(value, _context) { I18n.l(value, format: :default) }
end
本例中使用了locales来定义格式,并对其进行整理。
这只是一个例子,请根据您使用的应用程序选择使用locales并进行设置。
ja:
time:
formats:
default: "%Y/%m/%d %H:%M:%S"
请使用。
Types::UserType = GraphQL::ObjectType.define do
name "User"
field :id, !types.ID
field :name, !types.String
field :created_at, Types::DateTimeType # ここ
field :updated_at, Types::DateTimeType
field :deleted_at, Types::DateTimeType
end
请在Graphiql等工具中执行查询并确认。