Задача разработки: [INVENTORY-412] Реализация метода PATCH /api/v1/fridge/scan-tag (Поддержка режимов заморозки)
Карточка Jira Task для спринта: Атомарная доработка складского контура
Общая информация
- Эпик:
[BPDS-CORE] Разработка транзакционного кулинарного контура - Домен:
INVENTORY(Склад и Транзакционный учет) - ID Задачи:
INVENTORY-412 - Исполнитель: Назначается
- Статус: Реф refinement / Готов к разработке Текущий Статус: Ready for Dev
Контекст и Ссылки
Данная задача сфокусирована на обновлении существующего метода обработки смарт-меток. Необходимо добавить поддержку переменной калорийности и термодинамических режимов хранения (полка против морозилки).
Ссылки на документацию проекта:
- 📑 Архитектурная спецификация метода (API Contract): Документация: Метод POST/PATCH /api/v1/fridge/scan-tag
- 📐 Глобальный системный дизайн доменов: Документация: Домены и Топология Kafka проекта BPDS
Бизнес-требования (User Story & Use Cases)
Разработчику необходимо опираться на бизнес-логику, зафиксированную в Use Cases внутри архитектурной статьи метода:
- User Story: Я, как пользователь семейного или офис-аккаунта, хочу маркировать контейнеры флагом «Заморозка», чтобы система автоматически пересчитывала срок годности (радиоактивного распада) еды с учетом температурного коэффициента и присылала уведомления вовремя, предотвращая порчу.
- Use Case (Глубокая заморозка): Пользователь сканирует многоразовый QR-код
foodapp://container/c-772-alpha, выбирает режимstorage_mode: "FROZEN". Система запрашивает базовый период жизни блюда (например, 72 часа для Борща) и умножает его на внутренний коэффициент заморозки домена MDM (\(\times 10\)). Итоговыйexpires_atсдвигается на 30 дней.
Техническое задание для Разработчика
В рамках данной задачи необходимо реализовать следующие изменения в микросервисе warehouse-fridge-ops:
1. Слой Базы Данных (PostgreSQL / Alembic)
- Написать скрипт миграции Alembic для таблицы
fridge_containers. - Добавить новое поле
storage_modeтипаVARCHAR(20)илиENUMс допустимыми значениямиCHILLED,FROZEN. По дефолту выставитьCHILLED. - Добавить поле
updated_atс автоматическим обновлением поNOW().
2. Слой Валидации данных (FastAPI / Pydantic)
- Обновить Pydantic-модель запроса
ContainerTagRequest, добавив полеstorage_mode. - Обеспечить строгую валидацию ENUM. При передаче некорректного режима возвращать
HTTP 422 Unprocessable Entity(структуру ошибки см. в разделе Исключений документации метода).
3. Слой Бизнес-логики (Интеграция с MDM)
- Внедрить логику расчета: если
storage_mode == "FROZEN", применять повышающий временной коэффициент, извлекаемый из кэша мастер-данных. - Реализовать проверку мультитентовости: если контейнер уже занят другой группой (
home_group_id), выбрасывать кастомное исключениеERR-CONTAINER-OWNED-BY-OTHER-GROUPсо статусомHTTP 403 Forbidden.
4. Транспортный слой (Kafka)
- Обновить структуру payload сообщения, отправляемого в топик
bpds.inventory.fridge_item.deducted. - Убедиться, что в мета-заголовки (Kafka Headers) корректно прокидываются
home_group_idиaccount_type(HOME/OFFICE) для обеспечения изоляции данных.
Критерии приемки (Definition of Done)
Спецификация для QA Automation (Чек-лист автоматизации)
Автоматизатор тестирования (QA Automation) должен реализовать e2e и компонентные тесты в репозитории автотестов, проверяя следующие граничные условия контракта: