161 lines
5.5 KiB
Markdown
161 lines
5.5 KiB
Markdown
# Настройка 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"
|
||
```
|