# Zkart Context

## Что это
Одностраничное Flask-приложение с матрицей:
- `вендор -> продукты -> категории`
- в двух режимах: `Инфраструктура` и `ИБ`.

## Основные файлы
- `main.py` - минимальный entrypoint Flask-приложения (запуск `app`).
- `zkart_app/__init__.py` - фабрика/инициализация приложения (`create_app`, регистрация роутов, `init_db`).
- `zkart_app/config.py` - конфиг и константы (пути, `ADMIN_PATH`, логин/пароль, env-флаги).
- `zkart_app/routes.py` - HTTP-роуты (`/`, `/api/data`, `/health`, админка, `/assets/mont-logo`).
- `zkart_app/db.py` - работа с SQLite, схемы, сидинг, импорт из `infra1-4`, загрузка матриц из XLSX.
- `templates/index.html` - шаблон главной страницы.
- `templates/admin.html` - шаблон админки.
- `templates/login.html` - шаблон логина в админку.
- `static/css/*` - стили интерфейса (главная/админка/логин).
- `static/js/*` - клиентские скрипты (главная/админка).
- `requirements.txt` - зависимости Python.
- `matrix.db` - SQLite-база со всеми сущностями по двум режимам.
- `Dockerfile` - контейнеризация приложения.
- `docker-compose.yml` - запуск сервиса в Docker.
- `.dockerignore` - исключения для docker build context.
- `mont_logo.png` - логотип, используется на главной.
- `favicon.png` - favicon сайта.

## Роуты
- `/` - основной интерфейс с фильтрами.
- `/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.
