#311 Код-ревью сервиса создания подтверждающего документа

Компании:
Иннотех
Темы:
SpringТранзакцииКод ревью

Сделать код-ревью:

@Service
public class ConfirmDocService {

    @Autowired
    private ConfirmDocMapper confirmDocMapper;

    @Autowired
    private ConfirmDocRepository confirmDocRepository;

    @Autowired
    private ConfirmDocStateMachineService confirmDocStateMachineService;

    @Autowired
    private StateMachineFactory<DocStatusState, DocStatusEvent> confirmDocStateMachineFactory;

    @Transactional
    public ConfirmDocDto createConfirmDoc(ConfirmDocDto confirmDocDto) {
        ConfirmDoc confirmDoc = confirmDocMapper.toEntity(confirmDocDto);

        StateMachine<DocStatusState, DocStatusEvent> sm =
                confirmDocStateMachineFactory.getStateMachine();

        sm.getExtendedState()
                .getVariables()
                .put("CONFIRM_DOC_TO_BE_SAVED", confirmDoc);

        sm.start();

        confirmDoc.setDocStatusId(sm.getState().getId());

        ConfirmDoc savedConfirmDoc = saveOrUpdate(confirmDoc);

        return confirmDocMapper.toDto(savedConfirmDoc);
    }

    @Transactional
    public ConfirmDoc saveOrUpdate(ConfirmDoc confirmDoc) {
        if (confirmDocRepository.findAll()
                .stream()
                .filter(it -> it.getId().equals(confirmDoc.getId()))
                .count() == 1) {

            ConfirmDoc confirmDocFromDb =
                    confirmDocRepository.findById(confirmDoc.getId()).orElse(null);

            ConfirmDoc updatedConfirmDoc =
                    confirmDocMapper.update(confirmDocFromDb, confirmDoc);

            return confirmDocRepository.save(updatedConfirmDoc);
        } else {
            return confirmDocRepository.save(confirmDoc);
        }
    }
}

Разбор вопроса

Ментор
Ответь как на реальном собеседовании. Я задам уточняющие вопросы, а затем сравню твой ответ с эталонным и покажу точность в %.
Войди, чтобы начать диалог Ментор ведёт диалог по текущему вопросу и учитывает предыдущие сообщения.
Войти