public BoardEditor.BoardEditorBuilder toEditor(){
       return BoardEditor.builder()
                .title(title)
                .content(content);
    }

수정작업을 진행할 때, 매개변수를 받는곳이 변경된다면 문제가 생길수 있다. 직접 toEditor라는 void함수를 만들고 Editor라는 클래스에 빌더작업을 진행합니다.

   public void edit(BoardEditor boardEditor){
        title = boardEditor.getTitle();
        content = boardEditor.getContent();
    }

Board도메인에 내가 작성한 코드에서만 수정이 이뤄지기때문에 무분별한 수정작업이 일어나는것을 방지한다.

만약에 근데 content가 null로 들어가면 업데이트시 기존 content값이 날라가서 테스트가 문제가된다.Client와 협의해서 같은값을 보내도록 작업을 해야한다. 혹은 다른 방법으로 엔티티에서

 @Transactional
    public void edit(Long id, BoardEditRequest editRequest) {
        Board board = boardRepository.findById(id).orElseThrow(IllegalArgumentException::new);

        BoardEditor.BoardEditorBuilder editor = board.toEditor();

        if(editRequest.getTitle() != null){
            editor.title(board.getTitle());
        }
        if(editRequest.getContent() != null){
            editor.content(board.getContent());
        }
      

        board.edit(editor.build());
    }

각각 null이 아닐때 빌더를 각각쪼개 작업을 진행하도록 한다. 이건 몰랐다 setter처럼 사용할수 있다니.. 놀랐다!

해당작업을 editor에 생성자안에 둬서 작업을 진행하면될듯하다~

컨트롤러 TEST

   @PatchMapping("/posts/{id}")
    public void edit(@RequestBody @Valid BoardEditRequest request, @PathVariable("id") Long id) {
        tistoryService.edit(id, request);
    }

작업을 진행할 Controller입니다.