Загрузка данных


@Override
public Mono<Context> execute(Context context) {
    log.info(LoggingCodes.BUSINESS_INFO,
        "Шаг: Процесс получения инфо для файла - {}{} с хешем {}",
        context.getFullFileName(),
        context.getFilePathName(),
        context.getFileData().getHash());

    // Пропускаем, если уже на нужном шаге
    if (context.getFilePathName().equals(FILE_AWAITING_UPLOAD_TOKEN)) {
        warnLogExpectedStatus(log, context, FILE_AWAITING_UPLOAD_TOKEN, getClassName());
        return Mono.just(context);
    }

    // Получаем ID файла и продолжаем
    return fetchFileId(context)
        .doOnSuccess(ctx -> log.debug("File ID assigned: {}", ctx.getFileData().getFileId()))
        .onErrorResume(e -> {
            log.warn("Could not fetch file ID, continuing without it", e);
            return Mono.just(context);
        });
}

/**
 * Получает ID файла из SZOF.
 * Если файл не найден - возвращает context без изменений.
 */
private Mono<Context> fetchFileId(Context context) {
    boolean isUploadToSubFolder = context.getFolderId() != null;
    
    return (isUploadToSubFolder 
        ? fetchFileIdFromSubFolder(context)
        : fetchFileIdFromRootFolder(context))
        .flatMap(response -> assignFileId(context, response.getFiles()))
        .defaultIfEmpty(context);
}

/**
 * Получает список файлов из подпапки.
 */
private Mono<FlashResponse> fetchFileIdFromSubFolder(Context context) {
    return szofWebService.getFilesInSubFolderSzofWithFilter(
        context.getFolderId(), 
        context.getFullFileName()
    );
}

/**
 * Получает список файлов из корневой папки.
 */
private Mono<FlashResponse> fetchFileIdFromRootFolder(Context context) {
    return szofWebService.getFilesInFolderSzoFWithFilterParam(
        context.getFullFileName()
    );
}

/**
 * Находит файл по имени и проставляет его ID в контекст.
 */
private Mono<Context> assignFileId(Context context, List<ObjectDto> files) {
    if (files == null || files.isEmpty()) {
        log.debug("No files found for name: {}", context.getFullFileName());
        return Mono.just(context);
    }
    
    files.stream()
        .filter(file -> file.getName().equals(context.getFullFileName()))
        .findFirst()
        .ifPresent(file -> {
            context.getFileData().setFileId(file.getId());
            log.debug("Assigned file ID {} to file {}", file.getId(), file.getName());
        });
    
    return Mono.just(context);
}