🔌 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-ошибки.
Действия:¶
- Скрипт
scripts/gen-api-types.sh— pullopenapi.jsonс каждого сервиса npx openapi-typescript→tourist-app/src/types/api.gen.ts- Обновить
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✅BookingScreen→POST /bookings/createPayScreen→POST /payments/process⚠️ новый endpoint нужен в booking-svcPaymentSuccess→ load real booking viastate.booking.idBookingsScreen→ 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)TrackingScreen—POST /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.tsWS наrealtime:user_:id✅PushSettingsScreen—POST /push/register,PATCH /push/preferences- Service Worker для web push
2.2.5 · Friends-live + Recommendations (CJM #6)¶
FriendsLiveScreen—/friends/locations✅, WSfriends_:userid✅RecommendationsScreen—/recommendations/slopes,/recommendations/plan-day✅
2.2.6 · Provider-кабинеты (CJM #8, #9)¶
HotelierScreens— все CRUD на/hotels/owner/*ProviderRoleScreens— все 5 ролей (TourOp, Restaurant, Instructor, Transfer)ProviderNewScreens—POST /...для создания услугProviderDetailScreens—PATCH /...для редактирования
Этап 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 день)¶
PhoneAuthScreen→POST /auth/phone/send-otp✅OtpVerifyScreen→POST /auth/phone/verify→ JWT вuseAuth.setToken()✅ProfileSetupScreen→PATCH /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-notificationspluginpushApi.register({ token, platform })отправляет токен вresort-svc /push/register- На бэкенде:
OneSignalSDK для рассылок (использует 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.