0709 with changes and CollEditor
This commit is contained in:
258
server/README.md
Normal file
258
server/README.md
Normal file
@@ -0,0 +1,258 @@
|
||||
# Серверная часть EEV_Proj
|
||||
|
||||
## Описание
|
||||
|
||||
Серверная часть проекта EEV_Proj построена на Node.js и Express. Сервер обеспечивает API для клиентской части, управляет WebSocket соединениями и взаимодействует с базой данных PostgreSQL.
|
||||
|
||||
## Структура
|
||||
|
||||
```
|
||||
server/
|
||||
├── server.js # Основной файл сервера
|
||||
├── db.js # Подключение к базе данных
|
||||
├── db1.js # Альтернативная конфигурация БД
|
||||
├── organizations.js # Логика организаций
|
||||
├── ecosystem.config.js # Конфигурация PM2
|
||||
└── README.md # Эта документация
|
||||
```
|
||||
|
||||
## Основные компоненты
|
||||
|
||||
### server.js
|
||||
Главный файл сервера, который:
|
||||
- Инициализирует Express приложение
|
||||
- Настраивает middleware
|
||||
- Определяет API маршруты
|
||||
- Запускает WebSocket сервер
|
||||
- Обрабатывает игровую логику
|
||||
|
||||
### db.js
|
||||
Модуль для работы с базой данных PostgreSQL:
|
||||
- Подключение к БД
|
||||
- Выполнение SQL запросов
|
||||
- Управление транзакциями
|
||||
|
||||
### organizations.js
|
||||
Логика для работы с организациями в игре:
|
||||
- Создание организаций
|
||||
- Управление меню организаций
|
||||
- Обработка покупок
|
||||
|
||||
## API эндпоинты
|
||||
|
||||
### Аутентификация
|
||||
- `POST /api/auth/login` - Вход в систему
|
||||
- `POST /api/auth/register` - Регистрация
|
||||
|
||||
### Интерьеры
|
||||
- `GET /api/interiors/:id/definition` - Получение определения интерьера
|
||||
- `POST /api/interiors/:id/enter` - Вход в интерьер
|
||||
|
||||
### Объекты города
|
||||
- `GET /api/city_objects/:id/interior` - Получение информации об объекте
|
||||
|
||||
### Экономика
|
||||
- `GET /api/economy/balance` - Получение баланса
|
||||
- `POST /api/economy/purchase` - Покупка предметов
|
||||
- `GET /api/economy/inventory` - Получение инвентаря
|
||||
|
||||
### Квесты
|
||||
- `GET /api/quests/progress` - Прогресс квестов
|
||||
- `POST /api/quests/complete` - Завершение квеста
|
||||
|
||||
### Пользователи
|
||||
- `GET /api/users/status` - Статус пользователей
|
||||
- `GET /api/users/:id/profile` - Профиль пользователя
|
||||
|
||||
### Сообщения
|
||||
- `GET /api/messages/:contactId` - Получение сообщений
|
||||
- `POST /api/messages/send` - Отправка сообщения
|
||||
- `POST /api/messages-read/:contactId` - Отметка сообщений как прочитанных
|
||||
|
||||
## WebSocket события
|
||||
|
||||
### Клиент → Сервер
|
||||
- `playerMovement` - Движение игрока
|
||||
- `interiorChange` - Смена интерьера
|
||||
- `economy:getBalance` - Запрос баланса
|
||||
- `economy:getInventory` - Запрос инвентаря
|
||||
- `economy:updateStats` - Обновление статистики
|
||||
- `economy:removeItem` - Удаление предмета
|
||||
- `voiceChatToggle` - Переключение голосового чата
|
||||
|
||||
### Сервер → Клиент
|
||||
- `economy:balanceChanged` - Изменение баланса
|
||||
- `economy:inventory` - Обновление инвентаря
|
||||
- `gameTime:update` - Обновление игрового времени
|
||||
- `us` - Обновление статуса пользователей
|
||||
|
||||
## Установка и запуск
|
||||
|
||||
### Зависимости
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
### Переменные окружения
|
||||
Создайте файл `.env` в корне проекта:
|
||||
```dotenv
|
||||
# Сервер
|
||||
PORT=4000
|
||||
NODE_ENV=development
|
||||
|
||||
# База данных
|
||||
DB_HOST=localhost
|
||||
DB_PORT=5432
|
||||
DB_USER=your_username
|
||||
DB_PASS=your_password
|
||||
DB_NAME=your_database
|
||||
|
||||
# JWT
|
||||
JWT_SECRET=your_jwt_secret
|
||||
```
|
||||
|
||||
### Запуск
|
||||
```bash
|
||||
# Обычный запуск
|
||||
node server.js
|
||||
|
||||
# Через PM2
|
||||
pm2 start ecosystem.config.js
|
||||
|
||||
# В режиме разработки
|
||||
npm run dev
|
||||
```
|
||||
|
||||
## База данных
|
||||
|
||||
### Основные таблицы
|
||||
|
||||
#### users
|
||||
- `id` - Уникальный идентификатор
|
||||
- `username` - Имя пользователя
|
||||
- `email` - Email адрес
|
||||
- `password_hash` - Хеш пароля
|
||||
- `created_at` - Дата создания
|
||||
|
||||
#### interiors
|
||||
- `id` - Уникальный идентификатор
|
||||
- `name` - Название интерьера
|
||||
- `glb_path` - Путь к 3D модели
|
||||
- `spawn_x`, `spawn_y`, `spawn_z` - Координаты входа
|
||||
- `exit_x`, `exit_y`, `exit_z` - Координаты выхода
|
||||
|
||||
#### city_objects
|
||||
- `id` - Уникальный идентификатор
|
||||
- `name` - Название объекта
|
||||
- `interior_id` - Ссылка на интерьер
|
||||
- `position_x`, `position_y`, `position_z` - Позиция в мире
|
||||
|
||||
#### organizations
|
||||
- `id` - Уникальный идентификатор
|
||||
- `name` - Название организации
|
||||
- `type` - Тип организации
|
||||
- `menu` - JSON с меню организации
|
||||
|
||||
#### inventory
|
||||
- `id` - Уникальный идентификатор
|
||||
- `user_id` - Ссылка на пользователя
|
||||
- `item_id` - Ссылка на предмет
|
||||
- `quantity` - Количество
|
||||
|
||||
## Безопасность
|
||||
|
||||
### JWT токены
|
||||
- Используются для аутентификации
|
||||
- Хранятся в localStorage клиента
|
||||
- Передаются в заголовке Authorization
|
||||
|
||||
### Валидация данных
|
||||
- Проверка входных данных
|
||||
- Санитизация SQL запросов
|
||||
- Защита от SQL инъекций
|
||||
|
||||
### CORS
|
||||
- Настроен для разрешения запросов с клиента
|
||||
- Ограничен по доменам в продакшене
|
||||
|
||||
## Мониторинг и логирование
|
||||
|
||||
### PM2
|
||||
- Управление процессами
|
||||
- Автоперезапуск при сбоях
|
||||
- Логирование
|
||||
|
||||
### Логи
|
||||
- Логирование ошибок
|
||||
- Логирование API запросов
|
||||
- Логирование WebSocket событий
|
||||
|
||||
## Масштабирование
|
||||
|
||||
### Кластеризация
|
||||
- Поддержка нескольких процессов через PM2
|
||||
- Балансировка нагрузки
|
||||
- Общие WebSocket соединения
|
||||
|
||||
### Кэширование
|
||||
- Redis для кэширования данных
|
||||
- Кэширование статических файлов
|
||||
- Кэширование результатов запросов
|
||||
|
||||
## Развертывание
|
||||
|
||||
### Docker
|
||||
```dockerfile
|
||||
FROM node:16-alpine
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm ci --only=production
|
||||
COPY . .
|
||||
EXPOSE 4000
|
||||
CMD ["node", "server.js"]
|
||||
```
|
||||
|
||||
### Nginx
|
||||
Настройте Nginx для проксирования API запросов на порт 4000.
|
||||
|
||||
### SSL
|
||||
Настройте HTTPS для безопасного соединения.
|
||||
|
||||
## Тестирование
|
||||
|
||||
### Unit тесты
|
||||
```bash
|
||||
npm test
|
||||
```
|
||||
|
||||
### Интеграционные тесты
|
||||
```bash
|
||||
npm run test:integration
|
||||
```
|
||||
|
||||
### Нагрузочное тестирование
|
||||
```bash
|
||||
npm run test:load
|
||||
```
|
||||
|
||||
## Отладка
|
||||
|
||||
### Логи
|
||||
- Проверьте логи PM2: `pm2 logs`
|
||||
- Проверьте логи приложения в консоли
|
||||
|
||||
### База данных
|
||||
- Проверьте подключение к БД
|
||||
- Выполните тестовые запросы
|
||||
|
||||
### WebSocket
|
||||
- Проверьте подключение клиента
|
||||
- Проверьте события в консоли браузера
|
||||
|
||||
## Поддержка
|
||||
|
||||
При возникновении проблем:
|
||||
1. Проверьте логи сервера
|
||||
2. Проверьте подключение к базе данных
|
||||
3. Проверьте конфигурацию
|
||||
4. Создайте issue в репозитории
|
||||
Reference in New Issue
Block a user