본문 바로가기

GraphQL BackEnd/Lecture

GraphQL + Prisma (6) Prisma 뮤데티어션 파트

# prisma-client-lib 문법 분석 가이드 입니다.

# prisma Prisma Connection파트 

yarn prisma-client-lib  이후 프리즈마 데모 서버에서 데이터를 쿼리하는 방법을 정리 했습니다.

# 단순히 공부한 내용을 열거합니다.

 

---------------------------------------------------------------------------------------------------------------------------

[prisma.createUser]

---------------------------------------------------------------------------------------------------------------------------

#1. 단순하게 user하나 만들기

//User 만들기
try {

        const user = await prisma.createUser({

          name,

          email,

          firstName,

          lastName,

          bio

        });

        return true;

      } catch (error) {

        return false;

      }

 

 

 

#2 . Post여러개 만들고, 주인user 연결하기

// Post 만들고 user 연결하기 - prism - client 

    createPosts: async (_, { userId, postsCaption }) => {

      try {

        postsCaption.forEach(async caption => {

          await prisma.createPost({

            caption: caption,

            user: { connect: { id: userId } }

          });

        });

      } catch (error) {

        return false;

      }

      return true;

    }

 

 

 

#2 . Post여러개 만들고, 주인user 연결하기 

// Post 만들고 user 연결하기 -in play ground

mutation {

  createPost(

    data: {

      caption: "I LOVE WORLD"

      location: "HRE"

      user: { connect: { id: "ck63l0btf5hdt0b09uizzky8x" } }

    }

  ) {

    id

  }

}

 

 

---------------------------------------------------------------------------------------------------------------------------

[prisma.updateUser]

---------------------------------------------------------------------------------------------------------------------------

// #1. 디폴트 값 처리

// 1. 프리즈마 데이터모델에서 @default("")

// 2. 리소버에서, args 를 받아올때, ` 디폴트 매개변수` 설정

import { prisma } from "../../../../generated/prisma-client";



export default {

  Mutation: {

    createAccount: async (_, args) => {

      const { username, email, firstName = "", lastName = "", bio = "" } = args;

      const user = await prisma.createUser({

        username,

        email,

        firstName,

        lastName,

        bio

      });

      return user;

    }

  }

};

 

 

#2.  단순하게 user 업데이트

      return prisma.updateUser({

        where: { id: user.id },

        data: { name, email, firstName, lastName, bio, avatar }

      });

 

 

#3. 특정 아이디만 비밀번호 다음으로 업데이트 하기

mutation {

  updateManyUsers(

    where: { id_in: ["ck63kqofxoamu0b00zc291fi2", "ck63l03ev5hde0b09j89rpy6d"] }

    data: { password: "qwer" }

  ){

    count

  }

}

 

 






#4. user는 post가 배열로 relation되어 연결. 이를 업데이트

mutation {

  updateUser(

    where: { id: "ck63l03ev5hde0b09j89rpy6d" }

    data: { posts: { connect: { id: "ck68v8leoegcl0b097d86guvt" } } }

  ){

    name

    password

    posts{

      id

      location

      caption

      user{

        name

      }

    }

  }

}

 

 

#5.  User의 팔로우 언팔로

  Mutation: {

    follow: async (_, args, { request }) => {

      isAuthenticated(request);

      const { id } = args;

      const { user } = request;

      try {

        await prisma.updateUser({

          where: { id: user.id },

          data: {

            following: {

              connect: {

                id

              }

            }

          }

        });

        return true;

      } catch {

        return false;

      }

    }

  }



  Mutation: {

    unfollow: async (_, args, { request }) => {

      isAuthenticated(request);

      const { id } = args;

      const { user } = request;

      try {

        await prisma.updateUser({

          where: { id: user.id },

          data: {

            following: {

              disconnect: {

                id

              }

            }

          }

        });

        return true;

      } catch {

        return false;

      }

    }

  }

 

 

 

 

DOS IMPACT - WEB Developer

KIM DO YOUNG

WEB : REACT JS | REACT NATIVE | GraphQL PRISMA