Skip to content

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 ​

InputSource triggerFile and formatMosaikasa target
Product namesshopify:import-products-names-from-ftp; no schedule declaration found in the inspected core Kernel or Mosaikasa schedule providerexported_products_with_names.csv; rows after the header are read as SKU and product nameFill CatalogProduct.raw_values.name.fr_FR only when that locale value is empty
Parcel informationshopify:import-products-parcelinfos-from-ftp; no schedule declaration found in the inspected core Kernel or Mosaikasa schedule providerexported_products_parcels.csv; rows after the header are read as SKU and parcel-info valueFill CatalogProduct.raw_values.parcels_info.<all_channels> only when the shared value is empty or []
Shipping amountlogidav:import-product-data-to-connector-ressource-data --mosaikasa-shipping-only; declared every five minutes with withoutOverlapping() in the application Kernelconnector-ressource-data.jsonl; one JSON object per line with sku and a stores arrayMerge 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 ​

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.

  1. 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.
  2. 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.
  3. 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 infos fields. Confirm channel mapping, EUR value shape, preservation of other infos and existing channel amounts, and the missing-SKU/unmapped-channel behavior.
  4. Check each command’s result and read back the affected tenant’s raw_values or connector infos. 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.

Internal developer documentation for Menzzo systems.