Add GraphqlService to handle GraphQL requests
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
{
|
{
|
||||||
"singleQuote": true,
|
"singleQuote": true,
|
||||||
"trailingComma": "all"
|
"trailingComma": "all",
|
||||||
}
|
"printWidth": 80,
|
||||||
|
"endOfLine": "lf"
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
"$schema": "https://json.schemastore.org/nest-cli",
|
"$schema": "https://json.schemastore.org/nest-cli",
|
||||||
"collection": "@nestjs/schematics",
|
"collection": "@nestjs/schematics",
|
||||||
"sourceRoot": "src",
|
"sourceRoot": "src",
|
||||||
|
"language": "ts",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"deleteOutDir": true
|
"deleteOutDir": true
|
||||||
}
|
}
|
||||||
|
|||||||
1429
package-lock.json
generated
1429
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -20,9 +20,17 @@
|
|||||||
"test:e2e": "jest --config ./test/jest-e2e.json"
|
"test:e2e": "jest --config ./test/jest-e2e.json"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@apollo/server": "^4.11.0",
|
||||||
|
"@nestjs/apollo": "^12.2.0",
|
||||||
"@nestjs/common": "^10.0.0",
|
"@nestjs/common": "^10.0.0",
|
||||||
"@nestjs/core": "^10.0.0",
|
"@nestjs/core": "^10.0.0",
|
||||||
|
"@nestjs/graphql": "^12.2.0",
|
||||||
"@nestjs/platform-express": "^10.0.0",
|
"@nestjs/platform-express": "^10.0.0",
|
||||||
|
"@prisma/client": "^5.19.1",
|
||||||
|
"apollo-server-express": "^3.13.0",
|
||||||
|
"class-transformer": "^0.5.1",
|
||||||
|
"class-validator": "^0.14.1",
|
||||||
|
"graphql": "^16.9.0",
|
||||||
"reflect-metadata": "^0.2.0",
|
"reflect-metadata": "^0.2.0",
|
||||||
"rxjs": "^7.8.1"
|
"rxjs": "^7.8.1"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,10 +1,22 @@
|
|||||||
import { Module } from '@nestjs/common';
|
import { Module } from '@nestjs/common';
|
||||||
|
import { GraphQLModule } from '@nestjs/graphql';
|
||||||
|
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
|
||||||
import { AppController } from './app.controller';
|
import { AppController } from './app.controller';
|
||||||
import { AppService } from './app.service';
|
import { AppService } from './app.service';
|
||||||
|
import { GraphqlModule } from './graphql/graphql.module';
|
||||||
|
import { join } from 'path';
|
||||||
|
import { PrismaService } from './prisma/prisma.service';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [],
|
imports: [
|
||||||
|
GraphQLModule.forRoot<ApolloDriverConfig>({
|
||||||
|
driver: ApolloDriver,
|
||||||
|
playground: true,
|
||||||
|
autoSchemaFile: join(process.cwd(), 'src/graphql/schema.gql'),
|
||||||
|
}),
|
||||||
|
GraphqlModule,
|
||||||
|
],
|
||||||
controllers: [AppController],
|
controllers: [AppController],
|
||||||
providers: [AppService],
|
providers: [AppService, PrismaService],
|
||||||
})
|
})
|
||||||
export class AppModule {}
|
export class AppModule {}
|
||||||
|
|||||||
8
src/graphql/graphql.module.ts
Normal file
8
src/graphql/graphql.module.ts
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
import { GraphqlService } from './graphql.service';
|
||||||
|
import { GraphqlResolver } from './graphql.resolver';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
providers: [GraphqlService, GraphqlResolver],
|
||||||
|
})
|
||||||
|
export class GraphqlModule {}
|
||||||
18
src/graphql/graphql.resolver.spec.ts
Normal file
18
src/graphql/graphql.resolver.spec.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
|
import { GraphqlResolver } from './graphql.resolver';
|
||||||
|
|
||||||
|
describe('GraphqlResolver', () => {
|
||||||
|
let resolver: GraphqlResolver;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const module: TestingModule = await Test.createTestingModule({
|
||||||
|
providers: [GraphqlResolver],
|
||||||
|
}).compile();
|
||||||
|
|
||||||
|
resolver = module.get<GraphqlResolver>(GraphqlResolver);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be defined', () => {
|
||||||
|
expect(resolver).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
26
src/graphql/graphql.resolver.ts
Normal file
26
src/graphql/graphql.resolver.ts
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import { Resolver, Query, Mutation, Args } from '@nestjs/graphql';
|
||||||
|
import { PrismaService } from 'src/prisma/prisma.service';
|
||||||
|
import { User } from '@prisma/client';
|
||||||
|
|
||||||
|
@Resolver('User')
|
||||||
|
export class GraphqlResolver {
|
||||||
|
constructor(private readonly prismaService: PrismaService) {}
|
||||||
|
|
||||||
|
@Query(() => [User])
|
||||||
|
async users(): Promise<User[]> {
|
||||||
|
return this.prismaService.user.findMany();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Mutation(() => User)
|
||||||
|
async createUser(
|
||||||
|
@Args('email') email: string,
|
||||||
|
@Args('name', { nullable: true }) name?: string,
|
||||||
|
): Promise<User> {
|
||||||
|
return this.prismaService.user.create({
|
||||||
|
data: {
|
||||||
|
email,
|
||||||
|
name,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
18
src/graphql/graphql.service.spec.ts
Normal file
18
src/graphql/graphql.service.spec.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
|
import { GraphqlService } from './graphql.service';
|
||||||
|
|
||||||
|
describe('GraphqlService', () => {
|
||||||
|
let service: GraphqlService;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const module: TestingModule = await Test.createTestingModule({
|
||||||
|
providers: [GraphqlService],
|
||||||
|
}).compile();
|
||||||
|
|
||||||
|
service = module.get<GraphqlService>(GraphqlService);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be defined', () => {
|
||||||
|
expect(service).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
4
src/graphql/graphql.service.ts
Normal file
4
src/graphql/graphql.service.ts
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class GraphqlService {}
|
||||||
18
src/prisma/prisma.service.spec.ts
Normal file
18
src/prisma/prisma.service.spec.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
|
import { PrismaService } from './prisma.service';
|
||||||
|
|
||||||
|
describe('PrismaService', () => {
|
||||||
|
let service: PrismaService;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const module: TestingModule = await Test.createTestingModule({
|
||||||
|
providers: [PrismaService],
|
||||||
|
}).compile();
|
||||||
|
|
||||||
|
service = module.get<PrismaService>(PrismaService);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be defined', () => {
|
||||||
|
expect(service).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
15
src/prisma/prisma.service.ts
Normal file
15
src/prisma/prisma.service.ts
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import { Injectable, OnModuleInit, INestApplication } from '@nestjs/common';
|
||||||
|
import { PrismaClient } from '@prisma/client';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class PrismaService extends PrismaClient implements OnModuleInit {
|
||||||
|
async onModuleInit() {
|
||||||
|
await this.$connect();
|
||||||
|
}
|
||||||
|
|
||||||
|
async enableShutdownHooks(app: INestApplication) {
|
||||||
|
this.$on('beforeExit', async () => {
|
||||||
|
await app.close();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user