Skip to content

1.11.21

🚀 Summary

Qogita catalog download now completes after upsert (analyze/Discord failures no longer mark the catalog failed). Stock uses Total Inventory of All Offers; EU decimals parse correctly. Discord targets-met Seller links open GTIN search (or homepage). Five prod supplier columns (parfumeria, bjutip, bratsy, soleluna, zaafaran) are wired into best-offer / schema.

✨ Details

Qogita catalog import

Area Behavior
Status Upsert → completed; analyze + Discord run after and cannot rewrite a good import to failed
Discord Sent from the analyze step (fresh EK/targets), not from CSV download alone
Logging Logs unique_eans, updated, inserted, cleared (and upserted=updated+inserted)
Stock Prefers Total Inventory of All Offers (fallback: Lowest Priced Offer Inventory)
Price EU 45,33 / 1.234,56, BOM headers, ,/;/\t delimiters

Wholesale suppliers

Area Behavior
Columns parfumeria_*, bjutip_*, bratsy_*, soleluna_*, zaafaran_* on wholesale_shopping_list
Best offer Included in WHOLESALE_SUPPLIERS for targets-met
Schema Startup ensure_wholesale_supplier_columns adds any missing *_preis / *_bestand pairs
Seller Link
Qogita qogita.com/categories/?query={gtin}
Nunu de.nunutrading.com/search.php?search_query={gtin}
Parfumeria parfumeria.store/search?q={gtin}
Rney rneydistribution.com/site/wholesale?ProductsSearch[main_search]={gtin}
Parfumtrend parfumtrend.com/catalogsearch/result/?q={gtin}
Parfum Wholesales m2.znzelectronics.cz/catalogsearch/result/?q={gtin}
Bjutip bjutip.com/...&search={gtin}
Bratsy wholesale.brasty.com/products?q={gtin}
Soleluna wholesale-perfumes.eu/search/?search={gtin}
Zaafaran zaafaran.eu/?s={gtin}&post_type=product

No public product search for Jadro, Polarmoda, Engelsa, B2B Luxury, Novaengel, Naypes, Nexalia — Seller stays plain text or homepage only.

📌 Notes

  • Redeploy service-omni. Apply docker/postgres/updates/add_wholesale_supplier_columns_2026_10.sql (or restart omni for the column patch).
  • Request a fresh Qogita catalog after deploy so stock refreshes to total inventory.

✅ Verify

  1. Request catalog → status completed; logs show upsert counts; Discord only after analyze.
  2. EAN 3614273069533 → qogita_preis=45.33, qogita_bestand=1740 (total inventory).
  3. Targets-met Discord: Seller for Qogita/Nunu/Bratsy/… is a clickable GTIN search link.
  4. pytest app/tests/test_qogita_catalog_unit.py app/tests/test_wholesale_offers.py app/tests/test_watchlist_links.py

📁 Files

  • backend/service_omni/app/services/qogita/catalog.py — parse, analyze Discord, upsert logging
  • backend/service_omni/app/crud/qogita_catalog.py — apply counts
  • backend/service_omni/app/services/qogita/wholesale_offers.py — suppliers + GTIN URLs
  • backend/service_omni/app/services/price_alerts/discord_notifications.py — seller links
  • backend/service_omni/app/schemas/wholesale_shopping_list.py
  • backend/service_omni/app/core/schema_patches.py, main.py
  • docker/postgres/updates/add_wholesale_supplier_columns_2026_10.sql
  • docker/postgres/tables/wholesales_shopping_list.sql
  • backend/service_omni/app/tests/test_qogita_catalog_unit.py, test_wholesale_offers.py, test_watchlist_links.py
  • docs/docs/patchnotes/1.11/1.11.21.md — this file