12-1. like / unlike 모델 메소드 만들기

좋아요, 그리고 좋아요 취소 할 때 사용되는 메소드 like 과 unlike 를 구현해보도록 하겠습니다.

src/models/post.js

(...)
Post.statics.like = function({_id, username}) {
    return this.findByIdAndUpdate(_id, {
        $inc: { likesCount: 1 }, // likesCount 를 1 더하고
        $push: { likes: username }
    }, {
        new: true, // 이걸 해야 업데이트 된 데이터를 반환함
        select: 'likesCount'
    }).exec();
};

Post.statics.unlike = function({_id, username}) {
    return this.findByIdAndUpdate(_id, {
        $inc: { likesCount: -1 },
        $pull: { likes: username }
    }, {
        new: true,
        select: 'likesCount'
    });
};

module.exports = mongoose.model('Post', Post);

like 와 unlike 는 작동방식은 서로 비슷합니다. 좋아요를 할 때는 likesCount 를 1을 더하고, 그리고 likes 배열에 주어진 유저네임을 삽입합니다. 반대로 unlike 의 경우엔 likesCount 에서 1을 빼고, likes 배열에서 주어진 유저네임을 제거해줍니다.

그리고 공통적으로, 업데이트의 두번째 옵션 파라미터에서는 { new: true, select: 'likesCount'} 가 설정되었는데, new 의 경우 해당 업데이트의 쿼리 결과가 업데이트 된 다음의 데이터를 반환하도록 설정하는 것이고, select 는 데이터를 불러올 때 likesCount 값만 불러오는 것 입니다.

results matching ""

    No results matching ""