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