Files
prism/README.md

133 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`