Files
mont_vendor_maps/CONTEXT.md

125 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Zkart Context
## Что это
Одностраничное Flask-приложение с матрицей:
- `вендор -> продукты -> категории`
- в двух режимах: `Инфраструктура` и `ИБ`.
## Основные файлы
- `main.py` - Flask-приложение (главная страница, API, админка, инициализация/миграция БД, импорт ИБ при необходимости).
- `requirements.txt` - зависимости Python.
- `matrix.db` - SQLite-база со всеми сущностями по двум режимам.
- `Dockerfile` - контейнеризация приложения.
- `docker-compose.yml` - запуск сервиса в Docker.
- `.dockerignore` - исключения для docker build context.
- `mont_logo.png` - логотип, используется на главной.
## Роуты
- `/` - основной интерфейс с фильтрами.
- `/api/data?scope=infra|ib` - JSON с данными выбранного режима.
- `/health` - проверка статуса.
- `/sdjlkfhsjkadahjksdhjgfkhsssssdjkjfljsdfjklsdajfkldsjflksdjfkldsj` - админка.
- `/assets/mont-logo` - отдача логотипа.
## API `/api/data`
Возвращает:
- `vendors`
- `categories`
- `products`
- `product_links` (`product_id -> category_id`)
- `links` (агрегированные `vendor_id -> category_id`, для совместимости)
`scope`:
- `infra` - инфраструктурный контур.
- `ib` (или `sec/security`) - контур ИБ.
## Админ-доступ
- Логин: `batman`
- Пароль: `batmannotmont`
## Админка: что умеет
- Переключение режима `Инфраструктура / ИБ` через `?scope=...`.
- Добавление/удаление вендоров.
- Добавление/удаление категорий.
- Добавление/удаление продуктов (продукт принадлежит вендору).
- Редактирование матрицы `продукт × категория` чекбоксами.
- При сохранении автоматически пересобираются агрегированные связи `вендор × категория`.
## Структура БД (SQLite)
### Infra
- `vendors`
- `categories`
- `vendor_categories`
- `products`
- `product_categories`
### IB
- `ib_vendors`
- `ib_categories`
- `ib_vendor_categories`
- `ib_products`
- `ib_product_categories`
## Инициализация данных
- Включается только при `ENABLE_BOOTSTRAP=1`.
- Infra: исторические данные приложения.
- IB:
- при первом запуске может заполняться из `Z-card_РФ.xlsx` (вкладка `инфобез`), если файл доступен;
- иначе используется встроенный fallback-набор.
- Для пустых `products` может выполняться bootstrap: для каждого вендора создается `Базовый продукт` и получает текущие связи категорий.
- При `ENABLE_BOOTSTRAP=0` (по умолчанию) автосидинг/автоимпорт не выполняются, приложение работает с текущими данными `matrix.db`.
## Запуск
```bash
python3 -m venv .venv
.venv/bin/python -m ensurepip --upgrade
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python main.py
```
## Запуск через Docker
```bash
docker compose up -d --build
```
Правило работы:
- После каждого изменения кода обязательно выполнять `docker compose up -d --build` автоматически.
Порт:
- `5000:5000`
Переменные окружения:
- `SECRET_KEY` (если не задан, используется дефолт `change-me-please`).
- `ENABLE_BOOTSTRAP` (по умолчанию `0`):
- `0`: не выполнять автозаполнение;
- `1`: разрешить seed/bootstrap/import на старте.
## Git
- Remote: `https://git.ruslan.xyz/ruslan/mont_vendor_maps.git`
- Логин для push: `ruslan@ipcom.su`
- Локальные секреты хранить в `CONTEXT.local.md` (файл в `.gitignore`, не пушится).
## Local Context (Do Not Commit)
### Git Credentials
- Login: `ruslan@ipcom.su`
- Password: `utOgbZ09ruslan`
- Remote: `https://git.ruslan.xyz/ruslan/mont_vendor_maps.git`
### Sudo
- Password: `utOgbZ09`
- Docker команды запускать через `sudo`.
- Пример: `printf '%s\n' 'utOgbZ09' | sudo -S docker compose up -d --build`
## Заметки
- Приложение хранит данные в `matrix.db`.
- Для продакшена рекомендуется задать переменную `SECRET_KEY`.
- В режиме `ИБ` интерфейс получает более красный фон (отдельная визуальная тема).
- На главной:
- логотип MONT слева без овального контейнера;
- hero-блок с горным фоном;
- подпись внизу справа: `Made by Galyaviev`, `ruslan@ipcom.su`.
- Перед крупными рефакторингами делать checkpoint:
- создать отдельную git-ветку;
- при необходимости поставить тег на текущее состояние;
- при проблемах откатываться к checkpoint через git.