Обзор архитектуры
Стек технологий
| Слой | Технология |
|---|---|
| Фреймворк | Expo SDK 54 + React Native 0.81 |
| Навигация | Expo Router v6 (file-based routing) |
| Авторизация | JWT через saas-api (email/password + Google OAuth) |
| Серверный стейт | TanStack Query v5 |
| Клиентский стейт | Zustand v5 + AsyncStorage persistence |
| Стилизация | NativeWind v4 (Tailwind CSS для React Native) |
| Анимации | react-native-reanimated |
| Real-time | socket.io-client |
| Haptics | expo-haptics |
| Мониторинг | Sentry + Firebase Analytics |
Слои приложения
┌─────────────────────────────────────────┐
│ app/ (Routes) │ Expo Router — файловый роутинг
├─────────────────────────────────────────┤
│ src/components/ │ UI-компоненты (Button, Input, ...)
├─────────────────────────────────────────┤
│ src/features/ │ Фичи (auth, chat, saas-api, ...)
│ ┌──────────┐ ┌──────────┐ ┌─────────┐ │
│ │ hooks/ │ │ stores/ │ │ ui/ │ │
│ └──────────┘ └──────────┘ └─────────┘ │
├─────────────────────────────────────────┤
│ src/core/ │ Тема, i18n, мониторинг, шрифты
├─────────────────────────────────────────┤
│ src/lib/ │ Утилиты (haptics, toast, debug)
├─────────────────────────────────────────┤
│ saas-api (backend) │ REST API + WebSocket
└─────────────────────────────────────────┘Структура директорий
saas-mobile/
├── app/ # Expo Router
│ ├── _layout.tsx # Root layout (провайдеры)
│ ├── (auth)/ # Экраны авторизации
│ ├── (app)/ # Авторизованная часть
│ └── +not-found.tsx # 404
├── src/
│ ├── features/
│ │ ├── auth/ # JWT авторизация, SessionProvider
│ │ ├── saas-api/ # HTTP клиент, типы API
│ │ ├── chat/ # Чаты, WebSocket, stores
│ │ ├── assistants/ # Ассистенты
│ │ ├── integrations/ # Мессенджер-интеграции
│ │ ├── phones/ # Телефонные номера
│ │ └── notifications/ # Push-уведомления
│ ├── components/ # Переиспользуемые UI-компоненты
│ │ └── ui/ # Базовые UI (Button, Input, ...)
│ ├── core/
│ │ ├── theme/ # Цвета, провайдер, store
│ │ ├── i18n/ # i18next, переводы
│ │ ├── monitoring/ # Sentry, Firebase Analytics
│ │ ├── fonts/ # Inter font family
│ │ └── assets/ # Иконки, изображения
│ ├── stores/ # Глобальные Zustand stores
│ ├── hooks/ # Общие хуки
│ ├── lib/ # Утилиты
│ │ ├── haptics.ts # HapticService
│ │ ├── toast.ts # Toast уведомления
│ │ ├── debug.ts # Debug утилиты
│ │ ├── styles.ts # Стили-утилиты
│ │ ├── utils.ts # Общие утилиты
│ │ └── confirm.ts # Confirm диалоги
│ └── types/ # Глобальные TypeScript типы
├── assets/ # Иконки приложения, splash screen
├── plugins/ # Expo plugins (Firebase)
└── credentials/ # EAS / Firebase credentialsПровайдеры (Root Layout)
Root layout (app/_layout.tsx) оборачивает приложение в дерево провайдеров:
Sentry.wrap()
└── ThemeProvider (NativeWind)
└── QueryClientProvider (TanStack Query)
└── SessionProvider (JWT auth)
└── GestureHandlerRootView
└── KeyboardProvider
└── BottomSheetModalProvider
└── Slot (Expo Router)Доменные модели
| Модель | Описание |
|---|---|
User | Пользователь (email, verification status) |
Company | Компания/воркспейс |
Assistant | AI-ассистент (настройки, промпт, модель) |
Chat | Чат с информацией о мессенджере |
Message | Сообщение в чате |
Integration | Подключение мессенджера (Telegram, Instagram, ...) |
Phone | Телефонный номер для голосовых вызовов |
Внешние сервисы
| Сервис | Назначение |
|---|---|
| saas-api | REST API + WebSocket для real-time |
| Expo Notifications | Push-уведомления |
| Sentry | Трекинг ошибок |
| Firebase Analytics | Аналитика использования |
| Google OAuth | Авторизация через Google |