147 lines
4.0 KiB
Markdown
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
|
|
```
|