티스토리 뷰

안녕하세요 강정호입니다

 

이번 포스팅에서는 User와 Post를 검색하는 API를 Graphql과 Javascript로 만들어 보겠습니다.

 

searchUser.graphql

type Query {
    searchUser(term: String!): [User!]!
}

User 조회 함수인 searchUser 함수는 term 이라는 String 타입의 매개변수를 필요로 합니다.

searchUser의 리턴 타입은 User 배열입니다.

 

searchUser.js

import { generateSecret, sendSecretMail } from "../../../utils";
import { prisma } from "../../../../generated/prisma-client";

export default {
    Query : {
        searchUser: async (_, args) => 
            prisma.users({
                where: {
                    OR: [
                        {userName_contains: args.term},
                        {firstName_contains: args.term},
                        {lastName_contains: args.term}
                    ]
        }})

    }
}

오늘의 핵심 : contains

args 변수에는 입력한 문자열이 term이라는 변수에 할당되어 있습니다.

args.term이 userName 또는 firstName 또는 lastName과 일치하면 해당 User 데이터를 리턴해줍니다.

 

그럼 constains는 어떨때 사용하는 것일까요??

SQL문에서 LIKE와 동일한 역할을 합니다. args.term이 userName, firstName, lastName의 문자열과 패턴이 일치한다면 조회합니다.

(참고 API : www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/filtering)

 

테스트

jeongho 라는 firstName을 가진 모든 User 객체들이 배열로 리턴이 되었다.

 

 

포스팅 조회하기

searchPost.graphql

type Query {
    searchPost(term: String!): [Post!]!
}

매개변수로 문자열을 입력하고, Post 객체 배열을 리턴합니다

 

searchPost.js

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

export default {
    Query: {
        searchPost: async (_, args) =>
        prisma.posts({
            where: { 
                OR: [
                    {location_starts_with: args.term},
                    {caption_starts_with: args.term}
                ] 
            }
        })
    }
};

Post에 location, caption에 args.term과 일치하는 문자열이 존재하면 Post를 조회합니다.

 

테스트

location에 Seoul이라고 입력된 Post 객체가 정상적으로 리턴되었습니다.

 

 

댓글