관리 메뉴

나의 개발일지(김지헌)

항해 99 24일차 10월 12일 본문

항해 99

항해 99 24일차 10월 12일

코딩이좋아요 2022. 10. 13. 02:44

숙련주차 과제 좋아요와 좋아요 게시물 조회까지 작성 했다.

router.put('/posts/:postId/like',authMiddleware,async(req,res)=>{
  try{
  const {userId} = res.locals.user //유저를 기준으로 아이디값을 가져옴
  const {postId} = req.params 
  const likes =await Like.findOne({ where :{postId,userId}}) //좋아요한 게시물의 포스트 아이디 값과 유저 아이디를 가져옴
  if (!likes){ //좋아요가 없을시 
  await Post.increment({ //put같은거 increment 증가 해주는 함수
    likes : 1},
    {
    where : {postId : postId} 
  });
  await Like.create({ //생성 한다
    userId : userId,
    postId : postId,
    })
    res.status(201).send({"message":"게시글의 좋아요를 등록하였습니다."});
  }else{ //있을시
    await Post.increment({ //put같은거
      likes : -1}, //포스트에 있는 좋아요의 -1해준다
      {
      where : {postId : postId}
    });
    await Like.destroy({ //postId,userId 삭제 한다 
      where: {
        postId: postId,
        userId: userId,
      }
      })
    res.status(201).send({"message":"게시글의 좋아요를 취소하였습니다"});
  }
  }catch(error){ 
  console.log(error)
  res.status(400).send({'message': "좋아요 에러 error"}) 
  }   
})

좋아요를 하면 유저 정보와 포스트 게시물 번호를 들고와서 좋아요 데이터베이스에서 있는지 확인하고 없으면

유저 정보와 게시물 번호를 저장하면서 포스트 게시물의 likes번호를 1증가 시킨다.

 

조회

router.get('/posts/like',authMiddleware,async(req,res)=>{
  try{
      const {userId}  = res.locals.user
      const likes = await Like.findAll({  //로그인 한 유저를 기준으로 좋아요한 게시물을 가져온다
        where :{
        userId 
        }
      })
      const PostIds = likes.map((likes)=>likes.postId)  //불러온 게시물의 포스트 아이디를 찾는다.
      const data = [] // 배열 생성
      for (const postId of PostIds){ //for of 문을 이용하여 PostIds의 포스트 아이디를 하나씩 넣어준다.
        const row = await Post.findOne({ //반복문에 있는postId를 기준으로 해당하는 포스트의 게시물을 불러온다.
          where :{
            postId : postId
          }, attributes: {exclude : ['content']}, //, attributes: {exclude : ['content']} 필요하는거만 찾아옴
        })
        const datas = {        //불러온 정보를 정렬해서 재할당 해준다
          postId : row.postId,   
          userId : row.userId,
          nickname : row.nickname,
          title : row.title,
          createdAt :row.createdAt,
          updatedAt :row.updatedAt,
          likes : row.likes
          }
          data.push(datas) //data에 푸쉬 해준다
      }
      data.sort((a,b)=>b.likes-a.likes) //likes를 기준 많은순으로 내림차순 해준다
      res.status(200).json({data});
  }catch(error){ 
    console.log(error)
    res.status(400).send({'message': "좋아요 에러 error"}) 
    }  
})

 

'항해 99' 카테고리의 다른 글

항해 99 26일차 10월 14일  (0) 2022.10.14
항해 99 25일차 10월 13일  (0) 2022.10.14
항해 99 22일차 10/10  (0) 2022.10.11
항해 99 21일차 10/09  (0) 2022.10.09
항해 99 20일차 10/08  (0) 2022.10.08