# 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`.