1.5.1
🩹 Patch 1.5.1 — FBA international_pricing persistence & repricing behavior
🚀 New Features
Dashboard: toggle ignore per marketplace on the FBA Articles page and persist it to the database.
Frontend ensures ignore is always included in PUT payloads for /api/v1/multi/articles/{sku}/fba.
Repricing program change: when a marketplace is not DE, the repricer now uses FBA_EFN logic for FBA articles (previous behaviour retained for DE).
🔧 Improvements
Backend now accepts typed FBACountryPricing inputs and tolerates Pydantic model instances when merging international_pricing.
Merge logic in update_fba_details normalizes incoming data, ensures every region has an explicit ignore flag, and merges min_bound / max_bound safely.
Defensive persistence: added a robust fallback using SQLAlchemy Core to force-update the international_pricing JSONB when a race overwrites the field.
Reduced noisy logging: retained essential info/error messages and moved verbose payload traces to debug level.
🐛 Bug Fixes
Fixed missing ignore persistence when updating FBA details from the dashboard — ignore=True now survives concurrent updates.
Fixed raw-SQL fallback that failed with psycopg2 can't adapt type 'dict' by using SQLAlchemy Core (proper JSONB binding).
Files changed
Notes for operators
No DB schema migration required for these fixes — we operate on the existing fba_details.international_pricing JSONB column.
If race conditions still surface in heavy concurrent environments, consider a transactional retry loop or explicit SELECT ... FOR UPDATE around the fba_details row during updates.
SQL
N/A (no new migrations in this patch; changes are behavioural and in-code only)