121 lines
5.3 KiB
Markdown
121 lines
5.3 KiB
Markdown
# 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`.
|