BR 1.5 → Admin Franchise (BFF + Web)

Репозиторий: erp-admin (монорепо: bff/ + web/ + shared/) Фронт-спеки: planned — экраны будут созданы отдельно

BFF (bff/)

shared/ — типы

  • Типы: Store, StoreListItem, StoreCreateRequest, StoreUpdateRequest
  • Типы: StoreScheduleEntry, StoreStatus, StoreListParams, StoreOption
  • Экспорт из shared/src/index.ts

Прокси-эндпоинты

  • GET /api/v1/admin/stores → Store Service GET /api/v1/stores
  • GET /api/v1/admin/stores/{id} → Store Service GET /api/v1/stores/{id}
  • POST /api/v1/admin/stores → Store Service POST /api/v1/stores
  • PATCH /api/v1/admin/stores/{id} → Store Service PATCH /api/v1/stores/{id}
  • DELETE /api/v1/admin/stores/{id} → Store Service DELETE /api/v1/stores/{id}
  • POST /api/v1/admin/stores/{id}/publish → Store Service
  • POST /api/v1/admin/stores/{id}/unpublish → Store Service

Web (web/)

Список торговых точек

  • Страница /stores — таблица с колонками (Название, Адрес, ЮЛ, Статус, Город, Действия)
  • Фильтры (статус: draft/published/suspended, ЮЛ) + поиск (debounce 300ms)
  • Пагинация (20 на страницу)
  • Цветовые индикаторы статуса (draft — серый, published — зелёный, suspended — красный)
  • Меню действий строки (редактировать, опубликовать/снять, удалить)
  • Публикация/снятие без модалки (toast)
  • Модалка: удаление (с проверкой is_published)
  • Пустое состояние (“Торговые точки пока не добавлены”)
  • Ролевой доступ: Franchise — полный, остальные — ограниченный

Карточка торговой точки

  • Страница просмотра /stores/{id} — все поля, расписание, ЮЛ (ссылка)
  • Форма создания /stores/new — обязательные поля, выбор ЮЛ, координаты вручную
  • Форма редактирования /stores/{id}/edit — ЮЛ disabled, предзаполнение
  • Редактор расписания — 7 дней, toggle выходной, time picker, “одинаковый для всех”
  • Обработка ошибок: NAME_DUPLICATE, LEGAL_ENTITY_NOT_FOUND, LEGAL_ENTITY_IMMUTABLE, STORE_IS_PUBLISHED
  • Предупреждение при несохранённых изменениях