added web service

This commit is contained in:
2026-09-02 12:48:03 +03:00
parent 84b7eceb9f
commit 02c43072c4
60 changed files with 6148 additions and 22 deletions
+84
View File
@@ -0,0 +1,84 @@
# GostGenerator Web
Веб-сервис для генерации ГОСТ-документов из архива Altium-проекта: парсинг в БД, редактирование таблиц и рамки, экспорт PDF/Excel, помощь LLM через OpenRouter (прокси).
## Состав
- `backend/` — FastAPI + PostgreSQL + парсер Altium + генераторы таблиц
- `frontend/` — React (Vite) SPA
- `docker-compose.yml` — api + db + web (nginx)
## Быстрый старт на сервере
```bash
cd web
cp .env.example .env
# отредактируйте .env: API_TOKEN, OPENROUTER_*, POSTGRES_PASSWORD
docker compose up -d --build
```
Откройте `http://<server>:8080`.
В шапке укажите **API token** (значение `API_TOKEN` из `.env`).
### Типовой сценарий
1. Создать проект
2. Загрузить ZIP с Altium-проектом (внутри должен быть `.PrjPcb` + `.SchDoc` / `.PcbDoc`)
3. Заполнить децимальный номер / название платы и поля рамки
4. Выбрать документ → **Сгенерировать** → править ячейки → **Сохранить**
5. Скачать **Excel** или **PDF**
6. При необходимости: чат LLM → просмотреть proposed edits → **Применить**
7. Обновление базы элементов: **Обновить ZIP** (таблицы по умолчанию сохраняются)
## Переменные окружения
| Переменная | Описание |
|---|---|
| `API_TOKEN` | Токен для API / UI |
| `OPENROUTER_BASE_URL` | URL OpenRouter (`…/api/v1`) |
| `OPENROUTER_API_KEY` | Ключ |
| `OPENROUTER_MODEL` | Например `deepseek/deepseek-chat` |
| `OPENROUTER_PROXY` | SOCKS5-прокси, напр. `socks5://user:pass@host:1080` |
| `HTTP_PORT` | Порт nginx (по умолчанию 8080) |
| `DATA_DIR` | В контейнере `/data` (zip и артефакты) |
## Локальная разработка (без Docker UI)
PostgreSQL + API:
```bash
# поднять только БД
docker compose up -d db
cd backend
python -m venv .venv
# Windows: .venv\Scripts\activate
pip install -r requirements.txt
set DATABASE_URL=postgresql+psycopg://gost:gost@localhost:5432/gost
set API_TOKEN=changeme
set DATA_DIR=../data
uvicorn app.main:app --reload --port 8000
```
Frontend:
```bash
cd frontend
npm install
npm run dev
```
Vite проксирует `/api` на `localhost:8000`.
## API
Документация: `http://<host>:8080/docs` (через nginx) или `:8000/docs` напрямую к api.
Основные эндпоинты: `/api/projects`, `…/upload`, `…/tables/{type}/generate`, `…/inscriptions`, `…/export`, `…/llm/chat`, `…/llm/apply`.
Заголовок: `Authorization: Bearer <API_TOKEN>` или `X-API-Token`.
## LLM и стоимость
Вызовы только по явной команде в чате. Автозаполнения всех строк нет. В промпт уходит сжатый снимок таблицы (лимит `LLM_MAX_CONTEXT_ROWS`). Правки не применяются автоматически.