# 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 стоит рассматривать как исторический или альтернативный сценарий.
