diff --git a/backend/prisma/prisma.service.ts b/backend/prisma/prisma.service.ts new file mode 100644 index 0000000..edf6532 --- /dev/null +++ b/backend/prisma/prisma.service.ts @@ -0,0 +1,15 @@ +import { INestApplication, Injectable, OnModuleInit } 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(); + }); + } +} diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 7d2c8ef..98d2bed 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -4,7 +4,7 @@ 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 { ApolloServerPluginLandingPageLocalDefault } from 'apollo-server-core'; import { UsersModule } from './users/users.module'; @Module({ diff --git a/backend/src/graphql/graphql.typings.ts b/backend/src/graphql/graphql.typings.ts index a1ba133..444a8c3 100644 --- a/backend/src/graphql/graphql.typings.ts +++ b/backend/src/graphql/graphql.typings.ts @@ -20,15 +20,15 @@ export class User { } export abstract class IQuery { - abstract users(): Nullable[] | Promise[]>; + abstract users(): Nullable[]> | Promise[]>>; - abstract user(id: number): Nullable | Promise>; + abstract user(id: string): Nullable | Promise>; } export abstract class IMutation { abstract createUser(createUserInput: CreateUserInput): User | Promise; - abstract removeUser(id: number): Nullable | Promise>; + abstract removeUser(id: string): Nullable | Promise>; } export type DateTime = any; diff --git a/backend/src/main.ts b/backend/src/main.ts index 7275f42..b9d0211 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -2,6 +2,7 @@ import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import supertokens from 'supertokens-node'; import { SupertokensExceptionFilter } from './auth/filters/auth.filter'; +import { PrismaService } from 'prisma/prisma.service'; async function bootstrap() { const app = await NestFactory.create(AppModule); @@ -11,6 +12,8 @@ async function bootstrap() { credentials: true, }); app.useGlobalFilters(new SupertokensExceptionFilter()); + const prismaService = app.get(PrismaService); + await prismaService.enableShutdownHooks(app); await app.listen(process.env.APP_PORT); } diff --git a/backend/src/users/dto/create-user.input.ts b/backend/src/users/dto/create-user.input.ts deleted file mode 100644 index 0ba7c8d..0000000 --- a/backend/src/users/dto/create-user.input.ts +++ /dev/null @@ -1 +0,0 @@ -export class CreateUserInput {} diff --git a/backend/src/users/dto/update-user.input.ts b/backend/src/users/dto/update-user.input.ts deleted file mode 100644 index 0a62da2..0000000 --- a/backend/src/users/dto/update-user.input.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { CreateUserInput } from './create-user.input'; -import { PartialType } from '@nestjs/mapped-types'; - -export class UpdateUserInput extends PartialType(CreateUserInput) { - id: number; -} diff --git a/backend/src/users/entities/user.entity.ts b/backend/src/users/entities/user.entity.ts deleted file mode 100644 index 4f82c14..0000000 --- a/backend/src/users/entities/user.entity.ts +++ /dev/null @@ -1 +0,0 @@ -export class User {} diff --git a/backend/src/users/users.graphql b/backend/src/users/users.graphql index d109cf8..7009717 100644 --- a/backend/src/users/users.graphql +++ b/backend/src/users/users.graphql @@ -12,16 +12,16 @@ input CreateUserInput { } # input UpdateUserInput { -# id: Int! +# id: String! # } type Query { - users: [User]! - user(id: Int!): User + users: [User] + user(id: String!): User } type Mutation { createUser(createUserInput: CreateUserInput!): User! # updateUser(updateUserInput: UpdateUserInput!): User! - removeUser(id: Int!): User + removeUser(id: String!): User } diff --git a/backend/src/users/users.module.ts b/backend/src/users/users.module.ts index f4fbedb..1e30d3d 100644 --- a/backend/src/users/users.module.ts +++ b/backend/src/users/users.module.ts @@ -1,8 +1,9 @@ import { Module } from '@nestjs/common'; import { UsersService } from './users.service'; import { UsersResolver } from './users.resolver'; +import { PrismaService } from 'prisma/prisma.service'; @Module({ - providers: [UsersResolver, UsersService] + providers: [PrismaService, UsersResolver, UsersService], }) export class UsersModule {} diff --git a/backend/src/users/users.resolver.ts b/backend/src/users/users.resolver.ts index de3594a..2b28db7 100644 --- a/backend/src/users/users.resolver.ts +++ b/backend/src/users/users.resolver.ts @@ -1,25 +1,23 @@ import { Resolver, Query, Mutation, Args } from '@nestjs/graphql'; +import { CreateUserInput } from 'src/graphql/graphql.typings'; 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); - } - + // create(@Args('createUserInput') createUserInput: CreateUserInput) { + // return this.usersService.create(createUserInput); + // } @Query('users') findAll() { - return this.usersService.findAll(); + return this.usersService.users({}); } @Query('user') - findOne(@Args('id') id: number) { - return this.usersService.findOne(id); + findOne(@Args('id') id: string) { + return this.usersService.user({ id }); } // @Mutation('updateUser') @@ -27,8 +25,8 @@ export class UsersResolver { // return this.usersService.update(updateUserInput.id, updateUserInput); // } - @Mutation('removeUser') - remove(@Args('id') id: number) { - return this.usersService.remove(id); - } + // @Mutation('removeUser') + // remove(@Args('id') id: string) { + // return this.usersService.remove(id); + // } } diff --git a/backend/src/users/users.service.ts b/backend/src/users/users.service.ts index 0cdbfd0..cfa6cf6 100644 --- a/backend/src/users/users.service.ts +++ b/backend/src/users/users.service.ts @@ -1,26 +1,43 @@ import { Injectable } from '@nestjs/common'; -import { CreateUserInput } from './dto/create-user.input'; -import { UpdateUserInput } from './dto/update-user.input'; +import { CreateUserInput } from 'src/graphql/graphql.typings'; +import { Prisma, User } from '@prisma/client'; +import { PrismaService } from 'prisma/prisma.service'; @Injectable() export class UsersService { - create(createUserInput: CreateUserInput) { - return 'This action adds a new user'; + constructor(private readonly prismaService: PrismaService) {} + + async user(uniqueInput: Prisma.UserWhereUniqueInput) { + return await this.prismaService.user.findUnique({ where: uniqueInput }); } - findAll() { - return `This action returns all users`; + async users(params: { + skip?: number; + take?: number; + cursor?: Prisma.UserWhereUniqueInput; + where?: Prisma.UserWhereInput; + orderBy?: Prisma.UserOrderByWithRelationInput; + }) { + return await this.prismaService.user.findMany(params); } - findOne(id: number) { - return `This action returns a #${id} user`; - } + // create(createUserInput: CreateUserInput) { + // return 'This action adds a new user'; + // } - // update(id: number, updateUserInput: UpdateUserInput) { + // findAll() { + // return `This action returns all users`; + // } + + // findOne(id: string) { + // return `This action returns a #${id} user`; + // } + + // update(id: string, updateUserInput: UpdateUserInput) { // return `This action updates a #${id} user`; // } - remove(id: number) { - return `This action removes a #${id} user`; - } + // remove(id: string) { + // return `This action removes a #${id} user`; + // } }