# Prism Messenger Мессенджер на основе Expo (React Native) + NestJS + GraphQL + PostgreSQL ## Архитектура ### Frontend (Mobile) - **Framework**: Expo с TypeScript - **State Management**: Apollo Client для GraphQL - **UI**: React Native Paper - **Navigation**: React Navigation ### Backend - **Framework**: NestJS с TypeScript - **API**: GraphQL (code-first подход) - **Database**: PostgreSQL с TypeORM - **Auth**: JWT - **Real-time**: GraphQL Subscriptions ## Быстрый старт ### Предварительные требования - Node.js 18+ - Docker и Docker Compose - Expo Go на мобильном устройстве ### 1. Запуск базы данных ```bash docker-compose up -d ``` ### 2. Запуск Backend ```bash cd backend npm install npm run start:dev ``` Backend будет доступен на http://localhost:3000 GraphQL Playground: http://localhost:3000/graphql ### 3. Запуск Frontend ```bash cd frontend npm install npx expo start ``` Отсканируйте QR-код в Expo Go для запуска на устройстве. ## Основные функции ### Реализовано - ✅ Регистрация и авторизация пользователей - ✅ Создание приватных и групповых чатов - ✅ Отправка, редактирование и удаление сообщений - ✅ Real-time обновления через GraphQL subscriptions - ✅ Онлайн статус пользователей ### В планах - 📱 Push-уведомления - 📷 Отправка изображений - 🔊 Голосовые сообщения - 🔒 End-to-end шифрование - 👥 Управление участниками групп ## Структура проекта ``` Prism/ ├── backend/ │ ├── src/ │ │ ├── modules/ │ │ │ ├── auth/ # Аутентификация │ │ │ ├── users/ # Пользователи │ │ │ ├── conversations/ # Чаты/беседы │ │ │ └── messages/ # Сообщения │ │ └── app.module.ts │ └── package.json ├── frontend/ │ ├── src/ │ │ ├── components/ # Переиспользуемые компоненты │ │ ├── screens/ # Экраны приложения │ │ ├── navigation/ # Навигация │ │ ├── services/ # Сервисы (Apollo Client) │ │ ├── graphql/ # GraphQL запросы/мутации │ │ ├── contexts/ # React Context (Auth) │ │ └── types/ # TypeScript типы │ └── App.tsx └── docker-compose.yml ``` ## Разработка ### Backend команды ```bash npm run start:dev # Запуск в режиме разработки npm run build # Сборка проекта npm run test # Запуск тестов ``` ### Frontend команды ```bash npx expo start # Запуск Expo npx expo start --ios # Запуск на iOS симуляторе npx expo start --android # Запуск на Android эмуляторе ``` ## Переменные окружения ### Backend (.env) ```env DATABASE_HOST=localhost DATABASE_PORT=5432 DATABASE_USERNAME=postgres DATABASE_PASSWORD=postgres DATABASE_NAME=prism_messenger JWT_SECRET=your-secret-key JWT_EXPIRATION=7d ``` ### Frontend Настройте URL backend в `src/services/apollo-client.ts`: - Для iOS симулятора: `http://localhost:3000/graphql` - Для Android эмулятора: `http://10.0.2.2:3000/graphql` - Для устройства в сети: `http://:3000/graphql`