⚙️백엔드 : Backend/Prisma

prisma를 이용한 CRUD 동작

예옹이 2024. 5. 19. 16:29

 

안녕하세요 예옹이입니다.

 

오늘은 prisma를 이용한 간단한 CRUD 동작을 구현해보겠습니다!

제 블로그로 많은 도움 되시길 바랍니다.

 

 

 

0. 기본 파일 구조

 

import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();


// CRUD 기능의 함수들
   ...


export {
   // CRUD 기능의 함수명
      ...
}

 

기본 파일 구조를 잡아줍니다.

먼저 PrismaClient를 import 해줍니다.

그리고 const를 사용해 PrismaClient 인스턴스를 생성해 prisma라는 변수에 할당합니다.

 

 

 

 

 

1. CREATE

 

프론트가 준 req를 받아와 User 테이블에 레코드를 하나 쌓는 서비스를 만들어보겠습니다.

 

const createUser = async (
  // 프론트에서 오는 정보와 형식 지정
  reqUserName: string,
  reqUserColor: string,
  reqEmail: string
) => {
  try {
  
    // 프론트에서 주는 정보를 데이터베이스에 생성
    const reqData = await prisma.user.create({
        data: {
            userName: reqUserName,
            userColor: reqUserColor,
            email: reqEmail
        }
    })

    // 프론트로 반환해줄 데이터 이름과 형식 지정
    const resData = {
        userId: reqData.id,
        userName: reqData.userName,
        userColor: reqData.userColor,
        email: reqData.email
    }

    return resData
  } catch (error){
    throw new Error('error at creating user!')
  }
};

export {
    createUser
}

 

 

 

 

 

2. UPDATE

 

방금 쌓은 레코드를 수정하는 서비스를 만들어보겠습니다.

 

const updateUser = async (
    // 프론트에서 오는 정보와 형식 지정
    reqUserName: string,
    reqUserColor: string,
    reqEmail: string
  ) => {
    try {
  
      // 프론트에서 주는 정보로 수정
      const reqData = await prisma.user.update({
          data: {
              userName: reqUserName,
              userColor: reqUserColor,
              email: reqEmail
          }
      })
  
      // 프론트로 반환해줄 이름과 형식 지정
      const resData = {
          userId: reqData.id,
          userName: reqData.userName,
          userColor: reqData.userColor,
          email: reqData.email
      }
  
      return resData
    } catch (error){
      throw new Error('error at updating user!')
    }
  };

export {
    updateUser
}

 

 

 

 

 

3. GET

 

테이블의 레코드를 반환하는 서비스를 만들어보겠습니다.

 

const getUser = async (
  // 프론트에서 오는 정보와 형식 지정
  userId: number
) => {
  try {
  
    // 받아온 userId로 해당 유저의 원하는 정보 반환
    const getData = await prisma.user.findMany({
      where: {
        id: userId,
      },
      select: {
        id: false, // id는 반환해주지 않음
        userName: true, // userName, userColor, email은 반환해줌
        userColor: true,
        email: true,
      },
    });

    return getData;
  } catch (error) {
    throw new Error("error at getting user!");
  }
};

export {
   getUser 
};

 

 

 

 

4. DELETE

 

레코드를 지우는 서비스를 만들어보겠습니다.

 

const deleteUser = async (
    // 프론트에서 오는 정보와 형식 지정
    userId: number
  ) => {
    try {
    
      // 받아온 userId로 해당 유저 레코드를 지움
      const deleteData = await prisma.user.delete({
        where: {
          id: userId,
        }
      });
  
      return 0;
    } catch (error) {
      throw new Error("error at deleting user!");
    }
  };

export { 
   deleteUser 
};