Files
mont_vendor_maps/CONTEXT.md

6.4 KiB
Raw Blame History

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.

Запуск

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

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.