Перейти к содержанию

🔌 Phase 2 · API Integration · мобильное приложение

Цель: заменить все DEMO-fallback на real-API данные с микросервисов (auth-svc, catalog-svc, booking-svc, chat-svc, rtc-svc, resort-svc, platform-svc, analytics-svc).


📊 Текущее состояние API

Сервис Порт Endpoints Статус
auth-svc 9101 /auth/phone/*, /users/*, /me ✅ работает
booking-svc 9102 /bookings/*, /trip-booking/*
catalog-svc 9103 /hotels/*, /tours/*, /restaurants/*, /transfers/*, /instructors/*
resort-svc 9104 /resort/lifts, /snow, /weather, /webcams, /badges/*, /leaderboard/*, /tracking/*, /skipass/*, /recommendations/*, /targets/*, /friends/*, /rentals/*, /slope/*, /instructors-market/* ⚠️ роутеры есть, надо проверить data
chat-svc 9105 /chats/*, /messages/*
rtc-svc 9106 /ws/realtime?channel=...
analytics-svc 9107 /analytics/*
platform-svc 9108 /platform/*

Этап 2.1 · Типизация (~2 часа)

Цель: типы TypeScript из FastAPI OpenAPI, чтобы IDE подсказывала и не ловить runtime-ошибки.

Действия:

  1. Скрипт scripts/gen-api-types.sh — pull openapi.json с каждого сервиса
  2. npx openapi-typescripttourist-app/src/types/api.gen.ts
  3. Обновить lib/api.ts — использовать сгенерированные типы

Этап 2.2 · Замена DEMO → real-API (~3 дня)

Идём по приоритету (CJM #1 первый):

2.2.1 · Каталоги (CJM #3)

  • HotelsScreen — уже подключен (с DEMO-fallback)
  • RestaurantsScreen, ToursScreen, TransfersScreen, InstructorsScreen (CatalogScreens.tsx) — подключены
  • Действие: добавить ретраи + skeleton loaders + error boundaries

2.2.2 · Booking flow (CJM #1)

  • HotelDetail → real /hotels/:id
  • BookingScreenPOST /bookings/create
  • PayScreenPOST /payments/process ⚠️ новый endpoint нужен в booking-svc
  • PaymentSuccess → load real booking via state.booking.id
  • BookingsScreen → real /trip-booking/my-bookings ✅ (с DEMO-fallback)

2.2.3 · Tracking + Lifts live (CJM #2)

  • LiftsScreen — REST /resort/lifts ✅, WS /ws/realtime?channel=lift_queues ⚠️ нужно подключить
  • LiftDetailScreen/resort/lifts/:id (DEMO-fallback)
  • TrackingScreenPOST /tracking/sessions/start, PATCH /tracking/sessions/:id (batch points)
  • TrackingHistoryScreen, TrackingDetailScreen — REST ✅ (DEMO-fallback)
  • WS подписка на tracking_user_:id для live-метрик

2.2.4 · Inbox + push (CJM #7)

  • InboxScreen/notifications/me (через lib/inbox.ts) ✅
  • lib/inbox.ts WS на realtime:user_:id
  • PushSettingsScreenPOST /push/register, PATCH /push/preferences
  • Service Worker для web push

2.2.5 · Friends-live + Recommendations (CJM #6)

  • FriendsLiveScreen/friends/locations ✅, WS friends_:userid
  • RecommendationsScreen/recommendations/slopes, /recommendations/plan-day

2.2.6 · Provider-кабинеты (CJM #8, #9)

  • HotelierScreens — все CRUD на /hotels/owner/*
  • ProviderRoleScreens — все 5 ролей (TourOp, Restaurant, Instructor, Transfer)
  • ProviderNewScreensPOST /... для создания услуг
  • ProviderDetailScreensPATCH /... для редактирования

Этап 2.3 · WebSocket каналы (~1 день)

Канал Где подключается Статус
lift_queues LiftsScreen ⚠️
realtime:user_<id> InboxScreen, lib/inbox.ts
friends_<userid> FriendsLiveScreen
tracking_<sessionid> TrackingScreen (live points share) ⚠️
chat_<thread_id> ChatThreadScreen ⚠️

Реконнект каждые 5 сек, JWT-токен в URL.


Этап 2.4 · Auth flow (~1 день)

  • PhoneAuthScreenPOST /auth/phone/send-otp
  • OtpVerifyScreenPOST /auth/phone/verify → JWT в useAuth.setToken()
  • ProfileSetupScreenPATCH /me + POST /auth/upload-avatar
  • Refresh-token rotation: интерцептор axios на 401 → refresh → retry
  • Logout: clear store + POST /auth/logout
  • SSO для Capacitor: Sign in with Apple (iOS), Sign in with Google (Android)

Этап 2.5 · Push notifications (~0.5 дня)

Web

  • Уже работает через lib/push.ts (Notification API + Service Worker fallback)

iOS / Android (Capacitor)

  • @capacitor/push-notifications plugin
  • pushApi.register({ token, platform }) отправляет токен в resort-svc /push/register
  • На бэкенде: OneSignal SDK для рассылок (использует token из БД)
  • Deep-links: data.deep_link парсится в lib/push.ts::onMessage

Этап 2.6 · Native обёртка (Capacitor) (~2 дня)

Уже настроено:

  • capacitor.config.ts (если есть)
  • @capacitor/geolocation для GPS-tracking ✅
  • @capacitor/camera для аватаров и stories ✅
  • @capacitor/push-notifications (опционально, см. lib/push.ts)

Нужно:

  • iOS build pipeline (Xcode + provisioning profiles)
  • Android build (Android Studio + signing)
  • App Store + Google Play assets (icons, screenshots, descriptions)

🎯 Старт работы

Шаг 1 (сейчас): Этап 2.1 — генерация типов из OpenAPI.

Шаг 2: Прицельно подключаю real-API на 5 ключевых экранов CJM #1: HotelDetail → Booking → PayScreen → PaymentSuccess → Bookings.

Шаг 3: Ретраи, error-boundaries, skeleton loaders.

Шаг 4: WebSocket каналы.

Шаг 5: Auth + Push + Native build.

Срок: ~6-8 рабочих дней до полной готовности к продаам в Store.