3.6 KiB
3.6 KiB
title
| title |
|---|
| SMS-уведомления и сущности Record / AlertSms (Backend) |
Сценарий 3.2: Уведомления (SMS), связь Record ↔ AlertSms
Бизнес-цель
После записи к врачу пациент может получить SMS (напоминание, код подтверждения и т.п.). В модели данных предусмотрено локальное хранение факта записи (Record) и ответа SMS-провайдера (AlertSms) в связке один-к-одному.
Точки входа (фактический код)
| Компонент | Назначение |
|---|---|
App\Entity\Record |
Телефон, specialistId, hash, JSON-блоб reserve, время создания. |
App\Entity\AlertSms |
Ссылка на Record, время, текст/ответ провайдера. |
Sms4bClientService, SmsruClientService |
Реализации SmsClientServiceInterface (HTTP-клиенты). |
Поиск по дереву apps/backend/src: вызовов Sms4bClientService / SmsruClientService или RecordRepository из контроллеров и обработчиков не обнаружено. То есть интеграция SMS заложена на уровне инфраструктуры/сервисов, но не подключена к HTTP-сценарию анонимной записи в этом репозитории на момент документирования.
Как бы выглядел целевой flow (рекомендуемая логика)
- После успешного ответа MIS о записи backend создаёт
Recordс телефоном и сериализованнымreserve. - Асинхронно или синхронно вызывается SMS-клиент с текстом шаблона.
- Ответ провайдера сохраняется в
AlertSms, линкуется черезRecord::setAlertSms(DoctrineOneToOne).
Mermaid (целевая схема — не полностью реализована в коде)
sequenceDiagram
participant API as Backend API
participant DB as PostgreSQL
participant SMS as SMS шлюз (Sms4b / sms.ru)
API->>DB: persist Record
API->>SMS: отправить SMS
SMS-->>API: ответ / статус
API->>DB: persist AlertSms ↔ Record
Внешние зависимости
| Система | Статус в коде |
|---|---|
| Sms4b / sms.ru | Классы-клиенты есть |
| PostgreSQL | Таблицы под Record / AlertSms предполагаются миграциями |
Обработка ошибок и edge cases
- Нет вызова SMS — риск «тихого» пропуска уведомления; фронт не может отличить по API, если нет явного шага.
- Повторная отправка — нужна идемпотентность по
hashзаписи (поле вRecord) — в коде не просматривалось.
Ссылки на классы
apps/backend/src/Entity/Record.phpapps/backend/src/Entity/AlertSms.phpapps/backend/src/Repository/RecordRepository.php,AlertSmsRepository.phpapps/backend/src/Service/Client/Sms4bClientService.phpapps/backend/src/Service/Client/SmsruClientService.php
Модель данных: data-model.md. Сценарий записи в MIS: anonymous-reserve.md.