[TIL] 220823

Ariul·2022년 8월 25일
0

Today I Learned 🌳

목록 보기
6/13
post-thumbnail
post-custom-banner

FACT

  • 댓글 기능을 구현했다.
  • 좋아요 기능을 구현했다. 코드가 내가 봐도 지저분하다. 어떻게 고칠 수 있을까 생각해야 해.

FEELING

  • 엔티티만 가지고 테스트를 진행할 수 있는 방법을 배웠었지만! PostMan으로 보는 게 이해하기 좋아서 결국 Service랑 Controller 다 만들고 진행했다. 댓글 기능은 꽤 빠르게 구현했는데, 좋아요 기능 구현하는 게 이렇게 오래 걸릴 줄 몰랐다.
  • 좋아요 기능의 경우, API 명세서를 작성할 때부터 "앗 내가 해 온 방법이랑 로직이 다르네?" 했었다. 아니나 다를까 이해하는 것부터 오래 걸렸고, 기능 구현은 더 오래 걸렸다.
  • 아주 오~랫동안 기능 구현하고, 지저분~~하게 코드를 짠 것만으로도 죄송한데 Git 때문에 새벽 늦게까지 팀원분들을 붙잡고 있었다. 분명 브랜치 잘 따서 작업하고 있다고 생각했는데, main에서 작업하고 있었고, 심지어 그것도 모르고 "잉 이거 왜 변경되어 있지?" 하면서 건드리면 안 되는 파일 건드리고,,,,,,, 심지어 커밋까지 함.🤦‍♀️ 프로젝트 시작하는 날에 항상 노션에 주의 사항이랑 깃헙 규칙들을 정리해두는데, 브랜치 따는 건 어렵지 않다고 생각하고 정리하지 않은 부분에서 실수했다. 따는 건 어렵지 않지만 그 뒤가 어려워.. ㅇ ㅖ..? checkout..? Fetch..? (자괴감 만땅이요)
  • 어제 스프링 실습 팀 선발 결과를 듣고 합류하게 되어 좋았는데, 오늘 여기저기 사고만 쳐서 스프링 실습 팀에 들어가도 되는 걸까..? 걱정이 앞선다. 저번 주엔 팀에 기여하고 있다는 사실에 힘을 얻었는데, 오늘처럼 작업 속도도 느리고 기여는커녕 일을 더 꼬았을 때는 진짜 속상하고 우울해. 아마 당장 금요일부터 시작하는 실습 팀에서의 시간,, 하루하루 이런 기분을 느낄 것만 같은데 마음을 단단히 먹어야겠다.(근데 어떻게? 마음을? 단단히 먹죠? 와구와구)

FINDING

  • 맵(Map)으로 코드 리팩토링 하기

상황: 댓글을 삭제할 때 현재 삭제를 요청하는 사용자와 댓글 작성자가 동일한 인물인지 검증해야 함.

기존 코드
1. 존재하는 댓글인지 확인하기 위해 commentReposiotiry에서 댓글id로 찾고, 존재하지 않으면 익셉션을 던졌다.
2. 작성자id를 찾기 위해 다시 commentRepository에서 댓글id로 댓글을 찾고, 작성자id를 가져왔다.

@Transactional
    public ResponseDto<?> deleteComment(Long commentId, UserDetailsImpl userDetails) {
        commentRepository.findById(commentId).orElseThrow(
                () -> new EntityNotFoundException(ErrorCode.COMMENT_NOT_FOUND));
        Long writerId = commentRepository.findById(commentId).get().getUser().getUserId();
        Long userId = tokenProvider.getUserFromAuthentication().getUserId();
        if (Objects.equals(writerId, userId)) {
            commentRepository.deleteById(commentId);
        } else {
            throw new InvalidValueException(ErrorCode.COMMENT_UNAUTHORIZED);
        }
        return ResponseDto.success("댓글 삭제가 완료되었습니다.");
    }

변경 후 코드
기존 코드 1, 2번을 .map 을 통해 한 번에 해결!

@Transactional
    public ResponseDto<?> deleteComment(Long commentId, UserDetailsImpl userDetails) {
        Long writerId = commentRepository.findById(commentId)
                .map(comment -> comment.getUser().getUserId())
                .orElseThrow(
                        () -> new EntityNotFoundException(ErrorCode.COMMENT_NOT_FOUND));
        Long userId = tokenProvider.getUserFromAuthentication().getUserId();
        if (Objects.equals(writerId, userId)) {
            commentRepository.deleteById(commentId);
        } else {
            throw new InvalidValueException(ErrorCode.COMMENT_UNAUTHORIZED);
        }
        return ResponseDto.success("댓글 삭제가 완료되었습니다.");
    }

FUTURE ACTION

  • 프로젝트 완성하고 제출하기
  • 도전적인
profile
정성과 진심을 담아 흔적을 기록하자💡
post-custom-banner

0개의 댓글