[TIL] 20220707 캠프 82일차

C____JIN·2022년 7월 7일
0

TIL 1.0

목록 보기
43/78
post-custom-banner

2차 프로젝트

추천기능 (좋아요 / 싫어요)

  • Flowchart

    기능 구현을 하다가 정리가 잘 되지 않아서 flowchart를 생성해서 흐름을 정리하고 기능 구현을 이어서 했다.

요청이 들어오면 상태에 따라 분리해서 처리

  • recommendLog에 없는 상태라면
    • 새롭게 좋아요/싫어요 recommendLog에 추가
  • 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번 같은 일을 반복해야했다.

이런 경험을 잘 살려서 다음에 프로젝트를 진행할 때는 기획 및 설계단계를 신중하게 마무리 한 후 개발을 시작해야겠다.

어려움이 많아서 너무 힘들지만 어려움을 겪은 만큼 얻는 것도 많은데, 기록을 잘 해둬서 다음에 같은 어려움을 겪지 않도록 해야겠다!

profile
개발 블로그🌐 개발일지💻
post-custom-banner

1개의 댓글

comment-user-thumbnail
2022년 7월 8일

같은걸 몇번이나 반복해야하는 상황이 제일 열받죠 ㅠㅠ TIL 작성할 정신있는거 대단....흑 고생하셨어요 철진님!!! : )

답글 달기