обновление от 2025-10-08 для ветки 19SEP
This commit is contained in:
160
MAP_EDITOR_API_SETUP.md
Normal file
160
MAP_EDITOR_API_SETUP.md
Normal 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"
|
||||
```
|
||||
Reference in New Issue
Block a user