Files

3.6 KiB

title
title
SMS-уведомления и сущности Record / AlertSms (Backend)

Сценарий 3.2: Уведомления (SMS), связь RecordAlertSms

Бизнес-цель

После записи к врачу пациент может получить 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 (рекомендуемая логика)

  1. После успешного ответа MIS о записи backend создаёт Record с телефоном и сериализованным reserve.
  2. Асинхронно или синхронно вызывается SMS-клиент с текстом шаблона.
  3. Ответ провайдера сохраняется в AlertSms, линкуется через Record::setAlertSms (Doctrine OneToOne).

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.php
  • apps/backend/src/Entity/AlertSms.php
  • apps/backend/src/Repository/RecordRepository.php, AlertSmsRepository.php
  • apps/backend/src/Service/Client/Sms4bClientService.php
  • apps/backend/src/Service/Client/SmsruClientService.php

Модель данных: data-model.md. Сценарий записи в MIS: anonymous-reserve.md.