🛠 Phase 3 · Реализация недостающих backend endpoints¶
Цель: Закрыть 4 заглушки (booking-svc, chat-svc, analytics-svc,
platform-svc) и довести их до готовности к подключению с мобильного фронта.
📐 Архитектура¶
Все микросервисы — FastAPI + Postgres (через PostgREST/Supabase) + Redis (cache, pub-sub).
Общая инфра в packages/arkhyz-shared/ (auth middleware, db pool, http client).
mobile (tourist-app) → Caddy → kong → {auth, booking, chat, catalog, resort, rtc, analytics, platform}
↓
Postgres (Supabase) + Redis + ClickHouse (analytics)
🎯 Порядок работ (~5-7 рабочих дней)¶
Sprint 1 · booking-svc (~2 дня) — критичный путь CJM #1, #3, #4¶
Endpoints:
POST /api/v1/bookings/create — создать бронь (hotel/tour/restaurant/transfer/instructor)
GET /api/v1/bookings/me — мои брони (с фильтрами по типу/статусу/дате)
GET /api/v1/bookings/:id — детали брони
PATCH /api/v1/bookings/:id — обновить (даты, гости, заметки)
POST /api/v1/bookings/:id/cancel — отмена (с reason)
POST /api/v1/bookings/:id/confirm — подтверждение провайдером
POST /api/v1/payments/process — инициировать оплату (метод + сумма)
POST /api/v1/payments/:id/refund — возврат
GET /api/v1/payments/me — история платежей
GET /api/v1/payments/methods — мои карты + альтернативы (СБП/Apple Pay/wallet)
POST /api/v1/payments/methods — добавить карту (через токенизацию платёжки)
DELETE /api/v1/payments/methods/:id
POST /api/v1/trip-booking/aggregate — агрегатор поверх booking-types
Таблицы Postgres:
- bookings (id, user_id, type, item_id, dates, guests, status, total, created_at, ...)
- payments (id, booking_id, method, amount, status, txn_id, created_at)
- payment_methods (id, user_id, brand, last4, exp, default, token)
Внешние интеграции: - ЮKassa SDK или CloudPayments — токенизация + 3D-Secure - СБП — через Tinkoff Open Banking API
Acceptance:
- BookingScreen.tsx → реальные /bookings/create без DEMO
- PayScreen.tsx → реальный /payments/process с redirect на 3D-Secure
- PaymentSuccess.tsx → polls /bookings/:id пока статус = paid
Sprint 2 · chat-svc (~1.5 дня) — CJM #4, #7, #9¶
Endpoints REST:
GET /api/v1/chats/me — мои диалоги (с unread, last_msg, pinned)
POST /api/v1/chats/start — начать чат с пользователем (deduped)
GET /api/v1/chats/:thread_id — детали + список участников
PATCH /api/v1/chats/:thread_id — pin / mute / archive
DELETE /api/v1/chats/:thread_id — выйти
GET /api/v1/messages/:thread_id — пагинация (cursor)
POST /api/v1/messages — отправить (text/image/voice)
PATCH /api/v1/messages/:id — редактировать
DELETE /api/v1/messages/:id — удалить
POST /api/v1/messages/:id/read — mark as read
WebSocket каналы (через rtc-svc):
- chat_:thread_id — новые сообщения, typing, presence
- realtime:user_:id — общие нотификации (новый чат, упоминания)
Таблицы:
- chat_threads (id, type=p2p/group/support, participants[], created_by, created_at, ...)
- chat_messages (id, thread_id, sender_id, body, attachments[], reply_to_id, sent_at, read_by[])
Acceptance:
- ChatsScreen.tsx → real /chats/me
- ChatThreadScreen → real /messages/:thread + WS subscription
- HotelDetail/Booking «Чат с поставщиком» → real chatsApi.startWith(provider_id)
Sprint 3 · platform-svc (~1 день) — push, config, feature flags¶
Endpoints:
GET /api/v1/platform/config — env-конфиг для клиента (фича-флаги, версии, URL)
GET /api/v1/platform/me — feature-flags для текущего юзера
POST /api/v1/push/register — token + platform (ios/android/web)
DELETE /api/v1/push/register — отписать устройство
PATCH /api/v1/push/preferences — что отправлять (booking/queue/friend/marketing)
GET /api/v1/push/preferences
POST /api/v1/push/send — внутренний (admin) — отправить рассылку
POST /api/v1/push/test — отправить тест себе (для PushSettings.tsx)
Внешние: - OneSignal SDK (или собственный FCM/APNs клиент)
Таблицы:
- push_devices (id, user_id, token, platform, app_version, last_seen)
- push_preferences (user_id, kind, enabled)
- feature_flags (key, condition, payload)
Acceptance:
- PushSettingsScreen → real /push/preferences
- iOS/Android push registration через lib/push.ts
Sprint 4 · analytics-svc (~1 день) — события + метрики¶
Endpoints:
POST /api/v1/events — отправить событие (screen_view, click, conversion)
POST /api/v1/events/batch — пакетная отправка (для offline-сбора)
GET /api/v1/metrics/me — мои метрики (визиты, потрачено, бейджи)
GET /api/v1/metrics/funnel — воронка для админ-панели
Хранилище: - ClickHouse (events table) — fast time-series для админки
Acceptance:
- lib/analytics.ts (новый) — простой track(event, props) API
- Подключить в ключевые точки: open-screen, button-click, booking-success, payment
Sprint 5 · WebSocket каналы в rtc-svc (~0.5 дня)¶
Сейчас работает:
- realtime:user_:id — общие нотификации
- friends_:userid — live-локации друзей
- lift_queues — live-очереди подъёмников
Дополнить:
- chat_:thread_id — новые сообщения в чате
- tracking_:session_id — share GPS-трека в реальном времени (для друзей)
- provider_:provider_id — нотификации провайдеру (новая бронь, отзыв)
Sprint 6 · Доработка resort-svc (~0.5 дня)¶
Уже реализовано большинство, но проверить:
- /skipass/me/issue — реальная покупка пасса (сейчас только /issue-demo)
- /recommendations/plan-day — корректность ML-логики
- /badges/me — корректное вычисление progress_pct
📅 Ориентировочный график¶
| Неделя | Sprint | Сервис | Готово |
|---|---|---|---|
| 1 (пн-ср) | Sprint 1 | booking-svc |
bookings + payments + методы |
| 1 (чт-пт) | Sprint 2 | chat-svc |
REST + WS интеграция с rtc |
| 2 (пн) | Sprint 3 | platform-svc |
push + config + feature flags |
| 2 (вт) | Sprint 4 | analytics-svc |
events + ClickHouse |
| 2 (ср) | Sprint 5+6 | rtc-svc + resort-svc |
dop-каналы, real skipass |
Итого: ~5-7 рабочих дней до полной готовности backend.
⏭ Phase 4 · Full integration (после Phase 3)¶
После готовности backend:
- Подключение real-API в tourist-app (поэкранно, по 5 за итерацию):
- CJM #1: HotelDetail → Booking → Pay → Success → Bookings
- CJM #2: Snow → Lifts → Tracking → SkiStories
- CJM #3: Catalog → Detail → Booking → Pay
- CJM #4: Instructors → Detail → MyBookings → Chat
- CJM #5: SlopeFood/Rentals → Cart → Order → MyOrders
- CJM #6: Stories → User → Friends-live → Map3D
- CJM #7: Chats → Thread → Voice/Video
- CJM #8: Roles → Provider Dashboard → Form
-
CJM #9: Provider → Bookings → Confirm → Chat
-
WebSocket подписки включаются на каждом релевантном экране.
-
Native build (Capacitor) — iOS + Android.
-
TestFlight + Google Play closed beta — обратная связь.
-
Production launch — публикация в Store.
Срок Phase 4: ~5-7 рабочих дней.
🎯 Старт: Sprint 1 — booking-svc¶
Начинаю прямо сейчас: 1. Скелет FastAPI приложения (роутеры, схемы, db dependency) 2. Postgres миграции (bookings, payments, payment_methods) 3. Endpoints CRUD для bookings 4. Payment-flow (заглушка — без реальной токенизации, чтобы не блокировать UI) 5. Подключение в Caddy + docker-compose 6. Smoke-тест из tourist-app