MP Tool
  • Python 86.8%
  • HTML 12.2%
  • Shell 0.5%
  • JavaScript 0.2%
  • Makefile 0.2%
  • Other 0.1%
Find a file
ciger3a effcf88918
Some checks failed
CI/CD / test (push) Has been cancelled
CI/CD / lint (push) Has been cancelled
CI/CD / build (push) Has been cancelled
fix(ozon dashboard): сравнение label + auto-compare button height как в WB
2026-08-14 12:04:48 +03:00
.forgejo/workflows chore(lint): add ruff config and update CI 2026-08-10 14:48:46 +03:00
docker/postgres Initial commit: MP Tool v0.1 2026-04-27 17:20:39 +03:00
docs docs: стратегия гарантированной синхронизации — SYNC_STRATEGY.md 2026-06-16 12:20:13 +03:00
scripts fix: worker health check, DS auto-sync, v2 primary, PG backup, empty brands + dashboard_utils 2026-05-22 21:19:07 +03:00
src fix(ozon dashboard): сравнение label + auto-compare button height как в WB 2026-08-14 12:04:48 +03:00
traefik_dynamic chore: haos.isdata.tech через Traefik file provider 2026-06-17 17:53:37 +03:00
.env.example v0.28.0: Рефакторинг, безопасность, тесты, CI/CD 2026-05-13 10:06:47 +03:00
.gitignore chore(compose): track docker-compose.prod.yml and add env_file to all services 2026-07-27 17:43:59 +03:00
.pre-commit-config.yaml v0.28.0: Рефакторинг, безопасность, тесты, CI/CD 2026-05-13 10:06:47 +03:00
CHANGELOG.md chore(release): bump version to v2026.7.27 2026-07-27 15:02:11 +03:00
deploy.sh fix(deploy): run docker without sudo in deploy.sh 2026-08-10 13:55:36 +03:00
docker-compose.prod.env.example fix(deploy): wire DJANGO_SECRET_KEY/DJANGO_DEBUG into prod compose and update deploy.sh 2026-08-10 11:05:55 +03:00
docker-compose.prod.yml fix(compose): add build context to Django services in prod 2026-08-10 14:00:46 +03:00
docker-compose.yml chore(deploy): align dev/CI env with DJANGO_SECRET_KEY/DJANGO_DEBUG 2026-08-10 13:50:21 +03:00
Dockerfile fix(docker): collectstatic при сборке образа 2026-08-13 17:29:00 +03:00
Makefile v0.28.0: Рефакторинг, безопасность, тесты, CI/CD 2026-05-13 10:06:47 +03:00
pyproject.toml chore(lint): add ruff config and update CI 2026-08-10 14:48:46 +03:00
README.md chore(release): bump version to v2026.7.27 2026-07-27 15:02:11 +03:00
requirements.txt chore: django-unfold 0.94 → 0.95, Dockerfile: PyPI mirror (tsinghua) 2026-06-01 16:37:51 +03:00
restart.sh fix: auto-migrate при каждом деплое (restart.sh) 2026-06-17 12:45:36 +03:00
VERSION chore(release): bump VERSION to v2026.7.27 2026-08-10 13:48:14 +03:00

MP Tool v2026.7.27

Платформа для управления маркетплейсами: сбор данных из Wildberries, Ozon, Яндекс.Маркет, управленческий учёт и аналитика.

Возможности

  • 4 направления: Wildberries (заказы + продажи + реализации + карточки + остатки + реклама), Ozon, Яндекс.Маркет, финансы
  • Умная синхронизация: probe → retro → steady, раздельные gates (statistics ≠ finance), rate-limit Redis, per-key dedup
  • Финансовый учёт: доходы, расходы, комиссии, налоги, отчёты реализации по всем маркетплейсам
  • Авто-валидация ключей: JWT-декодирование + seller-info при добавлении ключа WB
  • Многопользовательский: организации, роли (владелец/админ/менеджер/аналитик/наблюдатель)
  • Асинхронный: Django 6 + Gunicorn + Uvicorn + Celery + RabbitMQ + Redis (2 очереди: celery + advert)
  • Дашборд v1/v2: 12 графиков, фильтры, PDF-экспорт. v2 на агрегированных данных — в 200× быстрее
  • DailySummary: агрегированная таблица заказов/продаж (organization, nm_id, date, hour) — 1 запрос вместо 180+
  • 27 тестов ( все проходят), CI/CD через Forgejo Actions

