Files
rltn/MAP_EDITOR_API_SETUP.md

161 lines
5.5 KiB
Markdown
Raw Permalink 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.

# Настройка 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"
```