universe-coder/test-work-symfony
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
Headless Product Catalog API (Symfony 7, Doctrine ORM)
Требования: PHP 8.2+, Composer. Расширения: pdo_sqlite (или pdo_mysql/pdo_pgsql), ctype, iconv, json, mbstring.
Установка и запуск
composer install
# Настройте DATABASE_URL в .env при необходимости (по умолчанию SQLite: var/data.db)
php bin/console doctrine:migrations:migrate --no-interaction
php -S localhost:8000 -t public
API: базовый URL — http://localhost:8000
Ресурс: товар (Product). Поля: id, name, price, status (active|inactive), createdAt.
Эндпоинты
POST /api/products — создать товар (body JSON: name, price, status)
GET /api/products/{id} — получить товар по ID
PUT /api/products/{id} — обновить товар (body JSON: name, price, status, все опциональны)
PATCH /api/products/{id} — то же, что PUT
DELETE /api/products/{id} — удалить товар
Примеры (curl)
# Создать товар
curl -X POST http://localhost:8000/api/products -H "Content-Type: application/json" -d "{\"name\":\"Товар\",\"price\":\"99.99\",\"status\":\"active\"}"
# Получить товар
curl http://localhost:8000/api/products/1
# Обновить товар
curl -X PUT http://localhost:8000/api/products/1 -H "Content-Type: application/json" -d "{\"name\":\"Новое название\",\"price\":\"149.00\",\"status\":\"inactive\"}"
# Удалить товар
curl -X DELETE http://localhost:8000/api/products/1
Тесты
# Создать тестовую БД и применить миграции (нужен pdo_sqlite)
php bin/console doctrine:migrations:migrate --env=test --no-interaction
./vendor/bin/phpunit
Тесты: tests/Unit/Entity/ProductTest.php (unit: сущность и валидация), tests/Functional/ProductApiTest.php (функциональный: POST + GET и GET 404).