@Override
public CodeReviewDto codeReview(Long memberId, CreateCodeReviewDto dto) {
isNew(dto.getProblemStatusId());
CodeReview codeReview = repository.save(
CodeReview.write(memberId, dto)
);
return new CodeReviewDto(codeReview);
}
private void isNew(Long problemStatusId) {
try {
codeReviewQueryUseCase.byProblemStatusId(problemStatusId);
throw new InvalidDuplicateException("이미 등록된 게시물");
} catch (NotFoundException e) {}
}
isNew 에서 호출하고있는 byProblemStatusId
**메서드도 별도의 transaction 이 존재하는데
설정값을 기본으로 할경우
하위 transaction 이 상위에 흡수되
한번이라도 오류가 발생하면 비즈니스 로직이 완료된 뒤 rollback 된다고 한다.**
@Service
@Transactional(readOnly = true, propagation = REQUIRES_NEW)
@RequiredArgsConstructor
public class CodeReviewQueryService implements CodeReviewQueryUseCase {