6.1 KiB
Backend API
apps/backend - новое backend API на Symfony 7.3. Оно выступает единым хранилищем данных и публичным API для клиентских приложений.
Где смотреть код
| Зона | Путь | Что внутри |
|---|---|---|
| Контроллеры | apps/backend/src/Controller |
HTTP-эндпоинты, маршруты, security-атрибуты |
| Сущности | apps/backend/src/Entity |
Doctrine ORM mapping, serializer groups |
| Репозитории | apps/backend/src/Repository |
QueryBuilder, фильтры, поиск |
| Сервисы | apps/backend/src/Service |
бизнес-логика, интеграции, общие helpers |
| Команды | apps/backend/src/Command |
консольные sync/import задачи |
| Конфиг | apps/backend/config |
security, routes, Nelmio/Swagger, Doctrine |
Основные разделы документации
- DDD-обзор и бизнес-сущности - контексты предметной области, связь сущностей с контроллерами, сервисами и командами.
- Бизнес-сценарии (use cases) - отдельные статьи по ключевым потокам: JWT, pcode, расписание, запись, синхронизация, фиды.
- CRUD для контентных сущностей - подробный разбор свежей задачи: контроллеры, пагинация,
CrudResponder,ContentRepositoryFilter, sync services. - API и Swagger - список HTTP-методов и где открыть Swagger.
- Потоки данных - запуск, синхронизация, авторизация, расписание.
- Модели данных - ER-схемы и ключевые сущности.
Архитектурный стиль backend
Для новых backend-задач стоит придерживаться таких правил:
- контроллеры должны быть тонкими и маршрутизировать запрос к сервисам/репозиториям;
- фильтрация списков должна жить в repository через
QueryBuilder; - пагинация должна использовать
Pagerfanta, если список отдаётся наружу; - write-поля должны контролироваться serializer groups (
*:write); - read-поля должны контролироваться serializer groups (
*:read); - admin-only операции должны быть закрыты через
#[IsGranted('ROLE_ADMIN')]; - sync/import из внешних источников не нужно смешивать с HTTP CRUD.
Быстрая проверка backend
php bin/console cache:warmup --env=dev
php bin/console debug:router --env=dev
Публичный smoke-test списка:
curl 'http://localhost:8081/news/list?page=1&perPage=2'
Swagger UI:
http://localhost:8081/docs
Стек
- PHP
>=8.2, контейнерphp84. - Symfony 7.3.
- Doctrine ORM 3, DBAL 4, migrations.
- PostgreSQL как основная БД.
- Дополнительные подключения к Bitrix MySQL и базе cabinet.
- Redis через
predis/predis. - JWT-аутентификация через
lexik/jwt-authentication-bundle. - OpenAPI-аннотации и
nelmio/api-doc-bundle. - Symfony Messenger/Scheduler для фоновой логики.
Основные директории
src/Controller- API-контроллеры.src/Dto- DTO для входных данных.src/Entity- Doctrine entities.src/Repository- запросы к БД.src/Service- бизнес-логика и интеграции.src/Command- CLI-команды импорта и синхронизации.src/Messageиsrc/MessageHandler- асинхронные задачи.migrations- миграции БД.
Точки входа
nginx направляет api.sovamed.ru в apps/backend/public/index.php, далее запросы обрабатываются Symfony router. Роуты объявлены PHP attributes в контроллерах.
Примеры групп контроллеров:
UserController- логин, JWT, профиль пользователя, регистрация.SpecialistController- врачи и расписание.PriceListControllerиPriceDepartmentController- цены и категории.ReviewController- отзывы.FilialController,DepartmentController,MedicalCenterController- справочники клиник.InfoclinicaController,CalltouchController- интеграции.
Авторизация
Security настроен как stateless API с JWT. Provider берет пользователя из App\Entity\User по email.
Для защищенных методов используются #[IsGranted('ROLE_USER')] и роли Symfony Security.
Полезные команды
Установка зависимостей:
docker exec -it php84 composer install
Миграции:
docker exec -it php84 php bin/console doctrine:migrations:migrate
Очистка кеша:
docker exec -it php84 php bin/console cache:clear
Генерация swagger-файла, если установлены зависимости:
docker exec -it php84 composer generate-swagger
Запуск тестов:
docker exec -it php84 composer phpunit
Служебные команды
В src/Command есть команды загрузки врачей, филиалов, новостей, услуг, цен, отзывов и кеша расписания. Названия Symfony-команд лучше смотреть через:
docker exec -it php84 php bin/console list app