Skip to content

Commit d927a41

Browse files
committed
generate module
1 parent a0c6e78 commit d927a41

File tree

10 files changed

+7311
-5915
lines changed

10 files changed

+7311
-5915
lines changed

package-lock.json

Lines changed: 1008 additions & 145 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/generator/README.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<div align="center">
2+
<img src="./icon.png" alt="icon" height="128" width="128">
3+
</div>
4+
5+
# NestJS Prisma Graphql CRUD Generater
6+
7+
Generate CRUD resolvers from GraphQL schema with NestJS and Prisma
8+
9+
# Getting Started
10+
11+
1. Install this package in your project using:
12+
13+
```shell
14+
yarn add nestjs-prisma-graphql-crud-gen
15+
```
16+
17+
2. Add the generator to the schema.prisma:
18+
19+
```
20+
generator custom_generator {
21+
provider = "nestjs-prisma-graphql-crud-gen"
22+
output = "../generated"
23+
}
24+
```
25+
26+
3. Run the generator
27+
28+
```shell
29+
npx prisma generate
30+
```
31+
32+
# Output Directory Structure
33+
34+
```
35+
generated/
36+
├── common
37+
│   ├── enums.ts
38+
│   ├── inputs.ts
39+
│   └── outputs.ts
40+
├── enums
41+
│   └── Language.enum.ts
42+
├── models
43+
│   └── users.models.ts
44+
└── users
45+
├── users.args.ts
46+
├── users.input.ts
47+
├── users.module.ts
48+
├── users.output.ts
49+
├── users.resolver.ts
50+
└── users.service.ts
51+
```
52+
53+
sample result
54+
<a href="https://github.com/mk668a/nestjs-prisma-graphql-crud-gen/tree/main/packages/usage/generated">here</a>
55+
56+
# Sample Project
57+
58+
<a href="https://github.com/mk668a/nestjs-graphql-starter">@mk668a/nestjs-graphql-starter</a>

packages/generator/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "nestjs-prisma-graphql-crud-gen",
33
"description": "Generate CRUD resolvers from GraphQL schema with NestJS and Prisma",
4-
"version": "0.1.0",
4+
"version": "1.0.0",
55
"main": "dist-cjs/index.js",
66
"types": "dist-cjs/index.d.ts",
77
"license": "MIT",

packages/generator/src/generator.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { generateCommonOutput } from './generator/generateCommonOutput'
1010
import { generateEnums } from './generator/generateEnum'
1111
import { generateInput } from './generator/generateInput'
1212
import { generateModel } from './generator/generateModel'
13+
import { generateModule } from './generator/generateModule'
1314
import { generateOutput } from './generator/generateOutput'
1415
import { generateResolver } from './generator/generateResolver'
1516
import { generateService } from './generator/generateService'
@@ -88,6 +89,8 @@ export async function generate(options: GeneratorOptions) {
8889
generateResolver(project, outputDir, model)
8990
// generate service
9091
generateService(project, outputDir, model)
92+
// generate module
93+
generateModule(project, outputDir, model)
9194
})
9295

