1.11.9
βοΈ Patch 1.11.9 β Otto % monitor MOIN reuse; Plenty base import + sync eval¶
π Summary¶
- Otto monitor β For SKUs with
%(e.g.OrdinaryAha30%Bha2%PeelingSolution30ml): reuse MOIN from DB; treat availability HTTP 400 as non-fatal. - Plenty base import β No longer drop variations on soft
bundleType/weightGquirks; newly imported SKUs always land insync_eval_*.json(and Discord). - Shopify/channel details β Fix SQLModel naive-datetime flush on create/update (
shopify_details.updated_at, etc.) so new imports likeRitualsAlchemyDuschschaum50ml2ercan get Shopify prices.
β¨ Details¶
Otto monitor (% SKUs)¶
| Area | Before | After |
|---|---|---|
| MOIN | Always re-fetched via products API | Skip re-fetch when product.moin is already set (from otto_details) |
| Quantity | Availability path β¦/quantities/{sku} β HTTP 400 aborted the whole monitor |
Soft-fail: continue without quantity |
| OOS skip | Relies on live qty | Unchanged when qty is known; % SKUs with unknown qty proceed (force monitor already allows qty 0) |
Plenty base import + sync eval¶
| Area | Before | After |
|---|---|---|
bundleType |
Defaulted to "none" β Pydantic ValidationError skipped the variation |
Coerce null / none / empty β None; only bundle / bundle_item kept |
weightG |
Fractional floats / empty strings failed parse | Round to int / treat empty as None |
| Article name | Only variation.name (often empty) |
Fall back to item texts[].name |
| Sync eval | Only βperfectβ SKUs (all sync steps OK + stock > 0) | Also every SKU in sync_base.created, even without buy price / stock 0 |
| Discord | No import count | Newly imported: N line |
Channel detail datetimes¶
| Area | Before | After |
|---|---|---|
shopify_details / FBM / FBA / Kaufland / base updated_at |
SQLModel UTCDateTime rejected Berlin-naive get_berlin_time() β insert failed, session poisoned |
sa_type=NAIVE_DATETIME; CRUD writes naive Berlin |
| Sync cascade | One Shopify insert error rolled back the whole Session β FBM/Otto/Kaufland sync also failed | Per-variant db.rollback() in sync_details_prices |
π Notes¶
- Redeploy service-multi-repricer.
- Otto example: quantity
HTTP 400while MOINM0034101ISwas already on the article. - After deploy, run base sync (or wait for cron) β
RitualsAlchemyDuschschaum50ml2ershould appear if present in PlentyONE. - Eval meta gains
newly_imported_count; per-SKU flagnewly_imported: true. - Re-sync SKU after deploy to create missing
shopify_detailsrows.
π Files¶
backend/service_multi-repricer/app/services/otto/otto_service.pybackend/service_multi-repricer/app/tests/test_otto_monitor_moin_reuse.pybackend/service_multi-repricer/app/models/repricer_articles.pybackend/service_multi-repricer/app/services/plenty/plenty_manager.pybackend/service_multi-repricer/app/api/v1/endpoints/repricer_articles.pybackend/service_multi-repricer/app/schemas/repricer_articles.pybackend/service_multi-repricer/app/crud/repricer_article.pybackend/service_multi-repricer/app/tests/test_plenty_base_import.pybackend/service_multi-repricer/app/tests/test_cron_sync_flow.pybackend/service_multi-repricer/app/tests/test_shopify_details_naive_datetime.pydocs/docs/services/service_multi_repricer/user_guide.mddocs/docs/patchnotes/1.11/1.11.9.mdβ this file