기능 구현을 하다가 정리가 잘 되지 않아서 flowchart를 생성해서 흐름을 정리하고 기능 구현을 이어서 했다.
요청이 들어오면 상태에 따라 분리해서 처리
좋아요
/싫어요
recommendLog에 추가 @Transactional
public void reactionControl(LikeRequestDto likeRequestDto) {
Place place = placeRepository.findById(likeRequestDto.getPlaceId()).get();
RecommendLog recommendLog = place.search(likeRequestDto.getUserId());
if (recommendLog == null) {
User user = userRepository.findById(likeRequestDto.getUserId()).get();
if(likeRequestDto.getReaction() == 1){
recommendLog = RecommendLog.builder()
.reaction(Reaction.LIKE)
.build();
//저장된 recommendLog가 없을 때 LIKE 요청이 들어오면 totalLike를 증가
likeIncrease(likeRequestDto.getPlaceId());
} else if (likeRequestDto.getReaction() == 2) {
recommendLog = RecommendLog.builder()
.reaction(Reaction.DISLIKE)
.build();
//저장된 recommendLog가 없을 때 DISLIKE 요청이 들어오면 totalDislike를 증가
dislikeIncrease(likeRequestDto.getPlaceId());
} else {
//예외처리
}
recommendLog.placeUserRecommend(place, user);
} else {
if(likeRequestDto.getReaction() == 0) {
if(recommendLog.getReaction()==Reaction.LIKE){
likeDecrease(likeRequestDto.getPlaceId());
} else if (recommendLog.getReaction()== Reaction.DISLIKE) {
dislikeDecrease(likeRequestDto.getPlaceId());
}
recommendLog.setReaction(Reaction.NONE);
}else if(likeRequestDto.getReaction() == 1){
if(recommendLog.getReaction()==Reaction.NONE){
likeIncrease(likeRequestDto.getPlaceId());
} else if (recommendLog.getReaction()== Reaction.DISLIKE) {
dislikeDecrease(likeRequestDto.getPlaceId());
likeIncrease(likeRequestDto.getPlaceId());
}
recommendLog.setReaction((Reaction.LIKE));
}else if(likeRequestDto.getReaction() == 2) {
if(recommendLog.getReaction()==Reaction.NONE){
dislikeIncrease(likeRequestDto.getPlaceId());
} else if (recommendLog.getReaction()== Reaction.LIKE) {
likeDecrease(likeRequestDto.getPlaceId());
dislikeIncrease(likeRequestDto.getPlaceId());
}
recommendLog.setReaction(Reaction.DISLIKE);
}else {
//예외 처리
}
}
}
프로젝트를 진행할 때 객체 관점에서 설계를 하고 개발을 진행했어야 했는데, DB관점으로 진행하다 보니 어려움이 있었다.
튜터님의 도움을 받아 이제야 슬슬 객체관점으로 보이기 시작했다.
그리고 프로젝트 기획 및 설계단계의 중요성에 대해서 깨닫게 되었다. 기획 단계에서 확실하게 기획을 진행했더라면 반복해서 작업을 하지 않아도 됐는데, 2번 3번 같은 일을 반복해야했다.
이런 경험을 잘 살려서 다음에 프로젝트를 진행할 때는 기획 및 설계단계를 신중하게 마무리 한 후 개발을 시작해야겠다.
어려움이 많아서 너무 힘들지만 어려움을 겪은 만큼 얻는 것도 많은데, 기록을 잘 해둬서 다음에 같은 어려움을 겪지 않도록 해야겠다!
같은걸 몇번이나 반복해야하는 상황이 제일 열받죠 ㅠㅠ TIL 작성할 정신있는거 대단....흑 고생하셨어요 철진님!!! : )