# 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
'GraphQL BackEnd > Lecture' 카테고리의 다른 글
GraphQL + Prisma (5) Prisma Connection파트 (0) | 2020.02.07 |
---|---|
GraphQL + Prisma (4) Prisma fragment 파트 (0) | 2020.02.07 |
GraphQL + Prisma (1) 프리즈마 데이터 모델 분석 (0) | 2020.02.07 |
GraphQL + Prisma 환경설정 (0) | 2020.02.03 |
백단 환경 구축하기 - GraphQL + Prisma (0) | 2020.02.01 |