BR 3.3 — Catalog Service
Источники
- BR 3.3 §R9
- Data Model
- API
Задачи
Миграция БД
- 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