docker-compose up -d
php bin/console doctrine:migrations:migrate
Встроенный сервер:
symfony server:start
Исправить форматирование:
php php-cs-fixer.phar fix
phpstan analyse
------------------ -------- -------- ------ --------------------------
Name Method Scheme Host Path
------------------ -------- -------- ------ --------------------------
_preview_error ANY ANY ANY /_error/{code}.{_format}
app_stmt_store POST ANY ANY /api/stmts
app_stmt_show GET ANY ANY /api/stmts/{id}
app_stmt_update PUT ANY ANY /api/stmts/{id}
app_stmt_index GET ANY ANY /api/stmts/
app_stmt_destroy DELETE ANY ANY /api/stmts/{id}
------------------ -------- -------- ------ --------------------------
Сервис обработки заявок
Общие положения:
- Данное тестовое задание не направлено на полноценную реализацию задачи, сколько на возможность продемонстрировать уровень понимая в таких вопросах, как: PHP, REST API, работа с СУБД, основы безопасности.
- Предпочтительна реализация на Laravel (8+), Yii2 (последняя стабильная версия), Symfony 5+. В качестве СУБД можно использовать MySQL 5.7 или PostgreSQL актуальной стабильной версии
Общее описание:
- Необходимо реализовать систему принятия и обработки заявок пользователей с сайта.
- Любой пользователь может отправить данные по-публичному API, реализованному нами, оставив заявку с каким-то текстом.
- Затем заявка рассматривается ответственным лицом и ей устанавливается статус Завершено.
- Чтобы установить этот статус, ответственное лицо должно оставить комментарий.
- Пользователь должен получить свой ответ по email.
- При этом, ответственное лицо должно иметь возможность получить список заявок, отфильтровать их по статусу и по дате, а также иметь возможность ответить задающему вопрос через email.
Сущности:
Заявка:
- id - Уникальный идентификатор
- name - Имя пользователя - строка, обязательная
- email - Email пользователя - строка, обязательная
- status - Статус - enum(“Active”, “Resolved”)
- message - Сообщение пользователя - текст, обязательный
- comment - Ответ ответственного лица - текст, обязательный, если статус Resolved
- created_at - Время создания заявки - timestamp или datetime
- updated_at - Время ответа на заявку
Endpointы API: Методы API должны быть документированы каким-нибудь средством документации на ваш выбор:
- GET /api/stmts/ - получение заявок ответственным лицом, с фильтрацией по статусу
- PUT /api/stmts/{id}/ - ответ на конкретную задачу ответственным лицом
- POST /api/stmts/ - отправка заявки пользователями системы
- Отправка заявки пользователями системы
curl --location 'http://127.0.0.1/api/stmts' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Ваше Имя",
"email": "[email protected]",
"message": "Ваше сообщение",
"status": "Active"
}'
{
"data": {
"id": 1,
"name": "Ваше Имя",
"email": "[email protected]",
"status": "Active",
"message": "Ваше сообщение",
"comment": null,
"createdAt": "2025-05-12T08:10:19+00:00",
"updatedAt": "2025-05-12T08:10:19+00:00"
}
}
- Ответ на конкретную задачу ответственным лицом
curl --location --request PUT 'http://127.0.0.1/api/stmts/1' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Новое Имя",
"email": "[email protected]",
"message": "Новое сообщение",
"comment": "Комментарий к заявке"
}'
{
"data": {
"id": 1,
"name": "Новое Имя",
"email": "[email protected]",
"status": "Resolved",
"message": "Новое сообщение",
"comment": "Комментарий к заявке",
"createdAt": "2025-05-12T08:08:43+00:00",
"updatedAt": "2025-05-12T08:08:43+00:00"
}
}