обновление от 2025-10-08 для ветки 19SEP

This commit is contained in:
2025-10-08 21:04:10 +03:00
parent d11cf0ecb7
commit 1b0bf6f122
25 changed files with 7858 additions and 37 deletions

160
MAP_EDITOR_API_SETUP.md Normal file
View File

@@ -0,0 +1,160 @@
# Настройка API для редактора карт
## Обзор
Добавлены новые API эндпоинты для работы с объектами городов в редакторе карт:
- `POST /api/save-object` - Сохранение/обновление объекта города
- `DELETE /api/delete-object/:id` - Удаление объекта города
## Установка
### 1. Создание таблицы city_objects
Выполните миграцию для создания таблицы:
```bash
node run-city-objects-migration.js
```
### 2. Проверка структуры БД
Убедитесь, что в базе данных существуют связанные таблицы:
- `cities` - города
- `organizations` - организации
- `interiors` - интерьеры
### 3. Перезапуск сервера
После добавления новых API эндпоинтов перезапустите сервер:
```bash
npm start
# или
node server.js
```
## API Эндпоинты
### POST /api/save-object
Сохранение или обновление объекта города.
**Параметры запроса:**
```json
{
"id": 123, // ID объекта (для обновления) или null (для создания)
"city_id": 1, // ID города (обязательно)
"name": "Здание отеля", // Название объекта
"model_url": "models/copied/building-hotel.glb", // URL модели (обязательно)
"pos_x": 10.5, // X координата
"pos_y": 0.0, // Y координата
"pos_z": 15.2, // Z координата
"rot_x": 0.0, // X поворот (радианы)
"rot_y": 1.57, // Y поворот (радианы)
"rot_z": 0.0, // Z поворот (радианы)
"scale_x": 1.0, // X масштаб
"scale_y": 1.0, // Y масштаб
"scale_z": 1.0, // Z масштаб
"organization_id": 2, // ID организации (по умолчанию 2)
"rent": 0, // Аренда (по умолчанию 0)
"tax": 0, // Налог (по умолчанию 0)
"collidable": false, // Коллизия (по умолчанию false)
"interior_id": 101, // ID интерьера (по умолчанию 101)
"textures": "-" // Текстуры (по умолчанию "-")
}
```
**Ответ:**
```json
{
"id": 123,
"success": true
}
```
### DELETE /api/delete-object/:id
Удаление объекта города.
**Параметры:**
- `id` - ID объекта для удаления
**Ответ:**
```json
{
"success": true,
"message": "Объект удален"
}
```
## Структура таблицы city_objects
```sql
CREATE TABLE city_objects (
id SERIAL PRIMARY KEY,
city_id INTEGER NOT NULL,
name VARCHAR(255) NOT NULL DEFAULT '',
model_url VARCHAR(500) NOT NULL,
-- Позиция
pos_x DECIMAL(15, 6) NOT NULL DEFAULT 0,
pos_y DECIMAL(15, 6) NOT NULL DEFAULT 0,
pos_z DECIMAL(15, 6) NOT NULL DEFAULT 0,
-- Поворот (радианы)
rot_x DECIMAL(15, 6) NOT NULL DEFAULT 0,
rot_y DECIMAL(15, 6) NOT NULL DEFAULT 0,
rot_z DECIMAL(15, 6) NOT NULL DEFAULT 0,
-- Масштаб
scale_x DECIMAL(15, 6) NOT NULL DEFAULT 1,
scale_y DECIMAL(15, 6) NOT NULL DEFAULT 1,
scale_z DECIMAL(15, 6) NOT NULL DEFAULT 1,
-- Дополнительные свойства
organization_id INTEGER NOT NULL DEFAULT 2,
rent DECIMAL(10, 2) NOT NULL DEFAULT 0,
tax DECIMAL(10, 2) NOT NULL DEFAULT 0,
collidable BOOLEAN NOT NULL DEFAULT false,
interior_id INTEGER NOT NULL DEFAULT 101,
textures VARCHAR(500) NOT NULL DEFAULT '-',
-- Метаданные
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
```
## Интеграция с редактором карт
Редактор карт теперь автоматически:
1. **Сохраняет объекты** при добавлении новых
2. **Обновляет объекты** при изменении координат/свойств
3. **Удаляет объекты** из БД при удалении
4. **Загружает объекты** при смене города
5. **Сохраняет ID** существующих объектов
## Безопасность
- Все эндпоинты требуют аутентификации (`authenticate` middleware)
- Валидация входных данных
- Обработка ошибок с логированием
- SQL injection защита через параметризованные запросы
## Отладка
Для проверки работы API используйте:
```bash
# Проверка создания объекта
curl -X POST http://localhost:3000/api/save-object \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{"city_id": 1, "model_url": "models/copied/building.glb", "name": "Тестовое здание"}'
# Проверка удаления объекта
curl -X DELETE http://localhost:3000/api/delete-object/123 \
-H "Authorization: Bearer YOUR_TOKEN"
```