4.1 KiB
title
| title |
|---|
| Карточка врача и локации приёма (Backend) |
Сценарий 2.1: Карточка врача и локации (Specialist + Location)
Бизнес-цель
Пользователю нужна карточка врача (ФИО, медиа, признаки активности, регион и т.д.) вместе с локациями приёма: привязка к отделению, филиалу, режиму online и пр., чтобы выбрать место и сценарий записи.
Точки входа
| Тип | Метод + URL | Класс |
|---|---|---|
| HTTP | GET /specialist/{id} |
SpecialistController::show (id — целое) |
| HTTP | GET /specialist/by/{identifier}?regionId= |
SpecialistController::showBy |
Список врачей: GET /specialist/list — отдельный сценарий фильтрации, тот же репозиторий.
CLI / Messenger для чтения карточки не используются.
Как собирается «агрегат» в рамках Symfony / ORM
Doctrine-сущность App\Entity\Specialist содержит OneToMany на App\Entity\Location (mappedBy: 'specialist', каскады persist/remove). Для API отдельного сервиса-сборщика нет: при GET /specialist/{id} используется param converter и сериализация.
Группы Serializer specialist:detail и from.specialist:read включают в ответ связанные локации (см. атрибуты Groups на поле коллекции локаций в Specialist).
Маршрут showBy:
SpecialistService::getSpecialist($identifier, $regionId);- если
identifierчисловой — выборка поid; - иначе — по
aliasи опциональномуregionIdчерезSpecialistRepository::createFilteredQueryBuilder; - при
null— 404{"error":"not found"}.
Пошаговый алгоритм — GET /specialist/{id}
- Загрузка
Specialistиз БД поid(или 404 на уровне фреймворка, если не найден). JsonResponseс группамиspecialist:detail,from.specialist:read.- При обходе графа сериализатором Doctrine догружает
locations.
Mermaid
sequenceDiagram
participant C as Клиент
participant SC as SpecialistController
participant SS as SpecialistService
participant SR as SpecialistRepository
participant SER as Serializer / ORM
alt По числовому id
C->>SC: GET /specialist/{id}
SC->>SER: serialize(Specialist)
SER->>SER: подтягивание Location
SC-->>C: JSON
else По alias
C->>SC: GET /specialist/by/{identifier}
SC->>SS: getSpecialist
SS->>SR: QueryBuilder
SR-->>SS: Specialist | null
SS-->>SC: entity
SC->>SER: serialize
SC-->>C: 200 или 404
end
Внешние зависимости
| Система | Участие |
|---|---|
| PostgreSQL | данные specialist и location |
| Инфоклиника / Bitrix | не вызываются при чтении карточки |
Обработка ошибок и edge cases
- Не найден по alias —
404с простым телом. - Фото врача: отдельные эндпоинты загрузки картинки (
specialistPicture, upload) — не часть сценария «только чтение».
Ссылки на классы
apps/backend/src/Controller/SpecialistController.phpapps/backend/src/Service/Specialist/SpecialistService.phpapps/backend/src/Entity/Specialist.php,Entity/Location.phpapps/backend/src/Repository/SpecialistRepository.php
Админские CRUD по локациям: LocationController. Карта домена: backend-ddd.md.