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