Перейти к основному содержимому

QUICKSTART — Продолжение работы с GWPTD Analytics

Текущий статус (2026-07-20)

Целевой контур: https://mp.hyp.ru/new на S3 Next. Опубликованный S3 checkout — ca8c38a3f75b330ec64827ae091e622b33ab1620; gwptd-app-new и gwptd-data-api healthy, а /new открывает /new/login с HTTP 200. Последний функциональный release — 10c720f (включая исправление quota для YM competitors); 4bd5b95 и ca8c38a являются documentation-only потомками.

Границы: S2 — read-only production oracle. Разработка идёт локально, проверяется на S3; S2 нельзя менять, деплоить, перезапускать или править там cron без отдельного явного OK владельца.

Блоки ниже про складские лимиты и PHP-коллектор — исторические заметки от 2026-02 для замороженного legacy /admin. Для текущей программы сначала читать AGENTS.md, затем CLAUDE.md и docs/remediation/README.md.

Что сделано

  • PHP app задеплоен на Hetzner (Docker, PHP 8.4 + Nginx + Supervisor)
  • 4 MP коллектора работают (WB, Ozon, Yandex, Lamoda)
  • Таблица warehouse_limits создана в MySQL
  • Filament CRUD для лимитов складов готов (admin → "Лимиты складов")
  • Excel с 118 складами отправлен менеджерам на заполнение

Что делать дальше

  1. Ждём заполненный Excel от менеджеровЛимиты_складов.xlsx

    • Когда получим — импортировать в warehouse_limits таблицу
    • Написать artisan-команду или скрипт для импорта из xlsx
  2. Логика планирования отгрузок — использовать лимиты при формировании заказов

    • Учитывать limit_qty (макс штук на склад)
    • Учитывать limit_rub (макс рублей на склад)
    • Учитывать notes (доп. ограничения)
    • Проверять is_active (отключенные склады пропускать)
  3. Lamoda API — ждём client_id + client_secret для полной интеграции

Быстрый старт разработки

# 1. SSH-туннель для MySQL
ssh -f -N -L 3307:127.0.0.1:3306 root@10.8.0.1

# 2. Dev-сервер
cd /Users/antonnozdrin/Projects/MISHA/gwptd-analytics
php artisan serve --port=8501

# 3. Дашборд: http://localhost:8501/admin

Деплой изменений

# Перед действием: получить точный live SHA S3 через mcp__gwptd__repo_status.
# Затем опубликовать нужный SHA в origin/next/spec-platform.

# S3: только защищённый root-owned deploy wrapper.
ssh s3-int /usr/local/sbin/gwptd-next-deploy --expected-sha <40-hex-commit>

# После deploy: только read-only проверка.
ssh s3-int 'cd /opt/gwptd-analytics/repo && git status --short --branch && git rev-parse HEAD'

Не использовать ручные git pull, bash deploy.sh, docker compose up, artisan migrate или замену cron на S3. S2 deploy возможен только по отдельному явному OK владельца.

Ключевые файлы для работы со складами

ФайлЗачем
app/Models/WarehouseLimit.phpМодель лимитов
app/Filament/Resources/WarehouseLimitResource.phpCRUD в админке
app/Services/Marketplace/MarketplaceCollectorService.phpСбор данных с МП
config/gwptd.phpБизнес-константы, API credentials
database/migrations/2026_02_11_000000_create_warehouse_limits_table.phpМиграция

Схема warehouse_limits

marketplace_id  tinyint unsigned  FK → marketplace_dict
warehouse_name varchar(255) Название из API
limit_qty int unsigned Макс штук (NULL = без лимита)
limit_rub decimal(12,2) Макс рублей (NULL = без лимита)
notes text Доп. ограничения
is_active boolean Вкл/выкл

Vestige

Перед любой работой по проекту искать контекст через mcp__vestige__search, а реальный код — через mcp__gwptd__rag_search. После важного решения, исправления или публикации сохранять краткий факт в mcp__vestige__smart_ingest. Полный порядок задан в AGENTS.md.

Важные детали

  • MySQL FK тип: marketplace_dict.marketplace_id = tinyint unsigned (не int!)
  • Docker подключается к MySQL через host.docker.internal (bind-address 0.0.0.0)
  • Wildberries warehouse_name = warehouse_id (одно и то же значение)
  • Ozon: есть aggregate типы (fbo/fbs/rfbs) + конкретные склады (РФЦ)
  • Yandex: warehouse_ID (FBS/FBY) в названии