Описание функции
Свести ответы Manager/Web API к одному контракту на границе HTTP: MiniShop3\Router\Response + HttpStatus.
Проблема, которую решает
Сейчас сосуществуют три стиля:
Response::error/success — API controllers / middleware / routes
$ms3->utils->error/success — MS2-массив в domain Controllers (Cart/Order/Customer)
modProcessor->failure/success + raw runProcessor()->getResponse() — import/gallery и куски manager.php
Клиентам и отладке приходится угадывать shape. Fat closures в manager.php обходят контроллеры.
Предлагаемое решение
Разделить слои явно (без big-bang ломания сниппетов):
- Domain (Cart/Order/Customer facades): может оставаться MS2-array
{success,message,data} для совместимости сниппетов/плагинов.
- HTTP boundary (Api controllers, route closures): всегда
Response::*. Запретить raw processor payload в новых mgr REST путях.
- Вынести import/gallery/extra-fields dropdowns из fat closures
manager.php в контроллеры, которые мапят processor/service → Response.
Не оборачивать Response в utils->success и обратно без нужды.
Альтернативные варианты
- Ломать MS2-array в domain сразу — риск для storefront/плагинов.
- Только документация — долг останется в коде.
Критерии приёмки
Дополнительный контекст
Связано с распилом OrdersController (#338) и dual Processors/REST.
Описание функции
Свести ответы Manager/Web API к одному контракту на границе HTTP:
MiniShop3\Router\Response+HttpStatus.Проблема, которую решает
Сейчас сосуществуют три стиля:
Response::error/success— API controllers / middleware / routes$ms3->utils->error/success— MS2-массив в domain Controllers (Cart/Order/Customer)modProcessor->failure/success+ rawrunProcessor()->getResponse()— import/gallery и кускиmanager.phpКлиентам и отладке приходится угадывать shape. Fat closures в
manager.phpобходят контроллеры.Предлагаемое решение
Разделить слои явно (без big-bang ломания сниппетов):
{success,message,data}для совместимости сниппетов/плагинов.Response::*. Запретить raw processor payload в новых mgr REST путях.manager.phpв контроллеры, которые мапят processor/service →Response.Не оборачивать
Responseвutils->successи обратно без нужды.Альтернативные варианты
Критерии приёмки
Response.getResponse()в routes — ноль или с явным ticket follow-up.Router/Response.php).Дополнительный контекст
Связано с распилом
OrdersController(#338) и dual Processors/REST.