GraphQL Server.
This commit is contained in:
@@ -2,6 +2,10 @@ import { Module } from '@nestjs/common';
|
||||
import { AppController } from './app.controller';
|
||||
import { AuthModule } from './auth/auth.module';
|
||||
import { ConfigModule } from '@nestjs/config';
|
||||
import { GraphQLISODateTime, GraphQLModule } from '@nestjs/graphql';
|
||||
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
|
||||
import { ApolloServerPluginLandingPageLocalDefault } from 'apollo-server-core';
|
||||
import { UsersModule } from './users/users.module';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
@@ -17,6 +21,15 @@ import { ConfigModule } from '@nestjs/config';
|
||||
websiteBasePath: '/auth',
|
||||
},
|
||||
}),
|
||||
GraphQLModule.forRoot<ApolloDriverConfig>({
|
||||
driver: ApolloDriver,
|
||||
typePaths: ['./**/*.graphql'],
|
||||
debug: true,
|
||||
playground: true,
|
||||
resolvers: {DateTime: GraphQLISODateTime}
|
||||
// plugins: [ApolloServerPluginLandingPageLocalDefault()],
|
||||
}),
|
||||
UsersModule,
|
||||
],
|
||||
controllers: [AppController],
|
||||
providers: [],
|
||||
|
||||
11
backend/src/graphql/generate.typings.ts
Normal file
11
backend/src/graphql/generate.typings.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { GraphQLDefinitionsFactory } from '@nestjs/graphql';
|
||||
import { join } from 'path';
|
||||
|
||||
const definitionFactory = new GraphQLDefinitionsFactory();
|
||||
|
||||
definitionFactory.generate({
|
||||
typePaths: ['./**/*.graphql'],
|
||||
path: join(process.cwd(), 'src/graphql/graphql.typings.ts'),
|
||||
outputAs: 'class',
|
||||
watch: true,
|
||||
});
|
||||
35
backend/src/graphql/graphql.typings.ts
Normal file
35
backend/src/graphql/graphql.typings.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
|
||||
/*
|
||||
* -------------------------------------------------------
|
||||
* THIS FILE WAS AUTOMATICALLY GENERATED (DO NOT MODIFY)
|
||||
* -------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
|
||||
export class CreateUserInput {
|
||||
email: string;
|
||||
password: string;
|
||||
}
|
||||
|
||||
export class User {
|
||||
id: string;
|
||||
email: string;
|
||||
time_joined: number;
|
||||
}
|
||||
|
||||
export abstract class IQuery {
|
||||
abstract users(): Nullable<User>[] | Promise<Nullable<User>[]>;
|
||||
|
||||
abstract user(id: number): Nullable<User> | Promise<Nullable<User>>;
|
||||
}
|
||||
|
||||
export abstract class IMutation {
|
||||
abstract createUser(createUserInput: CreateUserInput): User | Promise<User>;
|
||||
|
||||
abstract removeUser(id: number): Nullable<User> | Promise<Nullable<User>>;
|
||||
}
|
||||
|
||||
export type DateTime = any;
|
||||
type Nullable<T> = T | null;
|
||||
1
backend/src/users/dto/create-user.input.ts
Normal file
1
backend/src/users/dto/create-user.input.ts
Normal file
@@ -0,0 +1 @@
|
||||
export class CreateUserInput {}
|
||||
6
backend/src/users/dto/update-user.input.ts
Normal file
6
backend/src/users/dto/update-user.input.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import { CreateUserInput } from './create-user.input';
|
||||
import { PartialType } from '@nestjs/mapped-types';
|
||||
|
||||
export class UpdateUserInput extends PartialType(CreateUserInput) {
|
||||
id: number;
|
||||
}
|
||||
1
backend/src/users/entities/user.entity.ts
Normal file
1
backend/src/users/entities/user.entity.ts
Normal file
@@ -0,0 +1 @@
|
||||
export class User {}
|
||||
27
backend/src/users/users.graphql
Normal file
27
backend/src/users/users.graphql
Normal file
@@ -0,0 +1,27 @@
|
||||
scalar DateTime
|
||||
|
||||
type User {
|
||||
id: String!
|
||||
email: String!
|
||||
time_joined: Int!
|
||||
}
|
||||
|
||||
input CreateUserInput {
|
||||
email: String!
|
||||
password: String!
|
||||
}
|
||||
|
||||
# input UpdateUserInput {
|
||||
# id: Int!
|
||||
# }
|
||||
|
||||
type Query {
|
||||
users: [User]!
|
||||
user(id: Int!): User
|
||||
}
|
||||
|
||||
type Mutation {
|
||||
createUser(createUserInput: CreateUserInput!): User!
|
||||
# updateUser(updateUserInput: UpdateUserInput!): User!
|
||||
removeUser(id: Int!): User
|
||||
}
|
||||
8
backend/src/users/users.module.ts
Normal file
8
backend/src/users/users.module.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { UsersService } from './users.service';
|
||||
import { UsersResolver } from './users.resolver';
|
||||
|
||||
@Module({
|
||||
providers: [UsersResolver, UsersService]
|
||||
})
|
||||
export class UsersModule {}
|
||||
34
backend/src/users/users.resolver.ts
Normal file
34
backend/src/users/users.resolver.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import { Resolver, Query, Mutation, Args } from '@nestjs/graphql';
|
||||
import { UsersService } from './users.service';
|
||||
import { CreateUserInput } from './dto/create-user.input';
|
||||
import { UpdateUserInput } from './dto/update-user.input';
|
||||
|
||||
@Resolver('User')
|
||||
export class UsersResolver {
|
||||
constructor(private readonly usersService: UsersService) {}
|
||||
|
||||
@Mutation('createUser')
|
||||
create(@Args('createUserInput') createUserInput: CreateUserInput) {
|
||||
return this.usersService.create(createUserInput);
|
||||
}
|
||||
|
||||
@Query('users')
|
||||
findAll() {
|
||||
return this.usersService.findAll();
|
||||
}
|
||||
|
||||
@Query('user')
|
||||
findOne(@Args('id') id: number) {
|
||||
return this.usersService.findOne(id);
|
||||
}
|
||||
|
||||
// @Mutation('updateUser')
|
||||
// update(@Args('updateUserInput') updateUserInput: UpdateUserInput) {
|
||||
// return this.usersService.update(updateUserInput.id, updateUserInput);
|
||||
// }
|
||||
|
||||
@Mutation('removeUser')
|
||||
remove(@Args('id') id: number) {
|
||||
return this.usersService.remove(id);
|
||||
}
|
||||
}
|
||||
26
backend/src/users/users.service.ts
Normal file
26
backend/src/users/users.service.ts
Normal file
@@ -0,0 +1,26 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { CreateUserInput } from './dto/create-user.input';
|
||||
import { UpdateUserInput } from './dto/update-user.input';
|
||||
|
||||
@Injectable()
|
||||
export class UsersService {
|
||||
create(createUserInput: CreateUserInput) {
|
||||
return 'This action adds a new user';
|
||||
}
|
||||
|
||||
findAll() {
|
||||
return `This action returns all users`;
|
||||
}
|
||||
|
||||
findOne(id: number) {
|
||||
return `This action returns a #${id} user`;
|
||||
}
|
||||
|
||||
// update(id: number, updateUserInput: UpdateUserInput) {
|
||||
// return `This action updates a #${id} user`;
|
||||
// }
|
||||
|
||||
remove(id: number) {
|
||||
return `This action removes a #${id} user`;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user