9396
try {
Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,21 @@
1+
import path from 'path'
12
import { Project } from 'ts-morph'
2-
import { DmmfDocument } from './dmmf/DmmfDocument'
3+
import { DMMF } from './dmmf/types'
4+
import { camelCase } from './helpers'
35

4-
export const generateModule = (dmmfDocument: DmmfDocument, project: Project, outputDir: string) => {}
6+
export const generateModule = (project: Project, outputDir: string, model: DMMF.Model) => {
7+
const modelName = camelCase(model.name)
8+
const filePath = path.resolve(outputDir, `${modelName}/${modelName}.module.ts`)
9+
const sourceFile = project.createSourceFile(filePath, undefined, { overwrite: true })
10+
11+
sourceFile.addStatements(`import { Module } from '@nestjs/common'
12+
import { ${model.name}Service } from './${modelName}.service'
13+
import { ${model.name}Resolver } from './${modelName}.resolver'
14+
import { PrismaService } from '../../prisma.service'
15+
16+
@Module({
17+
providers: [${model.name}Resolver, ${model.name}Service, PrismaService]
18+
})
19+
export class ${model.name}Module {}
20+
`)
21+
}

packages/usage/generated/post/post.input.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as NestJsGraphQL from "@nestjs/graphql";
22
import { StringFilter, StringNullableFilter, DateTimeFilter, StringWithAggregatesFilter, StringNullableWithAggregatesFilter, DateTimeWithAggregatesFilter, BoolFilter, BoolWithAggregatesFilter, StringFieldUpdateOperationsInput, NullableStringFieldUpdateOperationsInput, DateTimeFieldUpdateOperationsInput, BoolFieldUpdateOperationsInput, NestedStringFilter, NestedStringNullableFilter, NestedDateTimeFilter, NestedStringWithAggregatesFilter, NestedIntFilter, NestedStringNullableWithAggregatesFilter, NestedIntNullableFilter, NestedDateTimeWithAggregatesFilter, NestedBoolFilter, NestedBoolWithAggregatesFilter } from "../common/inputs";
3-
import { UsersWhereInput, UsersOrderByWithRelationInput, UsersWhereUniqueInput, UsersOrderByWithAggregationInput, UsersScalarWhereWithAggregatesInput, UsersCreateInput, UsersUpdateInput, UsersCreateManyInput, UsersUpdateManyMutationInput, UsersCountOrderByAggregateInput, UsersMaxOrderByAggregateInput, UsersMinOrderByAggregateInput, UsersRelationFilter, UsersCreateNestedOneWithoutPostsInput, UsersUpdateOneWithoutPostsInput, UsersCreateWithoutPostsInput, UsersCreateOrConnectWithoutPostsInput, UsersUpsertWithoutPostsInput, UsersUpdateWithoutPostsInput } from "../users/users.input";
3+
import { UsersWhereInput, UsersOrderByWithRelationInput, UsersWhereUniqueInput, UsersOrderByWithAggregationInput, UsersScalarWhereWithAggregatesInput, UsersCreateInput, UsersUpdateInput, UsersCreateManyInput, UsersUpdateManyMutationInput, UsersCountOrderByAggregateInput, UsersMaxOrderByAggregateInput, UsersMinOrderByAggregateInput, UsersRelationFilter, UsersCreateNestedOneWithoutPostsInput, UsersUpdateOneWithoutPostsNestedInput, UsersCreateWithoutPostsInput, UsersCreateOrConnectWithoutPostsInput, UsersUpsertWithoutPostsInput, UsersUpdateWithoutPostsInput } from "../users/users.input";
44
import { SortOrder, QueryMode } from "../common/enums";
55

66
@NestJsGraphQL.InputType('PostWhereInput', { isAbstract: true })
@@ -182,8 +182,8 @@ export class PostUpdateInput {
182182
@NestJsGraphQL.Field(() => NullableStringFieldUpdateOperationsInput, { nullable: true })
183183
content?: NullableStringFieldUpdateOperationsInput | undefined;
184184

185-
@NestJsGraphQL.Field(() => UsersUpdateOneWithoutPostsInput, { nullable: true })
186-
author?: UsersUpdateOneWithoutPostsInput | undefined;
185+
@NestJsGraphQL.Field(() => UsersUpdateOneWithoutPostsNestedInput, { nullable: true })
186+
author?: UsersUpdateOneWithoutPostsNestedInput | undefined;
187187
}
188188

189189
@NestJsGraphQL.InputType('PostCreateManyInput', { isAbstract: true })
@@ -336,8 +336,8 @@ export class PostCreateNestedManyWithoutAuthorInput {
336336
connect?: PostWhereUniqueInput[] | undefined;
337337
}
338338

339-
@NestJsGraphQL.InputType('PostUpdateManyWithoutAuthorInput', { isAbstract: true })
340-
export class PostUpdateManyWithoutAuthorInput {
339+
@NestJsGraphQL.InputType('PostUpdateManyWithoutAuthorNestedInput', { isAbstract: true })
340+
export class PostUpdateManyWithoutAuthorNestedInput {
341341
@NestJsGraphQL.Field(() => [PostCreateWithoutAuthorInput], { nullable: true })
342342
create?: PostCreateWithoutAuthorInput[] | undefined;
343343

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { Module } from '@nestjs/common'
2+
import { PostService } from './post.service'
3+
import { PostResolver } from './post.resolver'
4+
import { PrismaService } from '../../prisma.service'
5+
6+
@Module({
7+
providers: [PostResolver, PostService, PrismaService]
8+
})
9+
export class PostModule { }
10+

packages/usage/generated/users/users.input.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as NestJsGraphQL from "@nestjs/graphql";
22
import { StringFilter, StringNullableFilter, DateTimeFilter, StringWithAggregatesFilter, StringNullableWithAggregatesFilter, DateTimeWithAggregatesFilter, BoolFilter, BoolWithAggregatesFilter, StringFieldUpdateOperationsInput, NullableStringFieldUpdateOperationsInput, DateTimeFieldUpdateOperationsInput, BoolFieldUpdateOperationsInput, NestedStringFilter, NestedStringNullableFilter, NestedDateTimeFilter, NestedStringWithAggregatesFilter, NestedIntFilter, NestedStringNullableWithAggregatesFilter, NestedIntNullableFilter, NestedDateTimeWithAggregatesFilter, NestedBoolFilter, NestedBoolWithAggregatesFilter } from "../common/inputs";
3-
import { PostWhereInput, PostOrderByWithRelationInput, PostWhereUniqueInput, PostOrderByWithAggregationInput, PostScalarWhereWithAggregatesInput, PostCreateInput, PostUpdateInput, PostCreateManyInput, PostUpdateManyMutationInput, PostListRelationFilter, PostOrderByRelationAggregateInput, PostCountOrderByAggregateInput, PostMaxOrderByAggregateInput, PostMinOrderByAggregateInput, PostCreateNestedManyWithoutAuthorInput, PostUpdateManyWithoutAuthorInput, PostCreateWithoutAuthorInput, PostCreateOrConnectWithoutAuthorInput, PostCreateManyAuthorInputEnvelope, PostUpsertWithWhereUniqueWithoutAuthorInput, PostUpdateWithWhereUniqueWithoutAuthorInput, PostUpdateManyWithWhereWithoutAuthorInput, PostScalarWhereInput, PostCreateManyAuthorInput, PostUpdateWithoutAuthorInput } from "../post/post.input";
3+
import { PostWhereInput, PostOrderByWithRelationInput, PostWhereUniqueInput, PostOrderByWithAggregationInput, PostScalarWhereWithAggregatesInput, PostCreateInput, PostUpdateInput, PostCreateManyInput, PostUpdateManyMutationInput, PostListRelationFilter, PostOrderByRelationAggregateInput, PostCountOrderByAggregateInput, PostMaxOrderByAggregateInput, PostMinOrderByAggregateInput, PostCreateNestedManyWithoutAuthorInput, PostUpdateManyWithoutAuthorNestedInput, PostCreateWithoutAuthorInput, PostCreateOrConnectWithoutAuthorInput, PostCreateManyAuthorInputEnvelope, PostUpsertWithWhereUniqueWithoutAuthorInput, PostUpdateWithWhereUniqueWithoutAuthorInput, PostUpdateManyWithWhereWithoutAuthorInput, PostScalarWhereInput, PostCreateManyAuthorInput, PostUpdateWithoutAuthorInput } from "../post/post.input";
44
import { SortOrder, QueryMode } from "../common/enums";
55

66
@NestJsGraphQL.InputType('UsersWhereInput', { isAbstract: true })
@@ -191,8 +191,8 @@ export class UsersUpdateInput {
191191
@NestJsGraphQL.Field(() => DateTimeFieldUpdateOperationsInput, { nullable: true })
192192
updated_at?: DateTimeFieldUpdateOperationsInput | undefined;
193193

194-
@NestJsGraphQL.Field(() => PostUpdateManyWithoutAuthorInput, { nullable: true })
195-
posts?: PostUpdateManyWithoutAuthorInput | undefined;
194+
@NestJsGraphQL.Field(() => PostUpdateManyWithoutAuthorNestedInput, { nullable: true })
195+
posts?: PostUpdateManyWithoutAuthorNestedInput | undefined;
196196
}
197197

198198
@NestJsGraphQL.InputType('UsersCreateManyInput', { isAbstract: true })
@@ -336,8 +336,8 @@ export class UsersCreateNestedOneWithoutPostsInput {
336336
connect?: UsersWhereUniqueInput | undefined;
337337
}
338338

339-
@NestJsGraphQL.InputType('UsersUpdateOneWithoutPostsInput', { isAbstract: true })
340-
export class UsersUpdateOneWithoutPostsInput {
339+
@NestJsGraphQL.InputType('UsersUpdateOneWithoutPostsNestedInput', { isAbstract: true })
340+
export class UsersUpdateOneWithoutPostsNestedInput {
341341
@NestJsGraphQL.Field(() => UsersCreateWithoutPostsInput, { nullable: true })
342342
create?: UsersCreateWithoutPostsInput | undefined;
343343

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { Module } from '@nestjs/common'
2+
import { UsersService } from './users.service'
3+
import { UsersResolver } from './users.resolver'
4+
import { PrismaService } from '../../prisma.service'
5+
6+
@Module({
7+
providers: [UsersResolver, UsersService, PrismaService]
8+
})
9+
export class UsersModule { }
10+

0 commit comments

Comments
 (0)