Add GraphqlService to handle GraphQL requests

This commit is contained in:
2024-09-09 16:14:21 +07:00
parent fbe03be7ca
commit 30e7ec74b6
12 changed files with 1517 additions and 50 deletions

View File

@@ -1,4 +1,6 @@
{ {
"singleQuote": true, "singleQuote": true,
"trailingComma": "all" "trailingComma": "all",
} "printWidth": 80,
"endOfLine": "lf"
}

View File

@@ -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

File diff suppressed because it is too large Load Diff

View File

@@ -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"
}, },

View File

@@ -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 {}

View 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 {}

View 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();
});
});

View 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,
},
});
}
}

View 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();
});
});

View File

@@ -0,0 +1,4 @@
import { Injectable } from '@nestjs/common';
@Injectable()
export class GraphqlService {}

View 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();
});
});

View 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();
});
}
}