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

Архыз.CLUB — ski features (P0-P6)

Фичи мобильного приложения и веба для горнолыжного курорта.

Схема

┌──────────────────────────┐     WS realtime           ┌────────────────┐
│  tourist-app (Capacitor) │ ◄──────────────────────►  │   rtc-svc      │
│  + admin/web SPA         │                            │  /ws/realtime  │
└──────────┬───────────────┘                            └────────┬───────┘
           │                                                     │
           │ REST /api/v1/...                                    │ Redis pub/sub
           ▼                                                     ▼
┌──────────────────────────────────────────────────────────────────────┐
│                        resort-svc (FastAPI)                          │
│  ─────────────────────────────────────────────────────────────────   │
│  P0  /resort/lifts            live-очереди подъёмников               │
│  P1  /tracking/sessions/*     GPS-сессии + классификация (lift/run)  │
│  P2  /skipass/*               виртуальный пасс + scan-лог            │
│  P3  /leaderboard/{period}    топ юзеров                              │
│      /badges/me               бейджи                                  │
│  P3.5 /me/location            публикация позиции + push «друг рядом»  │
│       /friends/locations      live-локации друзей                     │
│  P4  /rentals/*               аренда снаряжения                       │
│      /slope/*                 еда на склон                            │
│  P5  /notifications/*         push (OneSignal + inbox в Redis)        │
│  P6  /recommendations/*       AI-подбор трасс                         │
└──────────────────────────────────────────────────────────────────────┘
                              │
                              ▼
                    ┌─────────────────────┐
                    │ Redis (state)       │
                    │ Postgres (БД)       │
                    │ OneSignal (push)    │
                    └─────────────────────┘

Mobile экраны

Маршрут Экран Что делает
/snow (таб «Гора») SnowScreen Хаб: погода, трассы + виджеты live-очередей и AI-реко
/lifts LiftsScreen Heatmap-карточки очередей у подъёмников
/lifts/:id LiftsScreen Детали подъёмника
/map3d (таб «Карта») Ski3DMapScreen Mapbox 3D-карта с террейном, слои live-данных
/tracking TrackingScreen Старт/стоп GPS-сессии, live-метрики
/tracking/history TrackingHistoryScreen Сессии за 30 дней + сводка
/tracking/sessions/:id TrackingDetailScreen Таймлайн дня + сегменты
/leaderboard LeaderboardScreen Топ-50 за день/неделю/месяц
/badges BadgesScreen 10 бейджей с прогресс-барами
/friends-live FriendsLiveScreen Друзья на склоне + toggle шаринга
/virtual-pass VirtualPassScreen QR-пасс + статистика проходов
/rentals RentalsScreen Каталог снаряжения, корзина
/slope-food SlopeFoodScreen Меню кафе с доставкой
/inbox InboxScreen Входящие push-уведомления
/recommendations RecommendationsScreen Куда поехать сейчас + план дня

Подключение CV-pipeline для live-очередей

CV-сервис каждые 5-10 секунд отправляет:

POST /api/v1/resort/lifts/{lift_id}/queue?queue=N

resort-svc: 1. Сохраняет counter:lift:{id}:queue в Redis (TTL 5 мин) 2. Публикует в realtime:lift_queues → все подписчики WS видят обновление 3. Триггерит push «🟢 Очередь упала» если было busy/crowded, стало free/low

Push-триггеры

  • booking — после успешной аренды или заказа еды
  • queue — очередь упала на ранее загруженном подъёмнике
  • friend — друг в радиусе 300м (debounce 30 мин)
  • achievement — открыт новый бейдж (TODO)
  • info — служебные

Деплой

# Backend сервис
cd /root/arkhyz-admin-main
./scripts/deploy/services.sh --rebuild resort-svc

# Mobile + tourist web
docker compose -f docker-compose.yml -f docker-compose.prod.yml \
  up -d --build --force-recreate tourist_app

# Admin SPA
docker compose -f docker-compose.yml -f docker-compose.prod.yml \
  up -d --build --force-recreate admin_web_v4

# Caddy reload (после изменений Caddyfile)
docker exec arkhyz-caddy caddy reload --config /etc/caddy/Caddyfile

Env-переменные

Variable Где Назначение
HOTEL_API_JWT_SECRET resort-svc Декод JWT (общий с auth-svc)
REDIS_URL resort-svc, rtc-svc redis://arkhyz-redis:6379/N
SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY resort-svc PostgREST доступ к users/friends
ONESIGNAL_APP_ID, ONESIGNAL_API_KEY resort-svc Отправка push (опционально)
VITE_MAPBOX_TOKEN tourist-app 3D-карта
VITE_API_BASE tourist-app https://stage.arkhyz-club.ru