BR 3.3 — Catalog Service

Источники

Задачи

Миграция БД

  • Liquibase changeset 026-br-3-3-fiscal-fields.xml:
    ALTER TABLE products ADD COLUMN vat_rate VARCHAR(10) NOT NULL DEFAULT 'vat20';
    ALTER TABLE products ADD COLUMN payment_subject VARCHAR(20) NOT NULL DEFAULT 'goods';
    ALTER TABLE products ADD COLUMN payment_type VARCHAR(20) NOT NULL DEFAULT 'full';
     
    ALTER TABLE products ADD CONSTRAINT chk_products_vat_rate
      CHECK (vat_rate IN ('none','vat0','vat10','vat20','vat110','vat120'));
    ALTER TABLE products ADD CONSTRAINT chk_products_payment_subject
      CHECK (payment_subject IN ('goods','service','work','excise','job','payment','agency','composite','another'));
    ALTER TABLE products ADD CONSTRAINT chk_products_payment_type
      CHECK (payment_type IN ('full','prepay','advance','partial_prepay','credit','credit_pay','partial'));
  • Существующие записи получают default-значения через миграцию (NOT NULL DEFAULT делает это автоматически)

Entity

  • Product.java:
    • Добавить поля vatRate (String), paymentSubject (String), paymentType (String)
    • Аннотации @Column(name = "vat_rate", nullable = false) и т.д.
    • @PrePersist: дефолты если null

DTO

  • ProductCreateRequest.java — добавить опциональные поля vatRate, paymentSubject, paymentType@Pattern валидацией по enum’ам)
  • ProductUpdateRequest.java — аналогично
  • ProductResponse.java — добавить поля для отдачи клиенту

Enum валидация

  • Утилитарные константы enum’ов в com.erp.catalog.enums (VatRate, PaymentSubject, PaymentType) + сервер-сайд валидация что значения входят в разрешённые

API

  • POST /api/v1/products — принимает новые поля, сохраняет
  • PATCH /api/v1/products/{id} — обновляет если переданы
  • GET /api/v1/products/{id} — возвращает поля
  • GET /api/v1/products — возвращает в списке
  • GET /internal/catalog/menu — включает поля в items (используются Paykeeper Adapter при формировании fiscal_cart)

Internal endpoints

  • Нет новых — существующий GET /internal/catalog/menu и GET /internal/products/{id} автоматически обогащаются новыми полями через ResponseDTO

Тесты

  • Unit-тесты валидаторов enum’ов
  • Integration: создать товар с vat_rate=vat10 → получить через GET → проверить что сохранено
  • Миграция на dev-БД: проверить что default для существующих товаров — vat20/goods/full

Критерии приёмки

  • Миграция применяется без ошибок на dev-стенде
  • Создание товара через POST с новыми полями работает
  • Создание без полей — дефолты применяются
  • Невалидный enum (vat_rate=invalid) — 400 VALIDATION_ERROR
  • GET /internal/catalog/menu возвращает поля — используется Paykeeper Adapter при формировании invoice