6.4 KiB
6.4 KiB
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
Возвращает:
vendorscategoriesproductsproduct_links(product_id -> category_id)links(агрегированныеvendor_id -> category_id, для совместимости)
scope:
infra- инфраструктурный контур.ib(илиsec/security) - контур ИБ.
Админ-доступ
- Логин:
batman - Пароль:
batmannotmont
Админка: что умеет
- Переключение режима
Инфраструктура / ИБчерез?scope=.... - Добавление/удаление вендоров.
- Добавление/удаление категорий.
- Добавление/удаление продуктов (продукт принадлежит вендору).
- Редактирование матрицы
продукт × категориячекбоксами. - При сохранении автоматически пересобираются агрегированные связи
вендор × категория.
Структура БД (SQLite)
Infra
vendorscategoriesvendor_categoriesproductsproduct_categories
IB
ib_vendorsib_categoriesib_vendor_categoriesib_productsib_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.