Быстрый старт

# 1. Клонировать
git clone https://git.isdata.tech/ciger3a/mp-tool.git
cd mp-tool

# 2. Установка зависимостей
make install
# или: pip install -r requirements.txt

# 3. Настройка окружения
cp .env.example .env
# отредактировать .env под свою среду

# 4. Запустить Docker Compose
docker compose up -d

# 5. Применить миграции
docker compose exec web python manage.py migrate

# 6. Создать суперпользователя
docker compose exec web python manage.py createsuperuser

# 7. Настроить расписание Celery Beat
docker compose exec web python manage.py setup_schedule

Makefile команды

make test        # Запустить тесты
make lint        # Проверить код
make migrate     # Применить миграции
make shell       # Django shell
make up          # Docker Compose up
make down        # Docker Compose down
make rebuild     # Пересобрать и запустить
make coverage    # Отчёт покрытия тестами

Модули

accounts/       — Ядро платформы (Workspace, Policy, Audit, Organization)
wildberries/    — WB API (заказы, продажи, финансы, карточки, остатки, реклама)
ozon/           — Ozon API (заказы v3, финансы v1, начисления)
yandex_market/  — Яндекс.Маркет (заказы, API-ключи)
finance/        — Управленский учёт (транзакции, отчёты, дашборд)

Архитектура

Слойная модель доступа

Workspace → ResourceGroup → Resource → Policy → Audit
    └→ WorkspaceModule (интеграции)
    └→ WorkspaceMembership (роли)
    └→ ServiceAccount (API-ключи)

Workspace — корневая сущность. Всё в MP Tool происходит внутри рабочего пространства (изолированная среда). Каждая организация имеет свой Workspace.

User — кастомный AbstractUser. Связан с Organization через Membership (legacy), с Workspace через WorkspaceMembership.

WorkspaceMembership — пять ролей: owner (полный доступ), admin (управление), manager (управление ресурсами), analyst (доступ ко всем данным), viewer (только просмотр).

ResourceGroup — иерархия ресурсов через Nested Sets. Позволяет группировать данные (по брендам, отделам, проектам) и применять политики доступа на уровне группы.

Resource — единый реестр через GenericForeignKey. Любая бизнес-сущность (Order, Sale, API-ключ) регистрируется в Resource при сохранении.

Policy — RBAC + ABAC. Комбинация subject (кто), object (к чему), action (что), effect (разрешить/запретить). По умолчанию deny. Контекстные условия: время, IP, день недели.

AuditEntry — полный лог действий: create, update, delete, sync, export, login. Сохраняет before/after state, контекст запроса (IP, User-Agent).

WorkspaceModule — модульная система: wildberries, ozon, yandex_market, finance. Определяет активные интеграции для workspace.

ServiceAccount — API-токены для внешних систем с ограниченным scope и rate-limit.

Organization — legacy-модель для обратной совместимости (Phase 1). В будущем заменяется на Workspace. Сейчас связь 1:1 через workspace.

ResourceVersion — версионирование. Снапшоты каждой сущности при изменении для просмотра истории.

Три фазы развития

  • Phase 1 (сейчас): Organization + Workspace, дублирование ролей через Membership/WorkspaceMembership
  • Phase 2 (в планах): полная миграция на Workspace, удаление Organization
  • Phase 3: включение Policy evaluation + Audit middleware — ABAC/RBAC с логированием каждого действия
┌─────────────┐     ┌──────────┐     ┌───────────────┐
│  Traefik     │────▶│  Web      │────▶│  PostgreSQL 18 │
│  (HTTPS/L7)  │     │  Django 6 │     │  (192.168.1.41)│
└─────────────┘     └────┬─────┘     └───────────────┘
                         │
               ┌─────────┴──────────┐
               │                    │
        ┌──────▼──────┐    ┌───────▼───────┐
        │  RabbitMQ    │    │  Redis 8      │
        │  (брокер)    │    │  (кэш/результат)│
        └──────┬───────┘    └───────────────┘
               │
        ┌──────▼────────┐
        │  Celery Worker │
        │  (4 воркера)   │
        └───────────────┘

