TIL 80일차 - 피드 댓글 API 구현

박찬웅·2023년 4월 26일
0

항해99

목록 보기
85/105

23년 4월 26일

시도 한 것, 알게 된 점

오늘은 머리가 상당히 띵해서, 많은 것들을 구현하지는 못했다. 어제 댓글 API 대해서 아직 확실하게 정한게 없어서 오늘 회의한 내용으로 회의를 한 결과 그냥 노션에 있는 댓글 API 기능을 구현하면 그걸 프론트에서 피드나 마이페이지나 카페 상세페이지에서 같이 나타낼 수 있다고 하셔가지고 그래서 기본적인 API만 구현하면 된다고 하셨다.

오늘 구현한 것은 피드 댓글 작성, 피드 댓글 전체 조회, 피드 댓글 삭제 이렇게 3가지로 구성되어 있고, 그와 동시에 이전에 구현했던 마이페이지에서도 내가 작성한 마이페이지에 내가 작성한 피드에서 작성한 댓글의 개수까지 구현하는 것을 진행하였다.

DB는 이미 어제 만들 었기 때문에 바로 API만 구현하면 되었다.
우선 가장 쉽게 할 수 있었던, 피드 댓글 작성과 피드 댓글 삭제 API는 생각외로 간단했다. 과거 7주차때 했던 주특기 프로젝트에서 댓글 API랑 거의 비슷했기 때문에 과거에 적었던 코드를 참고해서 구현을 하였다.
하지만 난관은 피드 댓글 전체 조회 API이였는데, 사실 데이터 뽑는거는 어렵지 않는데 가공하는 것이 문제였다.
그 중에서도 isMine를 기능을 추가 하는 것이였는데 이것은 뭐냐면 내가 작성한 댓글이 맞는지 아닌지를 판별해서 맞으면 true, 다른사람이 적은 댓글이면 false로 기능을 구현 하는 것이였다.

const commentAllList = await FeedComments.findAll({
                    attributes: [
                        "UserId",
                        "feedCommentId",
                        "feedComment",
                        "createdAt",
                    ],
                    include : [
                        {
                            model: Users,
                            attributes: ["nickname", "profilePic"],
                        },
                    ],
                    where : [{ FeedId: feedId }], 
                    order: [['createdAt', 'DESC']],
                })
let result = [];
                for (let i = 0; i < commentAllList.length; i++) {
                    const commentList = {
                        // userId : commentAllList[i].UserId,
                        nickname : commentAllList[i].User.nickname,
                        profilePic : commentAllList[i].User.profilePic,
                        feedCommentId : commentAllList[i].feedCommentId,
                        feedComment : commentAllList[i].feedComment,
                        createdAt : commentAllList[i].createdAt,
                        isMine : commentAllList[i].UserId === userId ? true : false, // 다른분 댓글 작성하면 false, 내가 댓글 쓴건 true
                    }
                    result.push(commentList)

                }
                res.status(200).json({ commentList : result })

원래는 attributes에 UserId가 없었는데, 작성한 UserId와 원래 내가 로그인해서 비교하는 userId를 비교를 하면 되었다.

그리고 한가지 기존 마이페이지 피드 상세 조회에서도 해당 피드에 작성한 댓글의 개수를 구하는 commentCount를 구현하게 되었다.
해당 부분은 며칠전에 했던 likeCount 했던 것처럼 해당 피드의 고유 번호를 전체 조회 해서, 나오는 결과값으로 나온 배열의 개수만 구하면 되었다.

 const totalComment = await FeedComments.findAll({
                where: { FeedId : feedId }
            })

            let commentCount = totalComment.length

            // 데이터를 가공하는 작업
            const result = {
                nickname: mypage.User.nickname,
                profilePic: mypage.User.profilePic, 
                createdAt: mypage.createdAt,
                feedPic: mypage.feedPic,
                comment: mypage.comment,
                tags: mypage.Tags.map(tag => tag.tag),
                shopId : mypage.ShopId,
                shopName: mypage.Shop.shopName,
                shopAddress: mypage.Shop.address,
                shopThumbnail: mypage.Shop.thumbnail,
                isScrap: isExistScrap ? true : false,
                likeCount,
                commentCount,
            };

이렇게 오늘은 댓글 API 기능을 구현을 마무리 하고 배포까지 마무리 하였다.

아울러 어제 같이 하고 있는 팀원 한분이 폴더 기능을 구현을 성공했다고 한다. 물론 아직 완벽하게 구현된건 아니지만 끝까지 근성 있게 구현해서 대단하다고 말했다. 진짜 포기하지 않고 구현하신 부분에 대해서 노력을 좀 더 해야 하지 않을 까 생각한다.

앞으로 할 일

내가 구현한 기능은 거의 마무리 단계라 마지막으로 테스트 해보고, 팀원 한분이 구현 못한 기능들도 찾아보고 같이 도와 줄 예정이다.

profile
향해 13기 node.js 백앤드

0개의 댓글