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에 생성자안에 둬서 작업을 진행하면될듯하다~
@PatchMapping("/posts/{id}")
public void edit(@RequestBody @Valid BoardEditRequest request, @PathVariable("id") Long id) {
tistoryService.edit(id, request);
}
작업을 진행할 Controller입니다.