wangyuheng/Arc

根据GraphQL Schema生成Dgraph Schema

Closed this issue · 0 comments

概念:

  1. Dgraph Schema: Dgraph数据库结构化语句,类似mysql中的DDL
  2. predicate: Dgraph的数据库字段,一个predicate可以被多个type使用
  3. domainClass: Arc框架中定义javaBean类型,用于反序列化

背景

为了提升开发效率,加快schema领域模型验证。
希望在根据GraphQL Schema自动生成Java代码(#5) 的同时,可以自动生成数据库结构语句,并可根据需要自动执行数据库初始化(#7)

方案

解析GraphQL Schema后,根据转换逻辑生成Dgraph Schema

注意Arc框架限制

  1. DB结构中拥有框架依赖通用predicate,如 domainClass
  2. 为了解决predicate跨type定义问题,dgraph中的predicate命名增加type为前缀

验收

  1. 根据 https://github.com/YituHealthcare/Arc/blob/master/sample/full-sample/src/main/resources/graphql/schema.graphqls 自动生成Dgraph Schema
<domainClass>: string .
<dgraph.graphql.schema>: string .
<PROJECT.name>: string .
<PROJECT.description>: string .
<PROJECT.category>: [string] .
<PROJECT.createTime>: dateTime .
<PROJECT.milestones>: [uid] .
<MILESTONE.name>: string .
<MILESTONE.status>: string .
<USER.name>: string .
type Project {
domainClass
dgraph.graphql.schema
PROJECT.name
PROJECT.description
PROJECT.category
PROJECT.createTime
PROJECT.milestones
}
type Milestone {
domainClass
dgraph.graphql.schema
MILESTONE.name
MILESTONE.status
}
type User {
domainClass
dgraph.graphql.schema
USER.name
}