Стек

Компонент Технология
Backend Python 3.12, Django 6.0.5, Celery 5.6.3
Server Gunicorn 26.0.0 + Uvicorn 0.46.0 (ASGI)
Frontend Unfold (Tailwind), Chart.js, Playwright (PDF)
БД PostgreSQL 18.3 (выделенный сервер 192.168.1.41)
Брокер RabbitMQ 4.0 Management
Кэш Redis 8 (AOF)
Прокси Traefik v3.7.1 (авто HTTPS, Let's Encrypt)
S3 MinIO (https://minio.isdata.tech) — карточки товаров
Git Forgejo (https://git.isdata.tech)
CI/CD Forgejo Actions
Контейнеры Docker Compose (8 сервисов)

Версии

Версия Дата Описание
v2026.6.10 16.06.2026 Health Dashboard, мониторинг, алерты Telegram, PG tuning
v2026.6.8 15.06.2026 Разделение воркеров, мониторинг очередей
v2026.6.7 09.06.2026 OzonOrder unique constraint, стабильность
v2026.6.6 08.06.2026 OzonCard, OzonNomenclature, per-product реклама
v2026.6.5 08.06.2026 Ozon orders sync, PDF экспорт (только светлая), очередь ozon
v2026.6.4 04.06.2026 OzonProduct (фото, себестоимость, привязка), Ozon API v3, график отмен
v2026.6.3 02.06.2026 Математика прибыли, per-product реклама, AJAX-фильтры
v2026.6.2 02.06.2026 FinanceSummary, очереди, стабильность
v2026.5.17 29.05.2026 Дашборды: рефакторинг, Воронка реализации, фильтры
v2026.5.16 29.05.2026 Надёжность синхронизации, защита от переполнения очереди
v2026.5.15 26.05.2026 Production health, чистка git, дедупликация расписаний
v2026.5.14 22.05.2026 Health worker, DS автосинхронизация, бэкап PG
v2026.5.13 22.05.2026 Дашборд v2, баги фикс
v2026.5.12 22.05.2026 DailySummary + дашборд v2
v2026.5.11 22.05.2026 Баги фикс (WB crypto, Ozon finance, миграции)
v2026.5.10 22.05.2026 Ozon сайдбар, правки
v2026.5.9 21.05.2026 Ozon интеграция, фильтры
v2026.5.8 20.05.2026 Экспорт рекламы, дашборд
v2026.5.7 19.05.2026 PDF-экспорт, графики
v2026.5.6 19.05.2026 8 графиков дашборда, динамические фильтры
v2026.5.5 19.05.2026 Дашборд v1, фильтры AJAX
v2026.5.4 18.05.2026 WB реклама, Ozon финансы
v2026.5.3 17.05.2026 Миграция на PostgreSQL 18.3
v2026.5.1 16.05.2026 Рефакторинг, очистка проекта
v0.27.x 12-15.05.2026 Ozon заказы, остатки, баги фикс
v0.26.x 10-11.05.2026 Celery wiring, beat-задачи
v0.25.x 09.05.2026 Логи, докплой
v0.24.x 08.05.2026 P&L отчёты
v0.23.x 07.05.2026 SalesReportDetail фильтры, экспорт
v0.22.x 06.05.2026 Rate-limiter, ретро-синхронизация, Crypto
v0.21.x 05.05.2026 Unfold, кастомный admin
v0.20.x 04.05.2026 Celery, синхронизация WB
v0.19.x 03.05.2026 Многопользовательность

Деплой

# Prod-сервер (u24-sr1-soft)
ssh alex@192.168.1.40

# Скопировать обновления
docker compose -f /opt/mp-tool/docker-compose.prod.yml cp ...

# Рестарт сервиса
docker compose -f /opt/mp-tool/docker-compose.prod.yml restart web