Add GraphqlService to handle GraphQL requests
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
{
|
||||
"singleQuote": true,
|
||||
"trailingComma": "all"
|
||||
}
|
||||
"trailingComma": "all",
|
||||
"printWidth": 80,
|
||||
"endOfLine": "lf"
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
"$schema": "https://json.schemastore.org/nest-cli",
|
||||
"collection": "@nestjs/schematics",
|
||||
"sourceRoot": "src",
|
||||
"language": "ts",
|
||||
"compilerOptions": {
|
||||
"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"
|
||||
},
|
||||
"dependencies": {
|
||||
"@apollo/server": "^4.11.0",
|
||||
"@nestjs/apollo": "^12.2.0",
|
||||
"@nestjs/common": "^10.0.0",
|
||||
"@nestjs/core": "^10.0.0",
|
||||
"@nestjs/graphql": "^12.2.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",
|
||||
"rxjs": "^7.8.1"
|
||||
},
|
||||
|
||||
@@ -1,10 +1,22 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { GraphQLModule } from '@nestjs/graphql';
|
||||
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
|
||||
import { AppController } from './app.controller';
|
||||
import { AppService } from './app.service';
|
||||
import { GraphqlModule } from './graphql/graphql.module';
|
||||
import { join } from 'path';
|
||||
import { PrismaService } from './prisma/prisma.service';
|
||||
|
||||
@Module({
|
||||
imports: [],
|
||||
imports: [
|
||||
GraphQLModule.forRoot<ApolloDriverConfig>({
|
||||
driver: ApolloDriver,
|
||||
playground: true,
|
||||
autoSchemaFile: join(process.cwd(), 'src/graphql/schema.gql'),
|
||||
}),
|
||||
GraphqlModule,
|
||||
],
|
||||
controllers: [AppController],
|
||||
providers: [AppService],
|
||||
providers: [AppService, PrismaService],
|
||||
})
|
||||
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