Nest.js prisma CRUD 만들기
2025-02-06
NestprismaCRUDmysql
Prisma Client 만들기
src/prisma.client.ts
import { Injectable, OnModuleInit } from "@nestjs/common";
import { PrismaClient } from "@prisma/client";
@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit {
async onModuleInit() {
await this.$connect();
}
}
- 파일을 만들고 PrismaService를 만든다.
- 모듈이 init되면 connect한다.
- OnModuleInit은 nest.js의 라이프사이클 중 하나이다.
- OnModuleInit은 nest.js의 라이프사이클 중 하나이다.
/users/users.module.ts
import { Module } from "@nestjs/common";
import { UsersService } from "./users.service";
import { UsersController } from "./users.controller";
import { PrismaService } from "prisma.client";
@Module({
controllers: [UsersController],
providers: [UsersService, PrismaService],
})
export class UsersModule {}
- prisma.client안에 PrismaService를 가지고와서 provider에 넣어줍니다.
/users/users.service.ts
import { Injectable } from "@nestjs/common";
import { CreateUserDto } from "./dto/create-user.dto";
import { UpdateUserDto } from "./dto/update-user.dto";
import { User } from "@prisma/client";
import { PrismaService } from "prisma.client";
import { Injectable } from "@nestjs/common";
import { CreateUserDto } from "./dto/create-user.dto";
import { UpdateUserDto } from "./dto/update-user.dto";
import { PrismaService } from "src/prisma.client";
@Injectable()
export class UsersService {
constructor(private readonly prismaService: PrismaService) {}
async create(createUserDto: CreateUserDto) {
return await this.prismaService.user.create({
data: createUserDto,
});
}
async findAll() {
return await this.prismaService.user.findMany();
}
async findOne(id: number) {
return await this.prismaService.user.findUnique({ where: { id } });
}
async update(id: number, updateUserDto: UpdateUserDto) {
return await this.prismaService.user.update({
where: { id },
data: { ...updateUserDto },
});
}
async remove(id: number) {
return await this.prismaService.user.delete({ where: { id } });
}
}
- PrismaService를 가져와 constructor로 추가합니다.
constructor(private readonly prismaService: PrismaService) {}
- User, PrismaService를 import 합니다.
- CRUD를 작성해줍니다.
Create
/users/users.service.ts
@Post()
create(@Body() createUserDto: CreateUserDto) {
return this.usersService.create(createUserDto);
}
Read
@Get()
findAll() {
return this.usersService.findAll();
}
@Get(':id')
findOne(@Param('id') id: string) {
return this.usersService.findOne(+id);
}
Update
@Post(':id')
update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto) {
return this.usersService.update(+id, updateUserDto);
}
Delete
@Delete(':id')
remove(@Param('id') id: string) {
return this.usersService.remove(+id);
}
전체 코드
import { Controller, Get, Post, Body, 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.findAll();
}
@Get(":id")
findOne(@Param("id") id: string) {
return this.usersService.findOne(+id);
}
@Post(":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);
}
}