Files
docs/flows.md
T

147 lines
4.0 KiB
Markdown

# Потоки данных и сценарии
## Запуск окружения
```mermaid
flowchart TB
make[make dev / make up]
env[.env + .env.local]
networks[docker-compose.networks.yml]
dbs[docker-compose.dbs.yml]
apps[docker-compose.apps.yml]
dev[docker-compose.dev.yml]
monitoring[docker-compose.monitoring.yml]
make --> env
make --> networks
make --> dbs
make --> apps
make --> dev
make -->|make up| monitoring
networks --> public[public-network]
networks --> internal[internal-network]
dbs --> pgsql[pgsql]
dbs --> redis[redis]
apps --> nginx[nginx]
apps --> php84[php84 backend]
apps --> php82[php82 cabinet]
apps --> nextjs[nextjs sovamed]
dev --> nodejs[nodejs helper]
```
## Синхронизация справочников
```mermaid
sequenceDiagram
participant Cron as cron / developer
participant Command as Symfony Command
participant Bitrix as Bitrix / external source
participant MIS as Infoclinica / MIS
participant Service as Domain Service
participant Repo as Repository
participant DB as PostgreSQL
Cron->>Command: php bin/console app:...
Command->>Bitrix: получить контент/врачей/отзывы
Command->>MIS: получить расписание/филиалы/цены
Bitrix-->>Command: external data
MIS-->>Command: external data
Command->>Service: нормализовать и применить
Service->>Repo: upsert/update
Repo->>DB: persist + flush
```
## Получение расписания врача
```mermaid
sequenceDiagram
participant Client
participant Controller as SpecialistController
participant Service as SpecialistService
participant Cache as ScheduleCacheService
participant MIS as InfoclinicaClientService
participant DB as PostgreSQL
Client->>Controller: GET /specialist/schedule
Controller->>Service: getSchedule(...)
Service->>Cache: getCachedSchedule(query)
alt cache hit
Cache-->>Service: cached schedule
else cache miss
Service->>MIS: getSchedule(...)
MIS-->>Service: schedule
Service->>Cache: saveSchedule(...)
end
Service->>DB: при необходимости read/write Schedule
Service-->>Controller: расписание
Controller-->>Client: JSON
```
## Анонимная запись
```mermaid
sequenceDiagram
participant Client
participant API as Controller
participant Service as SpecialistService / Infoclinica Rest
participant MIS as MIS
participant DB as Record Repository
participant SMS as SMS service
Client->>API: POST anonymous-reserve
API->>Service: подготовить reserve payload
Service->>MIS: создать запись
MIS-->>Service: результат записи
Service->>DB: сохранить Record
Service->>SMS: отправить уведомление при необходимости
Service-->>API: success + record data
API-->>Client: JSON
```
## Авторизация backend по JWT
```mermaid
flowchart LR
login[POST /user/login] --> dto[UserLoginDto]
dto --> auth[AuthenticationService]
auth --> user[(User)]
auth --> password[password check]
password --> jwt[JWTTokenManager]
jwt --> response[token + user]
request[Защищенный request] --> firewall[JWT firewall]
firewall --> decoder[JWTDecoderService]
decoder --> currentUser[Current User]
```
## Авторизация cabinet через сессию
```mermaid
flowchart LR
login["POST /login"] --> authenticator["LoginFormAuthenticator"]
authenticator --> provider["User provider by email"]
provider --> user[(User)]
authenticator --> session["Session cookies"]
session --> protected["ROLE_USER pages"]
logout["GET /logout"] --> clear["Удаление cookies"]
```
## Документация VitePress
```mermaid
flowchart LR
makeDocs[make docs]
compose[docker-compose.docs.yml]
node[node:24-alpine]
npm[npm install]
vitepress[VitePress dev server]
browser[http://localhost:5173]
makeDocs --> compose
compose --> node
node --> npm
npm --> vitepress
vitepress --> browser
```