글에 공감할 수 있는 기능인 좋아요 버튼을 만드는 중이다.
why DB?
공감을 누른 velog 예시 화면
/:userName/liked/:postId
/:userName/like/:postId
/:userName/unlike/:postId
const postResult = await dbConn.query(`SELECT id FROM public."BLOG_POSTS" WHERE ~`);
if (postResult.rowCount === 0) {
return response.status(404).json({ err: 'Post Not Found' });
}
const alreadyLiked = await dbConn.query(
`SELECT id FROM public."POST_LIKES" WHERE ~
);
if (!alreadyLiked.rowCount) {
return response.status(204).json({ err: 'Post Not Liked' });
}
const countResult = await dbConn.query(
`SELECT COUNT(*) FROM public."POST_LIKES" WHERE ~;`
);
try {
await dbConn.query(
`UPDATE public."BLOG_POSTS" SET ~ WHERE ~;`
);
} catch (e) {
return e;
}
/readingList/:userName/liked/
/:userName/readingList/liked/
post id(uuid)를 이용하니 post를 api로 받은 후에 요청해야하는 비효율적 형태가 되었다.
useEffect(() => {
axios({
baseURL: API_HOST,
url: `/@${userId}/${urlSlug}`,
})
.then(response => {
const _post = response.data;
setPost(_post);
axios({
baseURL: API_HOST,
url: `/${userId}/liked/${_post.id}`,
}).then(reponse => {
setLiked(reponse.data.length !== 0);
});
console.log(response.data);
})
.catch(error => {
console.error(error);
});
}, [userId, urlSlug]);
/${userId}/liked/${urlSlug}
,TODO