#357 Код-ревью асинхронной обработки документов

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

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

@Service
@RequiredArgsConstructor
public class DocumentProcessService {

    private final DocumentRepo repo;

    @Async
    @Transactional
    void revokeDocument(List<Document> docs) {
        List<Integer> id_list = docs.stream().map(Document::getId).collect(Collectors.toList());
        List<Document> list = repo.findAllById(id_list);

        Optional<Document> doc = Optional.empty();
        for (int i = 0; i < list.size(); i++) {
            Integer statusId = list.get(i).getStatusId();
            if (statusId == 4) {
                doc = Optional.of(list.get(i));
                break;
            }
        }

        if (doc.isPresent()) return;

        System.out.println("Processing document id: " + doc.get().getId());

        int processed = process(doc.get());

        if (processed == 1) {
            // Сохраняем документ, если он был обработан
            repo.save(doc.get());
        }
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public int process(Document doc) {
        Integer result = 0;
        doc.getAssistants().forEach(a -> a.setFullName("dismissed"));
        // some logic:
        // if document is processed returns 1, else 0
        return result;
    }
}

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

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