test-vovo
Описание
Тестовое задание для VOVO
Языки
- Blade50,2%
- PHP46,6%
- Dockerfile2,4%
- Shell0,3%
- JavaScript0,3%
- CSS0,2%
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
README.md
Тестовое задание для VOVO
Информация по решению
PHP 8.5, PostgreSQL, Laravel 12
Реализован API для поиска и фильтрации продуктов.
- Включен строгий режим для моделей
- Добавлены модели Product и Category с отношениями
- Созданы миграции для таблиц categories и products с индексами
- Для поля name таблицы products добавлен специальный GIN-индекс
- Добавлены фабрики и сидеры для тестовых данных
- Реализован API endpoint GET /api/products/search с поддержкой фильтрации:
- Реализован регистронезависимый поиск по названию товара
- Реализован enum ProductSort для типизации сортировки
- Создан ProductSearchService для бизнес-логики поиска
- Добавлены DTO для передачи параметров поиск в ProductSearchService с автоматизацией создания их Request
- Добавлены Form Request для валидации передаваемых данных
- Добавлены API Resources для структурирования возвращаемых данных
- Из дефолтного ответа API Resources удален ключ meta.links
- Написаны feature-тесты для проверки функциональности
- Добавлен атрибут TestedBy для связи контроллера с тестами
- Код отформатирован в соответствие с правилами стандарта PER2
- Код проверен PHPStan level10
Задача
Реализовать поиск по товарам с фильтрами
Реализовать HTTP-endpoint (например, GET /api/products), который возвращает список товаров с возможностью фильтрации и сортировки.
У товара должны быть поля:
- id
- name (string, индекс по LIKE или FULLTEXT если захочешь)
- price (decimal)
- category_id (foreign key на таблицу categories)
- in_stock (boolean)
- rating (float, 0–5)
- created_at
- updated_at
Фильтры (через query-параметры):
- q — поиск по подстроке в name
- price_from, price_to
- category_id
- in_stock (true/false)
- rating_from
Сортировка: параметр sort с допустимыми значениями: price_asc, price_desc, rating_desc, newest.
Обязательна пагинация.