Files
rltn/MAP_EDITOR_API_SETUP.md

5.5 KiB
Raw Permalink Blame History

Настройка API для редактора карт

Обзор

Добавлены новые API эндпоинты для работы с объектами городов в редакторе карт:

  • POST /api/save-object - Сохранение/обновление объекта города
  • DELETE /api/delete-object/:id - Удаление объекта города

Установка

1. Создание таблицы city_objects

Выполните миграцию для создания таблицы:

node run-city-objects-migration.js

2. Проверка структуры БД

Убедитесь, что в базе данных существуют связанные таблицы:

  • cities - города
  • organizations - организации
  • interiors - интерьеры

3. Перезапуск сервера

После добавления новых API эндпоинтов перезапустите сервер:

npm start
# или
node server.js

API Эндпоинты

POST /api/save-object

Сохранение или обновление объекта города.

Параметры запроса:

{
  "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": "-"              // Текстуры (по умолчанию "-")
}

Ответ:

{
  "id": 123,
  "success": true
}

DELETE /api/delete-object/:id

Удаление объекта города.

Параметры:

  • id - ID объекта для удаления

Ответ:

{
  "success": true,
  "message": "Объект удален"
}

Структура таблицы city_objects

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 используйте:

# Проверка создания объекта
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"