Мобилка падает на парсинге ответа. Только у части пользователей. У остальных — всё ок.
📦 Задание
Эндпоинт /api/products/available отдаёт товары в наличии. Бэкенд не трогали месяц. Внезапно прилетает баг от мобильной команды: «приложение крашится при разборе items, иногда это массив, иногда какой-то объект с числовыми ключами». На стейджинге не воспроизводится — там тестовые данные, все товары в наличии.
// src/Api/ProductController.php
class ProductController
{
public function __construct(
private readonly ProductRepository $repository,
) {}
public function available(): JsonResponse
{
$products = $this->repository->findAll();
$available = array_filter(
$products,
fn (Product $p): bool => $p->getStock() > 0,
);
return new JsonResponse([
'items' => $available,
'count' => count($available),
]);
}
}
🔹 Задачи
— Объяснить, почему форма ответа items зависит от данных: то массив, то объект
— Объяснить, при каком наборе товаров json_encode отдаёт {"0":…, "2":…} вместо […]
— Исправить так, чтобы items гарантированно сериализовался как JSON-массив
Ставьте → 🔥 если нравится формат. Если нет → 🌚
💬 Решения пишите в комменты под спойлер — сравним подходы.