Bump Version to 0.20.1

This commit is contained in:
2026-09-24 22:53:03 +03:00
parent 8f4156cfe8
commit 621381beaa
2 changed files with 38 additions and 1 deletions
+37
View File
@@ -4,6 +4,43 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
## [0.20.1] - 2026-09-24
### Fixed
- `Modules\Core\Catalog\Support\ProductDocumentLocalizer::withLocalizedFields()` — a translated
attribute (name, description, ...) saved blank for the current locale kept the empty string
instead of falling back to the store's default language, since `??` only falls back on a
missing/null key, not an empty one. A product with no English copy yet showed a blank
title/description on `/en/` instead of its Greek content.
- `Modules\Core\Command\WipeCatalogCommand` — now also deletes every `CartLine` referencing a
`product_variant` purchasable as part of the wipe (line items only, `Cart` records themselves
are left alone). Previously, any cart still holding a line for a wiped variant crashed the
entire storefront on every page load (`PricingManager::for()` throws when the variant a line
points at no longer exists) until those dangling lines were removed by hand.
- `Modules\Core\Command\MigrateImportCommand` now asks which language a Shopify export file's
own text is written in before importing, instead of silently assuming it matches the store's
default language — the two are independent facts, and a mismatch used to save every imported
product's name/description under the wrong language. Backing class renamed `DefaultLocale` →
`Modules\Core\MigrateImport\Services\ImportLocale` to stop implying that assumption.
### Changed
- `Modules\Core\MigrateImport` reorganized to match every other module's layout
(`Contracts/`, `DTOs/`, `Jobs/`, `Models/`, `Services/`) instead of loose files at each
namespace root — no behavior change, but every `use` of `Importer`, `ImportSpec`,
`ImporterFactory`, `ImportLocale`, `RunMigrateImportJob`, `ShopifyExportImporter`,
`ShopifyCsvReader`, `ProductGroup`, `JudgeMeExportImporter`, and `JudgeMeCsvReader` moved to
its new namespace.
- `Modules\Core\MigrateImport\Shopify\Services\ShopifyExportImporter::import()` now dispatches
one `Jobs\ImportShopifyProductJob` per product (via `Bus::batch()`) instead of importing every
product inline in a single queued job. A large export's variants, resolvers, and media
downloads accumulating in one long-lived process routinely exceeded `queue:work`'s
`--memory` limit; the worker died mid-run, the container restarted, and the entire import
started over from the first row every time, never actually finishing. Splitting into one job
per product resets memory between products, and a restart now only repeats whichever single
product was in flight. `Modules\Core\Catalog\Services\SkuBackfillService::backfill()` moved
from running right after the import loop to the batch's `then()` callback, since it must wait
for every product job to finish rather than firing the moment jobs are merely queued.
## [0.20.0] - 2026-09-23
### Added