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의 라이프사이클 중 하나이다. 라이프사이클

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