[REST API] 18. Blog V3 : Love

문정준's avatar
May 15, 2025
[REST API] 18. Blog V3 : Love

REST API 서버는 데이터만 돌려주는 서버

  • 변경된 값을 항상 다시 돌려줘야 함
  • GET, POST, PUT, DELETE
 

1. DTO Setting

  • LoveRequest
@Data public static class SaveDTO { @NotNull(message = "board의 id가 전달되어야 합니다") private Integer boardId; public Love toEntity(Integer sessionUserId) { return Love.builder() .board(Board.builder().id(boardId).build()) .user(User.builder().id(sessionUserId).build()) .build(); } }
 
  • ReplyResponse
@Data public static class SaveDTO { private Integer loveId; private Integer loveCount; public SaveDTO(Integer loveId, Integer loveCount) { this.loveId = loveId; this.loveCount = loveCount; } } @Data public static class DeleteDTO { private Integer loveCount; public DeleteDTO(Integer loveCount) { this.loveCount = loveCount; } }
 

2. 좋아요 추가

  • LoveController
    • Blogv2와 구조는 동일, ResponseEntity로 변경
@PostMapping("/s/api/love") public ResponseEntity<?> saveLove(@RequestBody @Valid LoveRequest.SaveDTO reqDTO, Errors errors) { User sessionUser = (User) session.getAttribute("sessionUser"); LoveResponse.SaveDTO respDTO = loveService.좋아요(reqDTO, sessionUser.getId()); return Resp.ok(respDTO); }
 
  • LoveService
@Transactional public LoveResponse.SaveDTO 좋아요(LoveRequest.SaveDTO reqDTO, Integer sessionUserId) { Love lovePS = loveRepository.save(reqDTO.toEntity(sessionUserId)); Long loveCount = loveRepository.findByBoardId(reqDTO.getBoardId()); return new LoveResponse.SaveDTO(lovePS.getId(), loveCount.intValue()); }
 

Result

3. 좋아요 취소

  • LoveController
    • Blogv2와 구조는 동일, ResponseEntity로 변경
@DeleteMapping("/s/api/love/{id}") public ResponseEntity<?> deleteLove(@PathVariable("id") Integer id) { User sessionUser = (User) session.getAttribute("sessionUser"); LoveResponse.DeleteDTO respDTO = loveService.좋아요취소(id, sessionUser.getId()); return Resp.ok(respDTO); }
 
  • LoveService
@Transactional public LoveResponse.DeleteDTO 좋아요취소(Integer id, Integer sessionUserId) { Love lovePS = loveRepository.findById(id) .orElseThrow(() -> new ExceptionApi404("자원을 찾을 수 없습니다")); if (!lovePS.getUser().getId().equals(sessionUserId)) { throw new ExceptionApi403("권한이 없습니다"); } Integer boardId = lovePS.getBoard().getId(); loveRepository.deleteById(id); Long loveCount = loveRepository.findByBoardId(boardId); return new LoveResponse.DeleteDTO(loveCount.intValue()); }
 

Result

Share article

sxias