🐛 [Fix] Flow 생성 시 participants, totalPlayTime NPE 방지 및 생성/업데이트 중복 로직 제거#213
🐛 [Fix] Flow 생성 시 participants, totalPlayTime NPE 방지 및 생성/업데이트 중복 로직 제거#213
Conversation
|
DTO에 기본값을 설정하는 건 그닥 좋지 않아보이는데 플로우 생성 시 인원 수를 어떻게 할 건지 논의해봐야할 듯 하네요 |
값이 null로 들어왔을 때 초기화하는 로직을 추가하기보다 이 방법이 깔끔하다고 생각했는데 |
관련해서 조금 찾아보니까 자바에서는 보통 DTO에서는 값만 받고 서비스 레이어에서 디폴트 값을 적용하는 방식이 일반적이더라고요! 제가 요즘 코틀린으로 개발하고 있어서 이런 부분을 깊게 생각하지 못했네요😅 |
|
늦어서 죄송합니다...! 조별 인원은 옵션으로 받을 예정이라 DB단에서부터 수정들어가야할 것 같습니다. |
현재 buildFlow 메서드에서 아래와 같이 Flow.builder()를 통해 객체를 생성하고 있습니다. => Builder에서 participants() 값을 명시적으로 설정하고 있기 때문에 엔티티에 디폴트값을 설정하더라도 request.getParticipants()값이 우선시됩니다. => 제 생각에는 FlowConverter에서 빌더 패턴으로 객체를 만드는 메서드가 buildFlow 메서드로 통일되어 있으니, 지금은 서비스 단에서 일반화하고 있는데, DTO → Entity 변환 책임은 converter단에서 처리하는게 더 적절한거 같다고 생각합니다 |
📍 PR 타입 (하나 이상 선택)
❗️ 관련 이슈 링크
Close #211
📌 개요
participants값을 지정해주지 않으면 null로 저장되어 추후 조회 로직에서 에러가 발생하는 것이었습니다.[예외 로그]
🔥[6/19 수정]🔥
대신, 실제 NPE가 발생했던 플로우 추천 로직 내에서 participants가 null일 경우를 예외 처리해주었습니다.
(+ totalPlayTime 역시 같은 문제가 발생할 수 있어 함께 null 체크를 추가했습니다.)
[이전 수정]
❗f41224dd57dd1f87e24cbfa5c1c5789c45c76de7 원래는 DTO에서 직접 기본값을 초기화했었는데, 찾아보니 자바에서는 보통 DTO는 단순히 값을 전달하는 용도로만 사용하고, 디폴트값 처리는 서비스 계층에서 수행하는 게 일반적인 패턴이라고 하더라구요.
[리팩토링]
플로우 생성(
postFlow()) 을 살펴보니 내부 로직이 길어 가독성이 떨어져, updateFlow()와 중복되는 부분을 별도의 private 메서드로 모듈화하였습니다. ed65950FlowConverter의
toFlow()와toUpdateFlow()가 거의 동일한 로직을 포함하고 있어 중복 코드를buildFlow()메서드로 분리하였습니다. 이를 통해 생성과 업데이트 시 ID 유무에 따라 구분하여 사용할 수 있도록 개선했습니다. ac610b2🔁 변경 사항
📸 스크린샷
👀 기타 더 이야기해볼 점
✅ 체크 리스트