# Cabinet `apps/cabinet` - старый личный кабинет и административный монолит на Symfony 5.4. ## Стек - Symfony 5.4. - PHP в общем compose обслуживается контейнером `php82`. - Twig-шаблоны. - Webpack Encore для ассетов. - Doctrine ORM 2 и migrations. - PostgreSQL и отдельное подключение к Bitrix. - Redis cache через Symfony cache pool. - Авторизация через guard authenticator `App\Security\LoginFormAuthenticator`. ## Основные директории - `src/Controller` - страницы кабинета, админка и публичный API. - `src/Bundle` - локальные интеграционные обертки: Bitrix, Infoclinica, Calltouch, SMS, Notisend, Yandex. - `src/Command` - синхронизации и служебные операции. - `src/Entity` - Doctrine entities. - `src/Form` - формы Symfony. - `src/Service` - бизнес-логика. - `templates` - Twig-шаблоны. - `assets` - JS/CSS-ассеты для Webpack Encore. ## Расписание врачей Публичный сайт (список врачей, слоты записи) получает **живое расписание** из Infoclinica через прокси `GET /api/interval`, а не из backend API. Batch-sync ближайших дат (`nearestDate`) идёт через backend cron → PostgreSQL views. Полный разбор: [Расписание врачей: синхронизация и отображение](./doctor-schedule-sync.md). ## Онлайн-консультация Запись на онлайн-приём: `/online-specialists` (требуется авторизация), слоты через `/api/interval?onlineMode=1`, бронирование через Infoclinica webSDK, оплата и видео в `/case-history`. Подробно: [Онлайн-консультация в личном кабинете](./online-consultation.md). Тесты: `make local-online-smoke`, `make cabinet-test`. ## Точки входа nginx направляет `cabinet.sovamed.ru` в `apps/cabinet/public/index.php`. Корневой маршрут `/` обрабатывается `DefaultController::index` и требует `ROLE_USER`. Важные контроллеры: - `SecurityController` - вход и выход. - `DefaultController` - основные страницы кабинета и админские действия. - `PublicAPIController` - публичные API-методы под `/api`. - `InternalAPIController` - внутренние API-методы. - `SpecialistController`, `DepartmentController`, `PageController`, `BannerController` - справочники и CMS-часть. - `WidgetController`, `WidgetFormController` - формы и виджеты. ## Ассеты Команды из `package.json`: ```bash yarn dev yarn watch yarn build ``` В контейнере: ```bash docker exec -it php82 yarn install docker exec -it php82 yarn dev ``` ## Backend-команды Установка зависимостей: ```bash docker exec -it php82 composer install ``` Миграции: ```bash docker exec -it php82 php bin/console doctrine:migrations:migrate ``` Список app-команд: ```bash docker exec -it php82 php bin/console list app ``` ## Важное замечание Внутри `apps/cabinet` есть отдельный старый `docker-compose.yml` под PHP 7.4 и локальный nginx. Основной репозиторий сейчас использует общий compose из `environments` и контейнер `php82`, поэтому старый compose стоит рассматривать как исторический или альтернативный сценарий.