133 lines
4.2 KiB
Markdown
133 lines
4.2 KiB
Markdown
# 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. Настройка базы данных
|
||
|
||
#### Вариант A: Удаленная база данных (рекомендуется)
|
||
Проект настроен для работы с удаленной PostgreSQL.
|
||
См. [DATABASE_SETUP.md](DATABASE_SETUP.md) для деталей конфигурации.
|
||
|
||
#### Вариант B: Локальная база данных
|
||
```bash
|
||
# Раскомментируйте сервис postgres в docker-compose.yml
|
||
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://<YOUR_IP>:3000/graphql` |