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

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