Appearance
Logidav catalog enrichment
This guide covers three Logidav FTP inputs that enrich Mosaikasa catalog data. They have different triggers and write to different records: two CSV commands fill missing product fields, while a scheduled JSONL command merges channel shipping amounts into connector resource data. Their source declarations do not prove that an FTP file exists or that a deployed scheduler or worker has run.
These commands named shopify:import-... use Logidav::getFtpConnection() and write Meduse catalog data. Their command names do not establish a Shopify API call.
Choose the input
| Input | Source trigger | File and format | Mosaikasa target |
|---|---|---|---|
| Product names | shopify:import-products-names-from-ftp; no schedule declaration found in the inspected core Kernel or Mosaikasa schedule provider | exported_products_with_names.csv; rows after the header are read as SKU and product name | Fill CatalogProduct.raw_values.name.fr_FR only when that locale value is empty |
| Parcel information | shopify:import-products-parcelinfos-from-ftp; no schedule declaration found in the inspected core Kernel or Mosaikasa schedule provider | exported_products_parcels.csv; rows after the header are read as SKU and parcel-info value | Fill CatalogProduct.raw_values.parcels_info.<all_channels> only when the shared value is empty or [] |
| Shipping amount | logidav:import-product-data-to-connector-ressource-data --mosaikasa-shipping-only; declared every five minutes with withoutOverlapping() in the application Kernel | connector-ressource-data.jsonl; one JSON object per line with sku and a stores array | Merge shipping_amount by channel into the Logidav ConnectorResourceData.infos record for the matching catalog product |
The two content commands have explicit CLI signatures, but their invocation path is not established by the inspected schedules. Treat them as available commands with an unknown trigger until the owning deployment or operator workflow is verified. The shipping-only branch is the scheduled path; the same command without that option follows a broader import branch and should not be substituted for it.
Product-name CSV
ImportProductsNamesFromFtp initializes the mosaikasa tenant, reads meduse/connectors/logidav/exported_products_with_names.csv, skips the first row, and interprets each remaining row as [SKU, product name]. It matches SKU to CatalogProduct.identifier. If raw_values.name.fr_FR is empty, it writes the supplied name there; an existing French name is left unchanged. A row with a missing SKU or name, or with an unknown SKU, is reported and skipped. Command source
The handler starts a database transaction for the CSV loop and commits after processing it. Row-level validation and missing-product errors do not abort that loop; an Exception reaches the catch and rolls the transaction back. After the loop it prints All products updated successfully even when rows were skipped, so that message is not per-row proof. The handler reads the FTP file but does not show a remote move, delete, or acknowledgement. A rerun will therefore read the same file if it remains available, while already populated French names are skipped.
Parcel-information CSV
ImportProductsParcelInfosFromFtp also initializes mosaikasa, reads meduse/connectors/logidav/exported_products_parcels.csv, skips its first row, and reads each remaining row as [SKU, parcel info]. It matches by CatalogProduct.identifier. It writes the value to raw_values.parcels_info.<all_channels> when that field is missing, empty, or the literal []; a nonempty shared value is preserved. The handler does not expand this shared fallback into locale or channel values. Command source
This command has the same broad failure shape as the name import: invalid rows and unknown SKUs are logged and skipped before the transaction commits; an Exception rolls back the loop. It also prints All products updated successfully after the loop even if it logged skipped rows, so use the row output and database readback to assess a non-production run. The source does not show a remote file move, delete, or acknowledgement.
Scheduled shipping-amount JSONL
The application Kernel declares logidav:import-product-data-to-connector-ressource-data --mosaikasa-shipping-only every five minutes with withoutOverlapping(). The handler reads /meduse/connectors/logidav/connector-ressource-data.jsonl, decodes each nonblank line as a JSON object, initializes the mosaikasa tenant, and requires an enabled connector with code logidav. Schedule · Shipping-only handler
For each row, the handler maps each stores[].store_id through catalog_channel to a channel code and takes that store’s shipping_amount. It matches the row’s SKU to CatalogProduct.identifier, then finds or creates that product’s Logidav ConnectorResourceData. ShippingAmountInfosMerger stores each amount under its channel as {value, currency: EUR} and merges it into the existing infos.shipping_amount object, preserving other connector info and channel entries not present in the input row. Channel mapping and merge
This path writes connector metadata, not CatalogProduct.raw_values. A missing file or disabled connector returns a nonzero result. Invalid JSON lines fail decoding before the row loop. Rows without the expected SKU/stores shape, rows with no mapped shipping amounts, and SKUs with no catalog product are skipped. Existing connector infos or shipping_amount values that cannot be decoded as objects raise an error. The shipping-only handler saves each changed resource row as it goes and does not wrap the whole file in one transaction, so a later error can follow earlier persisted rows. The handler does not show a remote file move, delete, or acknowledgement. Handler · Merge validation
Follow the neighboring data paths
- The broader new-product JSON and product-update CSV paths are documented under Logidav product handoffs.
- The separate stock, availability, price, and quantity feeds update catalog stock, availability, prices, or quantity through their own commands and file formats.
- The shared connector map explains connector and resource records; the application-kernel schedule inventory includes the five-minute shipping import declaration.
- For the UI and API routes that edit products directly, see the product workflow map and product editing guide.
Do not conflate the tenant (mosaikasa), the catalog channel/locale, and the connector destination. The name import targets the French locale, parcel information uses the shared <all_channels> slot, and shipping amounts are keyed by channel in connector metadata.
Non-production verification points
These are source-based checks for an isolated development or test environment; no import command or runtime flow was executed for this review. Use a disposable Mosaikasa fixture and a verified non-production FTP account and database.
- For names, include one SKU with an empty
name.fr_FR, one with an existing French name, and one unknown SKU. Confirm only the empty value changes and the row errors are visible in command output. - For parcel information, include an absent field, an empty or
[]shared value, a populated shared value, and an unknown SKU. Confirm the importer fills only the missing/empty shared field and leaves populated values intact. - For shipping, include two known channel IDs with amounts, a channel ID absent from the test catalog, a missing SKU, and an existing connector record with unrelated
infosfields. Confirm channel mapping, EUR value shape, preservation of otherinfosand existing channel amounts, and the missing-SKU/unmapped-channel behavior. - Check each command’s result and read back the affected tenant’s
raw_valuesor connectorinfos. Confirm the FTP file lifecycle separately; the reviewed handlers do not show a remote move, delete, or acknowledgement.
These handlers modify catalog or connector records. Do not run them against production without explicit approval for the exact command and target.
Evidence boundary
The code paths above were inspected at backend commit 5d3de6cb63b976aaeef739a8a7f288c4b46509ad with git show; scheduling details are declarations in source, not proof that a deployed scheduler executed them. No FTP connection, database, queue, deployment, or production environment was inspected. Source inspection does not establish the current file contents, credential identity, row counts, runtime configuration, or downstream consumer behavior.