BR 1.1 → User Service

Репозиторий: erp-user-service Контракты: API, Data Model

Задачи

Инфраструктура

  • Liquibase миграция: таблица legal_entities (все поля, индексы из Data Model)
  • Liquibase миграция: таблица import_previews (preview импорта)
  • Entity LegalEntity + ImportPreview (JPA)
  • Repository LegalEntityRepository + ImportPreviewRepository

Бизнес-логика

  • Валидация ИНН — проверка контрольной суммы (10 и 12 цифр, алгоритм ФНС)
  • Валидация масок (КПП 9 цифр, ОГРН 13/15, БИК 9, счета 20, телефон +7)
  • Логика is_primary — при назначении нового главного снимать старое
  • Soft delete — deleted_at, partial unique index на ИНН
  • Ролевой доступ: Franchise видит все, Franchisee только свои (по owner_user_id)
  • Franchisee ограничение: только legal_address, банк. реквизиты, контакты

HTTP-клиент к Store Service

  • Клиент: POST /internal/stores/count-by-legal-entities — batch-получение кол-ва ТТ
  • Клиент: GET /internal/stores?legal_entity_id={id} — список ТТ для проверки удаления
  • Клиент: POST /internal/stores/unpublish-by-legal-entity — снятие ТТ с публикации

Эндпоинты

  • GET /api/v1/legal-entities — список (пагинация, search, фильтры status/type, сортировка)
  • GET /api/v1/legal-entities/{id} — детали (включая store_count)
  • POST /api/v1/legal-entities — создание (валидация ИНН, дубликат)
  • PATCH /api/v1/legal-entities/{id} — обновление (ИНН immutable, ролевые ограничения)
  • DELETE /api/v1/legal-entities/{id} — soft delete (проверка ТТ через Store Service)
  • POST /api/v1/legal-entities/{id}/set-primary — назначить главным
  • POST /api/v1/legal-entities/{id}/suspend — приостановить (синхронный вызов Store Service)
  • POST /api/v1/legal-entities/{id}/resume — возобновить
  • POST /api/v1/legal-entities/import/preview — загрузка xlsx, валидация, сохранение в import_previews
  • POST /api/v1/legal-entities/import/{preview_id}/apply — применить импорт
  • GET /api/v1/legal-entities/import/template — скачать xlsx-шаблон
  • GET /internal/legal-entities/{id} — internal для других сервисов

Тестирование и запуск

  • Seed: тестовые ЮЛ (1 franchise primary, 2-3 franchisee с разными статусами)
  • Docker: обновить docker-compose.yml

JWT валидируется локально (HS256 + shared secret). Auth Service отложен.