티스토리 뷰
안녕하세요 강정호 입니다.
오늘은 인스타그램에서 포스팅에 좋아요를 체크하는 API를 만들어보겠습니다.
ES6의 const와 let에 대해서 잠깐 짚고 넘어갈게요
const : 선언을 하고 할당을 하게 되면, 다른 값으로 변경이 되지 않는다.
let : 선언을 하고 값을 할당한 후에, 다른 값으로 재할당이 가능
** 기존 var 타입의 변수선언의 문제점이 존재하여 ES6에서는 const, let을 사용.
오늘의 핵심!!!
prisma.$exists
Prisma는 각 모델에 대한 CRUD 메서드 뿐만 아니라, $exists 함수도 생성합니다. $exists 함수는 데이터베이스 내에서 조건을 만족하는 객체가 있을 경우 true를 반환합니다. $exists 함수에 where 조건을 걸어서 원하는 조건으로 객체의 존재 유무를 판단할 수 있습니다
prisma 공식 API : v1.prisma.io/docs/1.34/prisma-client/features/check-existence-JAVASCRIPT-pyl1/
참고 페이지 : velog.io/@cadenzah/graphql-node-08-subscription
toggleLike.js
import { isAuthenticated } from "../../../middlewares";
import { prisma } from "../../../../generated/prisma-client";
export default {
Mutation: {
toggleLike: async (_, args, { request }) => {
if(!request.user){
isAuthenticated(request);
const { postId } = args;
const { user } = request;
try{
const existingLike = await prisma.$exists.like({
AND: [
{
user:{
id: user.id,
}
},
{
post:{
id: postId
}
}
]
});
if(existingLike){
// To DO
}else{
const newLike = await prisma.createLike({user: {
user: {
connect: {
id: user.id
}
},
post: {
connect: {
id: postId
}
}
}
});
}
}catch{
return false;
}
return true;
}
}
}
}
isAuthenticated 함수는 토큰으로 사용자 인증을 하였는지 검증하는 함수입니다.
prisma.$exists 함수로 true가 반환된다면, const existingLike 변수에 true가 할당됩니다.
그리고 그 밑의 if 조건에서 existingLike를 사용하여 좋아요를 새로 생성하는 로직이 들어갑니다.
toggleLike.graphql
type Mutation {
toggleLike(postId: String!): Boolean!
}
toggleLike 함수는 해당 Post Id에 대해서 특정 사용자가 좋아요를 눌렀는지 여부를 리턴해주는 쿼리입니다.
middlewares.js
export const isAuthenticated = request => {
if(!request.user){
throw Error("You need to log in to perform this action");
}
return true;
}
request에 담긴 user 객체의 여부에 따라서 로그인 인증이 되었는지 여부를 판단합니다.
인증이 안되었을 경우 에러를 발생시킵니다.
'프로젝트' 카테고리의 다른 글
[인스타그램 클론코딩] #3.10 searchUser and searchPost resolver (0) | 2020.09.08 |
---|---|
[인스타그램 클론코딩] #3.9 toggleLike and addComment Resolver (0) | 2020.09.07 |
[인스타그램 클론코딩] #3.7 Jwt 토큰 사용하기 (0) | 2020.09.07 |
[인스타그램 클론코딩] #3.5 Passport JWT part one (0) | 2020.08.30 |
[인스타그램 클론코딩] #3.4 requestSecret Resolver (0) | 2020.08.21 |
- Total
- Today
- Yesterday
- Inception
- front
- push_back
- resize
- 도커
- Spring boot
- docker
- 부동산공부
- 열반스쿨기초반
- 월급쟁이부자들
- 내년은 빡세게!!
- GIT
- ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
- github
- 파라메터
- 월부닷컴
- 재테크공부
- 관계대수
- pop_back
- 인셉션
- Use case
- 폭포수
- 깃허브
- 항해솔직후기
- 항해플러스백엔드
- 항해플러스후기
- 깃
- 유즈케이스
- 2023년
- 개발자 회고
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |