#311 Code Review of a Confirmation Document Creation Service

Companies:
Innotech
Themes:
SpringTransactionsCode Review

Perform a code review:

@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);
        }
    }
}

Question review

Mentor
Answer as you would in a real interview. I’ll ask follow-up questions, then compare your answer with the reference answer and show your accuracy as a %.
Sign in to start the dialogue The mentor keeps the context of the current question and your previous messages.
Sign in