План тестирования уведомлений по всем ролям¶
Тестовые пользователи (SMS-код везде 1111)¶
| Роль | Телефон | UUID | Имя |
|---|---|---|---|
| admin | +79990000010 | aaaaaaaa-0000-0000-0000-000000000010 | Демо Администратор |
| admin | +79773266909 | fce4e9e3-5d86-441d-960b-95c721b2d1e5 | Roma VV |
| hotelier | +79990000003 | … | Демо Отельер |
| tour_operator | +79990000004 | … | Демо Турагент |
| transfer_provider | +79990000005 | … | Демо Трансфер |
| restaurateur | +79990000006 | … | Демо Ресторатор |
| instructor | +79990000007 | … | Демо Инструктор |
| tourist | +79990000001 | 850d5b6d-0ad6-53e6-97dd-ca779de164ff | Алиса |
| tourist | +79990000002 | 6d478b3f-da26-5e31-a8b2-95388de74f82 | Борис |
События которые должны генерировать уведомления¶
Booking lifecycle (все 5 типов: hotel/tour/transfer/restaurant/instructor)¶
- ✅ Tourist создал → notify TOURIST + PROVIDER
- ✅ Provider/Admin подтвердил → notify TOURIST
- ✅ Tourist оплатил (ЮKassa webhook) → notify TOURIST + PROVIDER
- ✅ Tourist отменил → notify PROVIDER
- ✅ Provider отменил → notify TOURIST
- ✅ Refund выполнен → notify TOURIST + PROVIDER
- ✅ Reminder за 24h → notify TOURIST
Chats¶
- ✅ Сообщение в чате → notify получателю (push если в фоне)
- ✅ Пропущенный звонок → notify
Stories (туристский UGC)¶
- ✅ Лайк на истории → notify автору
- ✅ Комментарий к истории → notify автору
- ✅ Подписка на пользователя → notify на кого подписались
- ✅ Story создана → notify админу/модератору (для модерации)
Comments / Reviews¶
- ✅ Отзыв на отель/тур → notify владельцу
- ✅ Ответ на отзыв → notify автору отзыва
SOS (критично)¶
- ✅ POST /sos/ → notify спасателям + админам
Платежи¶
- ✅ Успешная оплата → notify TOURIST + PROVIDER
- ✅ Неудачная оплата → notify TOURIST
- ✅ Возврат → notify TOURIST + PROVIDER
Друзья / соц¶
- ✅ Друг рядом на склоне → notify
- ✅ Заявка в друзья → notify
Каналы доставки¶
Все события идут по 4 каналам (если разрешены в user_notification_channels):
1. In-app — public.notifications → колокольчик в SPA
2. WebSocket — Redis publish → real-time без F5
3. Telegram — если у юзера привязан telegram_chat_id
4. Email — если у юзера реальный email (не @phone.arkhyz.local)
Тест-план (5 фаз)¶
Фаза 1 — Tourist booking E2E (есть)¶
infra/e2e-bookings.py — 3 типа × 5 событий = 15 нотификаций
Фаза 2 — Provider notifications (НОВОЕ)¶
- Hotelier создаёт отель через UI
- Tourist бронирует → hotelier получает «Новая бронь #1234»
- Hotelier confirm/cancel → tourist получает
- Скрипт:
infra/e2e-provider.py
Фаза 3 — Stories + likes + comments (НОВОЕ)¶
- Tourist Алиса создаёт story
- Tourist Борис лайкает → Алиса получает
- Борис комментирует → Алиса получает
- Алиса отвечает на комментарий → Борис получает
- Скрипт:
infra/e2e-stories.py
Фаза 4 — Chats (НОВОЕ)¶
- Алиса пишет в чат с отелем → hotelier получает
- Hotelier отвечает → Алиса получает
- Звонок принят/пропущен → notify
Фаза 5 — Reviews + SOS (НОВОЕ)¶
- Алиса оставляет отзыв на отель → hotelier получает
- Hotelier отвечает → Алиса получает
- Алиса жмёт SOS → admin + спасатели получают
Реализация¶
Каждая фаза — отдельный py-скрипт + хук в соответствующем svc:
- bookings → notify провайдера (нужен provider_id + user_id mapping)
- stories → notify автора (новый файл services/stories-svc/app/notify.py)
- chats → notify получателя (хук в chat-svc/app/routers/chats_native.py:messages_send)
- reviews → notify автора и владельца
- sos → notify админов и спасателей (хук в rtc-svc/app/routers/sos_native.py:sos_create)