From 8ed33d2fe8f1a7bdcc5dc1a9caeb838941a079f8 Mon Sep 17 00:00:00 2001 From: Louis Auzuret Date: Sun, 19 Jun 2022 22:12:21 +0200 Subject: [PATCH] feat: start users CRUD --- back/src/app.module.ts | 7 ++- back/src/main.ts | 3 ++ back/src/users/dto/create-user.dto.ts | 4 ++ back/src/users/dto/update-user.dto.ts | 4 ++ back/src/users/entities/user.entity.ts | 1 + back/src/users/users.controller.spec.ts | 20 +++++++++ back/src/users/users.controller.ts | 34 ++++++++++++++ back/src/users/users.module.ts | 11 +++++ back/src/users/users.service.spec.ts | 18 ++++++++ back/src/users/users.service.ts | 59 +++++++++++++++++++++++++ 10 files changed, 159 insertions(+), 2 deletions(-) create mode 100644 back/src/users/dto/create-user.dto.ts create mode 100644 back/src/users/dto/update-user.dto.ts create mode 100644 back/src/users/entities/user.entity.ts create mode 100644 back/src/users/users.controller.spec.ts create mode 100644 back/src/users/users.controller.ts create mode 100644 back/src/users/users.module.ts create mode 100644 back/src/users/users.service.spec.ts create mode 100644 back/src/users/users.service.ts diff --git a/back/src/app.module.ts b/back/src/app.module.ts index 8662803..04156b0 100644 --- a/back/src/app.module.ts +++ b/back/src/app.module.ts @@ -1,10 +1,13 @@ import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; +import { PrismaService } from './prisma/prisma.service'; +import { UsersModule } from './users/users.module'; +import { PrismaModule } from './prisma/prisma.module'; @Module({ - imports: [], + imports: [UsersModule, PrismaModule], controllers: [AppController], - providers: [AppService], + providers: [AppService, PrismaService], }) export class AppModule {} diff --git a/back/src/main.ts b/back/src/main.ts index 13cad38..0f304a2 100644 --- a/back/src/main.ts +++ b/back/src/main.ts @@ -1,8 +1,11 @@ import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; +import { PrismaService } from './prisma/prisma.service'; async function bootstrap() { const app = await NestFactory.create(AppModule); + const prismaService = app.get(PrismaService); + await prismaService.enableShutdownHooks(app) await app.listen(3000); } bootstrap(); diff --git a/back/src/users/dto/create-user.dto.ts b/back/src/users/dto/create-user.dto.ts new file mode 100644 index 0000000..c329ae4 --- /dev/null +++ b/back/src/users/dto/create-user.dto.ts @@ -0,0 +1,4 @@ +export class CreateUserDto { + mail: String; + name: String; +} diff --git a/back/src/users/dto/update-user.dto.ts b/back/src/users/dto/update-user.dto.ts new file mode 100644 index 0000000..dfd37fb --- /dev/null +++ b/back/src/users/dto/update-user.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/mapped-types'; +import { CreateUserDto } from './create-user.dto'; + +export class UpdateUserDto extends PartialType(CreateUserDto) {} diff --git a/back/src/users/entities/user.entity.ts b/back/src/users/entities/user.entity.ts new file mode 100644 index 0000000..4f82c14 --- /dev/null +++ b/back/src/users/entities/user.entity.ts @@ -0,0 +1 @@ +export class User {} diff --git a/back/src/users/users.controller.spec.ts b/back/src/users/users.controller.spec.ts new file mode 100644 index 0000000..a76d310 --- /dev/null +++ b/back/src/users/users.controller.spec.ts @@ -0,0 +1,20 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { UsersController } from './users.controller'; +import { UsersService } from './users.service'; + +describe('UsersController', () => { + let controller: UsersController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [UsersController], + providers: [UsersService], + }).compile(); + + controller = module.get(UsersController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/back/src/users/users.controller.ts b/back/src/users/users.controller.ts new file mode 100644 index 0000000..958b187 --- /dev/null +++ b/back/src/users/users.controller.ts @@ -0,0 +1,34 @@ +import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common'; +import { UsersService } from './users.service'; +import { CreateUserDto } from './dto/create-user.dto'; +import { UpdateUserDto } from './dto/update-user.dto'; + +@Controller('users') +export class UsersController { + constructor(private readonly usersService: UsersService) {} + + @Post() + create(@Body() createUserDto: CreateUserDto) { + return this.usersService.create(createUserDto); + } + + @Get() + findAll() { + return this.usersService.users({}); + } + + @Get(':id') + findOne(@Param('id') id: string) { + return this.usersService.findOne(+id); + } + + @Patch(':id') + update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto) { + return this.usersService.update(+id, updateUserDto); + } + + @Delete(':id') + remove(@Param('id') id: string) { + return this.usersService.remove(+id); + } +} diff --git a/back/src/users/users.module.ts b/back/src/users/users.module.ts new file mode 100644 index 0000000..b52a26c --- /dev/null +++ b/back/src/users/users.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { UsersService } from './users.service'; +import { UsersController } from './users.controller'; +import { PrismaModule } from 'src/prisma/prisma.module'; + +@Module({ + imports: [PrismaModule], + controllers: [UsersController], + providers: [UsersService] +}) +export class UsersModule {} diff --git a/back/src/users/users.service.spec.ts b/back/src/users/users.service.spec.ts new file mode 100644 index 0000000..62815ba --- /dev/null +++ b/back/src/users/users.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { UsersService } from './users.service'; + +describe('UsersService', () => { + let service: UsersService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [UsersService], + }).compile(); + + service = module.get(UsersService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/back/src/users/users.service.ts b/back/src/users/users.service.ts new file mode 100644 index 0000000..35aaf6a --- /dev/null +++ b/back/src/users/users.service.ts @@ -0,0 +1,59 @@ +import { Injectable } from '@nestjs/common'; +import { CreateUserDto } from './dto/create-user.dto'; +import { UpdateUserDto } from './dto/update-user.dto'; +import { User, Prisma } from '@prisma/client'; +import { PrismaService } from 'src/prisma/prisma.service'; + +@Injectable() +export class UsersService { + [x: string]: any; + constructor(private prisma: PrismaService) {} + + async user( + userWhereUniqueInput: Prisma.UserWhereUniqueInput, + ): Promise { + return this.prisma.user.findUnique({ + where: userWhereUniqueInput, + }); + } + + async users(params: { + skip?: number; + take?: number; + cursor?: Prisma.UserWhereUniqueInput; + where?: Prisma.UserWhereInput; + orderBy?: Prisma.UserOrderByWithRelationInput; + }): Promise { + const { skip, take, cursor, where, orderBy } = params; + return this.prisma.user.findMany({ + skip, + take, + cursor, + where, + orderBy, + }); + } + + async createUser(data: Prisma.UserCreateInput): Promise { + return this.prisma.user.create({ + data, + }); + } + + async updateUser(params: { + where: Prisma.UserWhereUniqueInput; + data: Prisma.UserUpdateInput; + }): Promise { + const { where, data } = params; + return this.prisma.user.update({ + data, + where, + }); + } + + async deleteUser(where: Prisma.UserWhereUniqueInput): Promise { + return this.prisma.user.delete({ + where, + }); + } +}