# Server

Лёгкий файловый backend без внешних зависимостей.

Быстрый старт
- Сервер: `npm --prefix server start` (PORT=8080 по умолчанию). Если порт занят, сервер попробует 8081/8082/8083 автоматически.
- Ручной выбор порта: `PORT=8088 npm --prefix server start`
- Клиент отдельно (только статика, без API): `npx http-server frontend -p 9001` и открыть http://localhost:9001

Статика: раздаётся из `../frontend/dist`, при отсутствии сборки — из `../frontend`.

Хранилище: `server/data/projects/index.json` (список) + `server/data/projects/proj_<id>.json` (полный проект). При старте создаются при необходимости.

API:
- `GET /api/projects[?type=project|template]` — укороченный список из `index.json`.
- `GET /api/projects/:id` — полный JSON проекта.
- `POST /api/projects` — создать проект, генерируется `id`, `createdAt`, `updatedAt`, сохраняется файл и обновляется индекс.
- `POST /api/uploads?filename=<name>&projectId=<id>` — сохранить оригинальный файл модели в `server/data/uploads`.
- `GET /api/conversions/status?src=<uploads/...>` — получить статус подготовки viewer-артефакта.
  Для `.step/.stp` ответ помечается `conversion.status=conversion_required`: оригинал уже доступен для скачивания,
  а preview должен появиться после работы `NodeDcBimConverter`, который готовит GLB и metadata/tree.

Локальный Beam compose:
- `docker compose -f docker-compose.beam.yml up ndc-beam-viewer`
- `docker compose -f docker-compose.beam.yml up nodedc-bim-converter`

Поле `ownerId` пока всегда `null`, но оставлено для будущих пользователей/шаринга.
