본문 바로가기

GraphQL BackEnd/Lecture

GraphQL + Prisma (2) Prisma 쿼리파트

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

# prisma 쿼리 파트

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

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

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

#1. [prisma.users] User라는 타입이 있다고 생각해 봅시다.

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

# Users : 모든 유저의 정보 가져오기

  Query: {
    Users: async () => {
      const data = await prisma.users();
      return data;
    }
  }

 

 

# 만약에 리스트 뷰를 만들때, 유저의 정보를 , 이름순으로 내림차 정렬인데, 0번에서 2번 |4번에서 6번 | 7번에서 9번 이런식으로  쿼리하고 싶을때

# Write your query or mutation here
{
  users(orderBy:name_DESC,skip:3,first:3){
    name
    id
    picture
  }
}

 

 

# User중에 이름이 `지`로 시작하는 유저만

{
  users(where:{name_starts_with:"지"}){
    name
    id
    picture
  }
}

 

//Post 검색을 하는데, 해당 용어로 시작하는 장소나, 제목을 찾기. 

      prisma.posts({
        where: {
          OR: [
            { location_starts_with: args.term },
            { caption_starts_with: args.term }
          ]
        }
      })

 

 

//사용자 검색하기 : 사용자 이름에 키워드가 포함 되어 있는지

    searchUser: async (_, args) => {
      const { term } = args;
      const res = prisma.users({ where: { name_contains: term } });
      return res;
    }

 

[옵션 살펴보기]

: 특정 아이디만 빼고 가져올수도 | 특정 아이디의 User만 가져올수도 있다. 

: 대소비교 | 문자열 포함여부 | 시작 끝 일치 여부 등 많은 옵션을 제공해줌.

type UserWhereInput {
id: ID 
----------------------------------id 포함 완전 포함 여부
id_not: ID
id_in: [ID!] 해당 아이디 리스트에 해당 되면 가져옴,
id_not_in: [ID!]
----------------------------------문자열 대소 비교
 
id_lt: ID
id_lte: ID
id_gt: ID
id_gte: ID
----------------------------------문자열 포함여부
id_contains: ID 
id_not_contains: ID
----------------------------------문자열 시작 , 끝 일치 여부
id_starts_with: ID
id_not_starts_with: ID
id_ends_with: ID
id_not_ends_with: ID
}

 

 

//where 조건 배열일 경우

posts_every: PostWhereInput
posts_some: PostWhereInput
posts_none: PostWhereInput

 

//예시 Post id 배열 params => 해당 포스트를 가지고 있는 유저들을 배열로 리턴

게시글에 좋아요를 한 사람들만을 가져오고 싶은경우.

    postHaveUserList: async (_, { postIds }) => {
      const res = await prisma.users({
        where: {
          posts_some: {
            OR: postIds.map(e => {
              return { id: e };
            })
          }
        }
      });
      return res;
    }

 

[ enum 타입 : 정해진 문자열만 입력 가능]

목적: String 입력은 제한이 없이 어떤 단어가 들어올지 모르니까, 애초에 들어갈 수 있는 선택지를 주고 싶을때 사용.

 

# grahplq에  enum 이라 정의하고  사용하면 된다.

enum ACTIONS {
  EDIT
  DELETE
}

type Mutation {
  editPost(
    id: String!
    action: ACTIONS!
    location: String
    caption: String
    userId: String
  ): Post
}

 

    editPost: async (_, args) => {
      const { id, action, location, caption } = args;
      if (action === DELETE) {
        try {
          const res = await prisma.deletePost({ id });
          return res;
        } catch (error) {
          return null;
        }
      } else if (action === EDIT) {
        const res = await prisma.updatePost({
          data: { location, caption },
          where: { id: id }
        });
        return res;
      }
    }

 

 

DOS IMPACT - WEB Developer

KIM DO YOUNG

WEB : REACT JS | REACT NATIVE | GraphQL PRISMA