티스토리 뷰
프로젝트
[인스타그램 클론코딩] #3.13 ~ 3.14 me Resolver + Prisma 한계점, seeFullPost Resolver
jhkang-dev 2020. 9. 9. 12:02안녕하세요 강정호 입니다
오늘 개발할 API는 내 프로필 보기(me)와 seeFullPost API입니다.
me.graphql
type Query {
me: UserProfile!
}
me.graphql에서는 Query 작업으로 UserProfile 객체를 조회한다.
응? 근데 UserProfile이라는 객체는 존재하지 않는데 이것은 무엇이지 라고 생각할 수 있다.
UserProfile은 개발자가 직접 만든 조회용 객체이다.
아래 model.grapql에서 보면 UserProfile 타입은 User객체와 Post 배열을 포함하는 타입의 객체이다.
이번 포스팅의 핵심!!
Prisma에서는 하나의 데이터 타입과 연결된 하위 데이터들을 가져올 수 없는 한계가 있다.
Query에 리턴타입을 User! 설정 ==> User 타입 객체만 조회
Query에 리턴타입 User, [Post!]! 설정 ==> User와 Post 객체 모두 조회 가능
이 때문에 model에 UserProfile 타입을 선언했다.
model.graphql
type User {
id: ID!
userName: String!
email: String!
firstName: String
lastName: String
fullName: String
amIFollowing: Boolean!
bio: String
following: [User!]!
followers: [User!]!
posts: [Post!]!
likes: [Like!]!
comments: [Comment!]!
rooms: [Room!]!
}
type Post{
id: ID!
location: String
caption: String!
user: User!
files:[File!]!
likes: [Like!]!
comments: [Comment!]!
isLiked: Boolean!
}
type Like{
id: ID!
user: User!
post: Post!
}
type Comment{
id: ID!
text: String!
user: User!
}
type File{
id: ID!
url: String!
post: Post!
}
type Room{
id: ID!
participants: [User!]!
messages: [Message!]!
}
type Message{
id: ID!
text: String!
from: User!
to: User!
}
type UserProfile {
user: User
posts: [Post!]!
}
me.js
import { prisma } from "../../../../generated/prisma-client";
export default {
Query: {
me: async (_, __, { request, isAuthenticated }) => {
isAuthenticated(request);
const { user } = request;
const userProfile = await prisma.user({id: user.id});
const posts = await prisma.user({id: user.id}).posts();
return {
user: userProfile,
posts
}
}
},
User: {
fullName: (parent) => {
return `${parent.firstName} ${parent.lastName}`
}
}
};
테스트
위와 같이 me Query를 실행하면 User와 User에 달린 Post 배열이 정상적으로 리턴이 된다.
seeFullPost.graphql
type FullPost {
post: Post!
comments: [Comment!]!
likeCount: Int
}
type Query {
seeFullPost(id: String!): FullPost!
}
seeFullPost는 Query(조회) 작업이다. FullPost 객체를 리턴을 하는데, FullPost 타입은 post, comments, likeCount를 리턴한다.
위와 같이 새롭게 타입을 생성해서 리턴 타입을 설정할 수 있다.
seeFullPost.js
import { prisma } from "../../../../generated/prisma-client";
import { COMMENT_FRAGMENT } from "../../../fragments";
export default {
Query: {
seeFullPost: async(_, args) => {
const { id } = args;
const post = await prisma.post({id});
const comments = await prisma.post({id}).comments().$fragment(COMMENT_FRAGMENT);
const likeCount = await prisma.likesConnection({
where: { post: {id} }
})
.aggregate()
.count();
return {
post, comments, likeCount
}
}
}
}
테스트
Post Id를 사용하여 해당 Post를 조회하고, 거기에 딸린 Comment와 likeCount를 정상적으로 조회하는 것을 확인할 수 있습니다.
'프로젝트' 카테고리의 다른 글
[인스타그램 클론코딩] #3.19 upload Resolver (0) | 2020.09.14 |
---|---|
[인스타그램 클론코딩] #3.16 ~ 3.18 isSelf, isFollowing, isLiked with Computed.js (0) | 2020.09.12 |
[인스타그램 클론코딩] #3.12 editUser seeUser Resolver (0) | 2020.09.08 |
[인스타그램 클론코딩] #3.11 follow unfollow Resolver (0) | 2020.09.08 |
[인스타그램 클론코딩] #3.10 searchUser and searchPost resolver (0) | 2020.09.08 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 재테크공부
- 개발자 회고
- 도커
- 항해솔직후기
- 부동산공부
- 깃
- 항해플러스후기
- 폭포수
- ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
- 2023년
- 내년은 빡세게!!
- 열반스쿨기초반
- github
- docker
- resize
- 깃허브
- 인셉션
- 월부닷컴
- front
- 유즈케이스
- Use case
- GIT
- 항해플러스백엔드
- push_back
- 관계대수
- Spring boot
- 파라메터
- 월급쟁이부자들
- pop_back
- Inception
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함