Коррекция бизнес‑логики в обработчике запросов

По этому фрагменту нельзя доказать единственную причину сбоя: неизвестен контракт сервиса. Видно, что NUMBER1/V1 пропускает Authorization, а NUMBER1/V2 заменяет requestJson её результатом.

Короткий ответ

Что ответить на собеседовании

По этому фрагменту нельзя доказать единственную причину сбоя: неизвестен контракт сервиса. Видно, что NUMBER1/V1 пропускает Authorization, а NUMBER1/V2 заменяет requestJson её результатом.

Подробный разбор

Ответ с пояснениями

Условие

В проекте есть функция, реализующая некоторую бизнес‑логику при обработке запросов к API. На вход всегда приходят корректные данные, однако при работе с сервисом SERVICE::NUMBER1 постоянно возникает ошибка. Необходимо проанализировать код, выявить и описать места, где логика реализована неверно.

json::object Session::ProcessRequest(const json::object& body, const SERVICE& service, const API& api)
{
    json::object requestJson = body;
    requestJson["version"] = api;

    switch (service)
    {
        case SERVICE::NUMBER2:
        {
            requestJson["search_type"] = "1";
            requestJson = Authorization(requestJson);
            break;
        }
        case SERVICE::NUMBER1:
        {
            requestJson["search_type"] = "2";

            switch (api)
            {
                case API::V1:
                    break;
                case API::V2:
                    requestJson = Authorization(requestJson);
                    break;
                default:
                    return HandleErrorMessage(fmt::v8::format("Invalid API version for Audio: {}", api));
            }
            break;
        }
        default:
            return HandleErrorMessage(fmt::v8::format("Invalid service type: {}", service));
    }

    if (requestJson.contains("status") && requestJson.at("status").is_string() && requestJson.at("status").as_string() == "error")
        return requestJson;

    return SendMessage(requestJson, config.requestName, config.resultName);
}

Задача: определить, какие части кода приводят к некорректному поведению при обработке SERVICE::NUMBER1, и предложить исправления.

Ответ

По этому фрагменту нельзя доказать единственную причину сбоя: неизвестен контракт сервиса. Видно, что NUMBER1/V1 пропускает Authorization, а NUMBER1/V2 заменяет requestJson её результатом.

Проверьте матрицу service/API: нужен ли NUMBER1/V1 доступ без авторизации и действительно ли search_type равен строке "2". Сопоставьте тело после Authorization с контрактом: если функция возвращает только данные авторизации, присваивание теряет исходные поля.

Отдельно проверьте сериализацию enum api и выбор config.requestName/resultName для NUMBER1. Исправлять нужно подтверждённое несоответствие; добавлять авторизацию во все ветки без знания протокола нельзя. Тесты должны проверить обе версии и передачу ошибок без вызова SendMessage.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее