venom-generator

In the way of code generation, complete the storage model->computation model (business API) transformation to achieve the goal of design and implementation

Usage no npm install needed!

<script type="module">
  import venomGenerator from 'https://cdn.skypack.dev/venom-generator';
</script>

README

venom-generator

以代码生成的方式,完成存储模型->计算模型(业务 API)转换,实现设计即实现的目标

参数

  • server:服务名称[可省略] 默认为 pservice 项目名

  • output:文件输出地址[可省略] 默认输出到./src/generated 文件夹下

  • yml:prisma.yml 文件路径[可省略] 默认从./prisma 读取文件 如果指定 'yml' 参数,未找到文件时再次从./prisma 读取文件

  • dev:开发调试 默认为 false ,true 可查看模型指令相关参数值

形式

  • 配置文件

    • 存放根目录[src 同级]

    • 文件名[.vgeneratorrc]:开发所需配置文件名必须与文件名一致,否则不读取

  • 命令行

使用

  • 无'.vgeneratorrc'文件使用方法
npx venom-generator --server account --output ./src/generated  --yml ./prisma
  • 有'.vgeneratorrc'文件使用方法
npx venom-generator

模型文件指令说明

@Include(value: "poclicy")

  • 是否需要依赖公共服务 poclicy 指令

    • value:公共服务名称

@Mutation/QueryResolve(description: "方法描述", type: "类型", args: "参数",list:true/false)

  • 用于公开的自定义方法指令

    • description:方法描述(所有指令参数都是如此)

    • type:方法返回类型

    • args:方法参数(所有指令参数都是如此)

      • 格式:key:value

      • '!':参数类型若有'!'符号,则表示该参数必传(如:"id:String!"表示 id 必传)

      • 可以为 prisma 基本数据类型[Boolean,DateTime,Float,ID,Int,String],也可以为 prisma 复杂对象

    • list:是否返回为数组。默认 false

    • @QueryResolve 指令用法

      • 若参数为 prisma 基本数据类型[Boolean,DateTime,Float,ID,Int,String],则 key 可定义,value 定义为[Boolean,DateTime,Float,ID,Int,String]

      • 若参数为复杂对象,需查询唯一则 key 定义为 where,value 定义为需查询的复杂对象

      • 若参数为复杂对象,需查询列表则 key 定义为 wheres,value 定义为需查询的复杂对象

      • 若参数为复杂对象,需分组或排序查询则 key 定义为 orderBy,value 定义为需查询的复杂对象

    • @MutationResolve 指令用法

      • 若参数为 prisma 基本数据类型[Boolean,DateTime,Float,ID,Int,String],则 key 可定义,value 定义为[Boolean,DateTime,Float,ID,Int,String]

      • 若参数为复杂对象且为新增,key 定义为 data,value 定义为需新增的复杂对象拼接 Create

      • 若参数为复杂对象且为更新,修改数据 key 定义为 data,value 定义为需更新的复杂对象拼接 Update,若条件也为复杂对象且根据唯一条件更新则 key 定义为 where,value 定义为需更新条件的复杂对象,若条件也为复杂对象且根据任意条件更新则 key 定义为 wheres,value 定义为需更新条件的复杂对象

      • 若参数为复杂对象且为删除,若条件也为复杂对象且根据唯一条件删除则 key 定义为 where,value 定义为需更新条件的复杂对象,若条件也为复杂对象且根据任意条件删除则 key 定义为 wheres,value 定义为需更新条件的复杂对象

@QueryUnique(description: "方法描述", args: "参数")

  • 查询单条数据方法指令

    • args:默认"id:String!"

@Query(description: "方法描述", args: "参数")

  • 查询多条数据方法指令

@Mutation(description: "方法描述", create: true, update: true, delete: true, args: "参数")

  • 增删改方法指令

    • create: ture/false 是否需要新增数据方法。 默认 false

    • update: ture/false 是否需要修改数据方法。 默认 false

    • delete: ture/false 是否需要删除数据方法。 默认 false

@CalcAuthorization(aud: "数据拥有者")

  • 当前方法是否需要检查相关权限指令

    • aud:当前方法是否检查数据拥有者

@Filter(Query: true, Mutation: true)

  • 暴露 api 字段过滤

    • Query:true/false 数据查询是否需要过滤该字段。 默认 false

    • Mutation:true/false 数据增删改是否需要过滤该字段。 默认 false

例子

  • 需要依赖公共服务
enum Test @Include(value: "poclicy") {
  Version @Version(value: "1.0.0")
  Description @Description(value: "测试")
}
  • 用于公开的自定义字段[Mutationxxx]
enum Test @MutationResolve(description: "测试方法", type: "String", args: "userName:String!,password:String!") {
  Test
}
enum Test @MutationResolve(description: "新增数据", type: "Test", args: "data:TestCreate!") {
  Test
}
enum Test @MutationResolve(description: "根据唯一条件更新数据", type: "Test", args: "data:TestUpdate!,where:Test!") {
  Test
}
enum Test @MutationResolve(description: "根据任意条件更新数据", type: "Test", args: "data:TestUpdate!,wheres:Test!") {
  Test
}

```graphql
enum Test @MutationResolve(description: "根据任意条件删除数据", type: "Test", args: "wheres:Test!") {
  Test
}
  • 单条数据查询且需要检查权限
type Test @QueryUnique(description: "测试方法", args: "id:String!") @CalcAuthorization(aud: "id") {
  id: Id! @id
}
  • 多条数据查询且无需检查权限
type Test @Query(description: "测试方法", args: "where:Test,orderBy:Test") {
  id: Id! @id
}
  • 增删改且需要检查权限
type Test @Mutation(description: "测试方法", create: true, update: true, delete: true, args: "where:Test!") @CalcAuthorization {
  id: Id! @id
}
  • 字段过滤
type Test {
  id: ID @id
  userName: String
  passWord: String @Filter(Query: true, Mutation: true)
}