5.5 KiB
5.5 KiB
Настройка 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
);
Интеграция с редактором карт
Редактор карт теперь автоматически:
- Сохраняет объекты при добавлении новых
- Обновляет объекты при изменении координат/свойств
- Удаляет объекты из БД при удалении
- Загружает объекты при смене города
- Сохраняет ID существующих объектов
Безопасность
- Все эндпоинты требуют аутентификации (
authenticatemiddleware) - Валидация входных данных
- Обработка ошибок с логированием
- 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"