@endora-commerce/mod-catalog 0.100.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +63 -0
- package/dist/admin/components/PackagingUnitsEditor.d.ts +12 -0
- package/dist/admin/components/PackagingUnitsEditor.d.ts.map +1 -0
- package/dist/admin/components/PackagingUnitsEditor.js +99 -0
- package/dist/admin/components/PackagingUnitsEditor.js.map +1 -0
- package/dist/admin/components/ProductAttributesTab.d.ts +13 -0
- package/dist/admin/components/ProductAttributesTab.d.ts.map +1 -0
- package/dist/admin/components/ProductAttributesTab.js +140 -0
- package/dist/admin/components/ProductAttributesTab.js.map +1 -0
- package/dist/admin/components/ProductInventoryTab.d.ts +14 -0
- package/dist/admin/components/ProductInventoryTab.d.ts.map +1 -0
- package/dist/admin/components/ProductInventoryTab.js +284 -0
- package/dist/admin/components/ProductInventoryTab.js.map +1 -0
- package/dist/admin/components/ProductScopeEditor.d.ts +94 -0
- package/dist/admin/components/ProductScopeEditor.d.ts.map +1 -0
- package/dist/admin/components/ProductScopeEditor.js +395 -0
- package/dist/admin/components/ProductScopeEditor.js.map +1 -0
- package/dist/admin/components/ProductsBulkEditDialog.d.ts +11 -0
- package/dist/admin/components/ProductsBulkEditDialog.d.ts.map +1 -0
- package/dist/admin/components/ProductsBulkEditDialog.js +304 -0
- package/dist/admin/components/ProductsBulkEditDialog.js.map +1 -0
- package/dist/admin/index.d.ts +45 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +184 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/lib/resolve-product-selection.d.ts +21 -0
- package/dist/admin/lib/resolve-product-selection.d.ts.map +1 -0
- package/dist/admin/lib/resolve-product-selection.js +25 -0
- package/dist/admin/lib/resolve-product-selection.js.map +1 -0
- package/dist/admin/pages/AttachmentTypesPage.d.ts +18 -0
- package/dist/admin/pages/AttachmentTypesPage.d.ts.map +1 -0
- package/dist/admin/pages/AttachmentTypesPage.js +92 -0
- package/dist/admin/pages/AttachmentTypesPage.js.map +1 -0
- package/dist/admin/pages/AttributeSetsPage.d.ts +21 -0
- package/dist/admin/pages/AttributeSetsPage.d.ts.map +1 -0
- package/dist/admin/pages/AttributeSetsPage.js +158 -0
- package/dist/admin/pages/AttributeSetsPage.js.map +1 -0
- package/dist/admin/pages/AttributesManager.d.ts +9 -0
- package/dist/admin/pages/AttributesManager.d.ts.map +1 -0
- package/dist/admin/pages/AttributesManager.js +305 -0
- package/dist/admin/pages/AttributesManager.js.map +1 -0
- package/dist/admin/pages/BulkOperationDetailPage.d.ts +9 -0
- package/dist/admin/pages/BulkOperationDetailPage.d.ts.map +1 -0
- package/dist/admin/pages/BulkOperationDetailPage.js +187 -0
- package/dist/admin/pages/BulkOperationDetailPage.js.map +1 -0
- package/dist/admin/pages/BulkOperationsPage.d.ts +9 -0
- package/dist/admin/pages/BulkOperationsPage.d.ts.map +1 -0
- package/dist/admin/pages/BulkOperationsPage.js +98 -0
- package/dist/admin/pages/BulkOperationsPage.js.map +1 -0
- package/dist/admin/pages/CategoriesTree.d.ts +9 -0
- package/dist/admin/pages/CategoriesTree.d.ts.map +1 -0
- package/dist/admin/pages/CategoriesTree.js +176 -0
- package/dist/admin/pages/CategoriesTree.js.map +1 -0
- package/dist/admin/pages/ProductEditor.d.ts +13 -0
- package/dist/admin/pages/ProductEditor.d.ts.map +1 -0
- package/dist/admin/pages/ProductEditor.js +1050 -0
- package/dist/admin/pages/ProductEditor.js.map +1 -0
- package/dist/admin/pages/ProductsList.d.ts +9 -0
- package/dist/admin/pages/ProductsList.d.ts.map +1 -0
- package/dist/admin/pages/ProductsList.js +399 -0
- package/dist/admin/pages/ProductsList.js.map +1 -0
- package/dist/backend/commands/attribute-commands.d.ts +111 -0
- package/dist/backend/commands/attribute-commands.d.ts.map +1 -0
- package/dist/backend/commands/attribute-commands.js +482 -0
- package/dist/backend/commands/attribute-commands.js.map +1 -0
- package/dist/backend/demo/reset.d.ts +23 -0
- package/dist/backend/demo/reset.d.ts.map +1 -0
- package/dist/backend/demo/reset.js +41 -0
- package/dist/backend/demo/reset.js.map +1 -0
- package/dist/backend/demo/rows.d.ts +103 -0
- package/dist/backend/demo/rows.d.ts.map +1 -0
- package/dist/backend/demo/rows.js +162 -0
- package/dist/backend/demo/rows.js.map +1 -0
- package/dist/backend/demo/seed.d.ts +35 -0
- package/dist/backend/demo/seed.d.ts.map +1 -0
- package/dist/backend/demo/seed.js +177 -0
- package/dist/backend/demo/seed.js.map +1 -0
- package/dist/backend/entities/attachment-type.entity.d.ts +16 -0
- package/dist/backend/entities/attachment-type.entity.d.ts.map +1 -0
- package/dist/backend/entities/attachment-type.entity.js +57 -0
- package/dist/backend/entities/attachment-type.entity.js.map +1 -0
- package/dist/backend/entities/attribute-set-attribute.entity.d.ts +26 -0
- package/dist/backend/entities/attribute-set-attribute.entity.d.ts.map +1 -0
- package/dist/backend/entities/attribute-set-attribute.entity.js +55 -0
- package/dist/backend/entities/attribute-set-attribute.entity.js.map +1 -0
- package/dist/backend/entities/attribute-set.entity.d.ts +22 -0
- package/dist/backend/entities/attribute-set.entity.d.ts.map +1 -0
- package/dist/backend/entities/attribute-set.entity.js +67 -0
- package/dist/backend/entities/attribute-set.entity.js.map +1 -0
- package/dist/backend/entities/bulk-operation.entity.d.ts +78 -0
- package/dist/backend/entities/bulk-operation.entity.d.ts.map +1 -0
- package/dist/backend/entities/bulk-operation.entity.js +138 -0
- package/dist/backend/entities/bulk-operation.entity.js.map +1 -0
- package/dist/backend/entities/bundle-slot-option.entity.d.ts +23 -0
- package/dist/backend/entities/bundle-slot-option.entity.d.ts.map +1 -0
- package/dist/backend/entities/bundle-slot-option.entity.js +68 -0
- package/dist/backend/entities/bundle-slot-option.entity.js.map +1 -0
- package/dist/backend/entities/bundle-slot.entity.d.ts +25 -0
- package/dist/backend/entities/bundle-slot.entity.d.ts.map +1 -0
- package/dist/backend/entities/bundle-slot.entity.js +74 -0
- package/dist/backend/entities/bundle-slot.entity.js.map +1 -0
- package/dist/backend/entities/category.entity.d.ts +26 -0
- package/dist/backend/entities/category.entity.d.ts.map +1 -0
- package/dist/backend/entities/category.entity.js +119 -0
- package/dist/backend/entities/category.entity.js.map +1 -0
- package/dist/backend/entities/gallery-item-label.entity.d.ts +22 -0
- package/dist/backend/entities/gallery-item-label.entity.d.ts.map +1 -0
- package/dist/backend/entities/gallery-item-label.entity.js +50 -0
- package/dist/backend/entities/gallery-item-label.entity.js.map +1 -0
- package/dist/backend/entities/gallery-item.entity.d.ts +17 -0
- package/dist/backend/entities/gallery-item.entity.d.ts.map +1 -0
- package/dist/backend/entities/gallery-item.entity.js +58 -0
- package/dist/backend/entities/gallery-item.entity.js.map +1 -0
- package/dist/backend/entities/grouped-item.entity.d.ts +23 -0
- package/dist/backend/entities/grouped-item.entity.d.ts.map +1 -0
- package/dist/backend/entities/grouped-item.entity.js +68 -0
- package/dist/backend/entities/grouped-item.entity.js.map +1 -0
- package/dist/backend/entities/product-attachment.entity.d.ts +23 -0
- package/dist/backend/entities/product-attachment.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-attachment.entity.js +77 -0
- package/dist/backend/entities/product-attachment.entity.js.map +1 -0
- package/dist/backend/entities/product-attribute.entity.d.ts +72 -0
- package/dist/backend/entities/product-attribute.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-attribute.entity.js +161 -0
- package/dist/backend/entities/product-attribute.entity.js.map +1 -0
- package/dist/backend/entities/product-editor-preference.entity.d.ts +28 -0
- package/dist/backend/entities/product-editor-preference.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-editor-preference.entity.js +63 -0
- package/dist/backend/entities/product-editor-preference.entity.js.map +1 -0
- package/dist/backend/entities/product-link.entity.d.ts +25 -0
- package/dist/backend/entities/product-link.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-link.entity.js +70 -0
- package/dist/backend/entities/product-link.entity.js.map +1 -0
- package/dist/backend/entities/product-packaging-unit.entity.d.ts +26 -0
- package/dist/backend/entities/product-packaging-unit.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-packaging-unit.entity.js +76 -0
- package/dist/backend/entities/product-packaging-unit.entity.js.map +1 -0
- package/dist/backend/entities/product-value-override.entity.d.ts +43 -0
- package/dist/backend/entities/product-value-override.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-value-override.entity.js +90 -0
- package/dist/backend/entities/product-value-override.entity.js.map +1 -0
- package/dist/backend/entities/product-variant.entity.d.ts +18 -0
- package/dist/backend/entities/product-variant.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-variant.entity.js +68 -0
- package/dist/backend/entities/product-variant.entity.js.map +1 -0
- package/dist/backend/entities/product.entity.d.ts +108 -0
- package/dist/backend/entities/product.entity.d.ts.map +1 -0
- package/dist/backend/entities/product.entity.js +230 -0
- package/dist/backend/entities/product.entity.js.map +1 -0
- package/dist/backend/index.d.ts +262 -0
- package/dist/backend/index.d.ts.map +1 -0
- package/dist/backend/index.js +642 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/plugin.d.ts +216 -0
- package/dist/backend/plugin.d.ts.map +1 -0
- package/dist/backend/plugin.js +223 -0
- package/dist/backend/plugin.js.map +1 -0
- package/dist/backend/prompt-tools.d.ts +47 -0
- package/dist/backend/prompt-tools.d.ts.map +1 -0
- package/dist/backend/prompt-tools.js +284 -0
- package/dist/backend/prompt-tools.js.map +1 -0
- package/dist/backend/routes.admin.d.ts +105 -0
- package/dist/backend/routes.admin.d.ts.map +1 -0
- package/dist/backend/routes.admin.js +1162 -0
- package/dist/backend/routes.admin.js.map +1 -0
- package/dist/backend/routes.api-key.d.ts +33 -0
- package/dist/backend/routes.api-key.d.ts.map +1 -0
- package/dist/backend/routes.api-key.js +43 -0
- package/dist/backend/routes.api-key.js.map +1 -0
- package/dist/backend/routes.external.d.ts +32 -0
- package/dist/backend/routes.external.d.ts.map +1 -0
- package/dist/backend/routes.external.js +115 -0
- package/dist/backend/routes.external.js.map +1 -0
- package/dist/backend/routes.public.d.ts +46 -0
- package/dist/backend/routes.public.d.ts.map +1 -0
- package/dist/backend/routes.public.js +318 -0
- package/dist/backend/routes.public.js.map +1 -0
- package/dist/backend/services/asset-references.d.ts +4 -0
- package/dist/backend/services/asset-references.d.ts.map +1 -0
- package/dist/backend/services/asset-references.js +104 -0
- package/dist/backend/services/asset-references.js.map +1 -0
- package/dist/backend/services/attachment.service.d.ts +45 -0
- package/dist/backend/services/attachment.service.d.ts.map +1 -0
- package/dist/backend/services/attachment.service.js +268 -0
- package/dist/backend/services/attachment.service.js.map +1 -0
- package/dist/backend/services/attribute-option-validator.d.ts +47 -0
- package/dist/backend/services/attribute-option-validator.d.ts.map +1 -0
- package/dist/backend/services/attribute-option-validator.js +69 -0
- package/dist/backend/services/attribute-option-validator.js.map +1 -0
- package/dist/backend/services/attribute-set-validations.d.ts +65 -0
- package/dist/backend/services/attribute-set-validations.d.ts.map +1 -0
- package/dist/backend/services/attribute-set-validations.js +89 -0
- package/dist/backend/services/attribute-set-validations.js.map +1 -0
- package/dist/backend/services/attribute-set.service.d.ts +50 -0
- package/dist/backend/services/attribute-set.service.d.ts.map +1 -0
- package/dist/backend/services/attribute-set.service.js +401 -0
- package/dist/backend/services/attribute-set.service.js.map +1 -0
- package/dist/backend/services/attribute-type-mapping.d.ts +66 -0
- package/dist/backend/services/attribute-type-mapping.d.ts.map +1 -0
- package/dist/backend/services/attribute-type-mapping.js +121 -0
- package/dist/backend/services/attribute-type-mapping.js.map +1 -0
- package/dist/backend/services/attribute-value-key.service.d.ts +48 -0
- package/dist/backend/services/attribute-value-key.service.d.ts.map +1 -0
- package/dist/backend/services/attribute-value-key.service.js +118 -0
- package/dist/backend/services/attribute-value-key.service.js.map +1 -0
- package/dist/backend/services/audit-references.d.ts +13 -0
- package/dist/backend/services/audit-references.d.ts.map +1 -0
- package/dist/backend/services/audit-references.js +51 -0
- package/dist/backend/services/audit-references.js.map +1 -0
- package/dist/backend/services/bulk-operation-queue.d.ts +26 -0
- package/dist/backend/services/bulk-operation-queue.d.ts.map +1 -0
- package/dist/backend/services/bulk-operation-queue.js +34 -0
- package/dist/backend/services/bulk-operation-queue.js.map +1 -0
- package/dist/backend/services/bulk-operation.service.d.ts +195 -0
- package/dist/backend/services/bulk-operation.service.d.ts.map +1 -0
- package/dist/backend/services/bulk-operation.service.js +510 -0
- package/dist/backend/services/bulk-operation.service.js.map +1 -0
- package/dist/backend/services/bundle.service.d.ts +87 -0
- package/dist/backend/services/bundle.service.d.ts.map +1 -0
- package/dist/backend/services/bundle.service.js +286 -0
- package/dist/backend/services/bundle.service.js.map +1 -0
- package/dist/backend/services/catalog-admin.service.d.ts +398 -0
- package/dist/backend/services/catalog-admin.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-admin.service.js +1516 -0
- package/dist/backend/services/catalog-admin.service.js.map +1 -0
- package/dist/backend/services/catalog-attribute-read.service.d.ts +78 -0
- package/dist/backend/services/catalog-attribute-read.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-attribute-read.service.js +216 -0
- package/dist/backend/services/catalog-attribute-read.service.js.map +1 -0
- package/dist/backend/services/catalog-bulk-import.service.d.ts +30 -0
- package/dist/backend/services/catalog-bulk-import.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-bulk-import.service.js +136 -0
- package/dist/backend/services/catalog-bulk-import.service.js.map +1 -0
- package/dist/backend/services/catalog-bulk-update.service.d.ts +91 -0
- package/dist/backend/services/catalog-bulk-update.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-bulk-update.service.js +330 -0
- package/dist/backend/services/catalog-bulk-update.service.js.map +1 -0
- package/dist/backend/services/catalog-category-read.service.d.ts +66 -0
- package/dist/backend/services/catalog-category-read.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-category-read.service.js +248 -0
- package/dist/backend/services/catalog-category-read.service.js.map +1 -0
- package/dist/backend/services/catalog-org-price-decorator.d.ts +90 -0
- package/dist/backend/services/catalog-org-price-decorator.d.ts.map +1 -0
- package/dist/backend/services/catalog-org-price-decorator.js +184 -0
- package/dist/backend/services/catalog-org-price-decorator.js.map +1 -0
- package/dist/backend/services/catalog-product-filter.service.d.ts +82 -0
- package/dist/backend/services/catalog-product-filter.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-product-filter.service.js +275 -0
- package/dist/backend/services/catalog-product-filter.service.js.map +1 -0
- package/dist/backend/services/catalog-product-read.service.d.ts +46 -0
- package/dist/backend/services/catalog-product-read.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-product-read.service.js +197 -0
- package/dist/backend/services/catalog-product-read.service.js.map +1 -0
- package/dist/backend/services/catalog-query.service.d.ts +444 -0
- package/dist/backend/services/catalog-query.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-query.service.js +1633 -0
- package/dist/backend/services/catalog-query.service.js.map +1 -0
- package/dist/backend/services/catalog-quick-search.service.d.ts +78 -0
- package/dist/backend/services/catalog-quick-search.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-quick-search.service.js +159 -0
- package/dist/backend/services/catalog-quick-search.service.js.map +1 -0
- package/dist/backend/services/catalog-write-ports.d.ts +25 -0
- package/dist/backend/services/catalog-write-ports.d.ts.map +1 -0
- package/dist/backend/services/catalog-write-ports.js +63 -0
- package/dist/backend/services/catalog-write-ports.js.map +1 -0
- package/dist/backend/services/category-admin.service.d.ts +102 -0
- package/dist/backend/services/category-admin.service.d.ts.map +1 -0
- package/dist/backend/services/category-admin.service.js +271 -0
- package/dist/backend/services/category-admin.service.js.map +1 -0
- package/dist/backend/services/gallery.service.d.ts +85 -0
- package/dist/backend/services/gallery.service.d.ts.map +1 -0
- package/dist/backend/services/gallery.service.js +326 -0
- package/dist/backend/services/gallery.service.js.map +1 -0
- package/dist/backend/services/grouped.service.d.ts +39 -0
- package/dist/backend/services/grouped.service.d.ts.map +1 -0
- package/dist/backend/services/grouped.service.js +136 -0
- package/dist/backend/services/grouped.service.js.map +1 -0
- package/dist/backend/services/label-resolver.d.ts +16 -0
- package/dist/backend/services/label-resolver.d.ts.map +1 -0
- package/dist/backend/services/label-resolver.js +43 -0
- package/dist/backend/services/label-resolver.js.map +1 -0
- package/dist/backend/services/packaging-unit.service.d.ts +28 -0
- package/dist/backend/services/packaging-unit.service.d.ts.map +1 -0
- package/dist/backend/services/packaging-unit.service.js +197 -0
- package/dist/backend/services/packaging-unit.service.js.map +1 -0
- package/dist/backend/services/primary-asset-url.d.ts +4 -0
- package/dist/backend/services/primary-asset-url.d.ts.map +1 -0
- package/dist/backend/services/primary-asset-url.js +55 -0
- package/dist/backend/services/primary-asset-url.js.map +1 -0
- package/dist/backend/services/product-editor-preferences.service.d.ts +20 -0
- package/dist/backend/services/product-editor-preferences.service.d.ts.map +1 -0
- package/dist/backend/services/product-editor-preferences.service.js +44 -0
- package/dist/backend/services/product-editor-preferences.service.js.map +1 -0
- package/dist/backend/services/product-link.service.d.ts +169 -0
- package/dist/backend/services/product-link.service.d.ts.map +1 -0
- package/dist/backend/services/product-link.service.js +297 -0
- package/dist/backend/services/product-link.service.js.map +1 -0
- package/dist/backend/services/product-overrides.service.d.ts +77 -0
- package/dist/backend/services/product-overrides.service.d.ts.map +1 -0
- package/dist/backend/services/product-overrides.service.js +204 -0
- package/dist/backend/services/product-overrides.service.js.map +1 -0
- package/dist/backend/services/product-scope-context.service.d.ts +36 -0
- package/dist/backend/services/product-scope-context.service.d.ts.map +1 -0
- package/dist/backend/services/product-scope-context.service.js +106 -0
- package/dist/backend/services/product-scope-context.service.js.map +1 -0
- package/dist/backend/services/product-type-validations.d.ts +42 -0
- package/dist/backend/services/product-type-validations.d.ts.map +1 -0
- package/dist/backend/services/product-type-validations.js +55 -0
- package/dist/backend/services/product-type-validations.js.map +1 -0
- package/dist/backend/services/product-value-resolver.service.d.ts +59 -0
- package/dist/backend/services/product-value-resolver.service.d.ts.map +1 -0
- package/dist/backend/services/product-value-resolver.service.js +111 -0
- package/dist/backend/services/product-value-resolver.service.js.map +1 -0
- package/dist/backend/services/system-attribute-scopes.d.ts +18 -0
- package/dist/backend/services/system-attribute-scopes.d.ts.map +1 -0
- package/dist/backend/services/system-attribute-scopes.js +18 -0
- package/dist/backend/services/system-attribute-scopes.js.map +1 -0
- package/dist/backend/services/viewer-organization.d.ts +25 -0
- package/dist/backend/services/viewer-organization.d.ts.map +1 -0
- package/dist/backend/services/viewer-organization.js +31 -0
- package/dist/backend/services/viewer-organization.js.map +1 -0
- package/dist/manifest.d.ts +204 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +686 -0
- package/dist/manifest.js.map +1 -0
- package/dist/migrations/20260429T064146_catalog_attribute_sets_init.d.ts +33 -0
- package/dist/migrations/20260429T064146_catalog_attribute_sets_init.d.ts.map +1 -0
- package/dist/migrations/20260429T064146_catalog_attribute_sets_init.js +118 -0
- package/dist/migrations/20260429T064146_catalog_attribute_sets_init.js.map +1 -0
- package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.d.ts +24 -0
- package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.d.ts.map +1 -0
- package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.js +31 -0
- package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.js.map +1 -0
- package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.d.ts +32 -0
- package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.d.ts.map +1 -0
- package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.js +58 -0
- package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.js.map +1 -0
- package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.d.ts +22 -0
- package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.d.ts.map +1 -0
- package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.js +66 -0
- package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.js.map +1 -0
- package/dist/migrations/20260429T112543_catalog_product_attachments.d.ts +18 -0
- package/dist/migrations/20260429T112543_catalog_product_attachments.d.ts.map +1 -0
- package/dist/migrations/20260429T112543_catalog_product_attachments.js +73 -0
- package/dist/migrations/20260429T112543_catalog_product_attachments.js.map +1 -0
- package/dist/migrations/20260429T123726_catalog_product_links.d.ts +21 -0
- package/dist/migrations/20260429T123726_catalog_product_links.d.ts.map +1 -0
- package/dist/migrations/20260429T123726_catalog_product_links.js +48 -0
- package/dist/migrations/20260429T123726_catalog_product_links.js.map +1 -0
- package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.d.ts +23 -0
- package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.d.ts.map +1 -0
- package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.js +94 -0
- package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.js.map +1 -0
- package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.d.ts +24 -0
- package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.d.ts.map +1 -0
- package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.js +31 -0
- package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.js.map +1 -0
- package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.d.ts +31 -0
- package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.d.ts.map +1 -0
- package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.js +133 -0
- package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.js.map +1 -0
- package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.d.ts +16 -0
- package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.d.ts.map +1 -0
- package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.js +23 -0
- package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.js.map +1 -0
- package/dist/migrations/20260526T124736_catalog_product_status_inactive.d.ts +10 -0
- package/dist/migrations/20260526T124736_catalog_product_status_inactive.d.ts.map +1 -0
- package/dist/migrations/20260526T124736_catalog_product_status_inactive.js +22 -0
- package/dist/migrations/20260526T124736_catalog_product_status_inactive.js.map +1 -0
- package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.d.ts +38 -0
- package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.d.ts.map +1 -0
- package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.js +98 -0
- package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.js.map +1 -0
- package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.d.ts +13 -0
- package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.d.ts.map +1 -0
- package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.js +17 -0
- package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.js.map +1 -0
- package/dist/migrations/20260611T140407_catalog_bulk_operations.d.ts +16 -0
- package/dist/migrations/20260611T140407_catalog_bulk_operations.d.ts.map +1 -0
- package/dist/migrations/20260611T140407_catalog_bulk_operations.js +42 -0
- package/dist/migrations/20260611T140407_catalog_bulk_operations.js.map +1 -0
- package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.d.ts +14 -0
- package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.d.ts.map +1 -0
- package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.js +18 -0
- package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.js.map +1 -0
- package/dist/migrations/20260611T140412_catalog_product_packaging_units.d.ts +11 -0
- package/dist/migrations/20260611T140412_catalog_product_packaging_units.d.ts.map +1 -0
- package/dist/migrations/20260611T140412_catalog_product_packaging_units.js +29 -0
- package/dist/migrations/20260611T140412_catalog_product_packaging_units.js.map +1 -0
- package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.d.ts +23 -0
- package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.d.ts.map +1 -0
- package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.js +35 -0
- package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.js.map +1 -0
- package/dist/migrations/20260718T200343_catalog_category_custom_field_values.d.ts +12 -0
- package/dist/migrations/20260718T200343_catalog_category_custom_field_values.d.ts.map +1 -0
- package/dist/migrations/20260718T200343_catalog_category_custom_field_values.js +16 -0
- package/dist/migrations/20260718T200343_catalog_category_custom_field_values.js.map +1 -0
- package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.d.ts +32 -0
- package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.d.ts.map +1 -0
- package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.js +286 -0
- package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.js.map +1 -0
- package/dist/migrations/20260804T152604_catalog_widen_product_sku.d.ts +36 -0
- package/dist/migrations/20260804T152604_catalog_widen_product_sku.d.ts.map +1 -0
- package/dist/migrations/20260804T152604_catalog_widen_product_sku.js +63 -0
- package/dist/migrations/20260804T152604_catalog_widen_product_sku.js.map +1 -0
- package/dist/migrations/20260804T160244_catalog_category_activation.d.ts +18 -0
- package/dist/migrations/20260804T160244_catalog_category_activation.d.ts.map +1 -0
- package/dist/migrations/20260804T160244_catalog_category_activation.js +22 -0
- package/dist/migrations/20260804T160244_catalog_category_activation.js.map +1 -0
- package/dist/migrations/20260912T094557_catalog_sales_channel_products.d.ts +27 -0
- package/dist/migrations/20260912T094557_catalog_sales_channel_products.d.ts.map +1 -0
- package/dist/migrations/20260912T094557_catalog_sales_channel_products.js +44 -0
- package/dist/migrations/20260912T094557_catalog_sales_channel_products.js.map +1 -0
- package/dist/migrations/20260912T094623_catalog_sales_channel_categories.d.ts +27 -0
- package/dist/migrations/20260912T094623_catalog_sales_channel_categories.d.ts.map +1 -0
- package/dist/migrations/20260912T094623_catalog_sales_channel_categories.js +44 -0
- package/dist/migrations/20260912T094623_catalog_sales_channel_categories.js.map +1 -0
- package/dist/migrations/20260925T125527_catalog_inventory_columns.d.ts +36 -0
- package/dist/migrations/20260925T125527_catalog_inventory_columns.d.ts.map +1 -0
- package/dist/migrations/20260925T125527_catalog_inventory_columns.js +87 -0
- package/dist/migrations/20260925T125527_catalog_inventory_columns.js.map +1 -0
- package/dist/migrations/index.d.ts +55 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +80 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/ports/index.d.ts +96 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +2 -0
- package/dist/ports/index.js.map +1 -0
- package/docs/catalog/attachments.md +69 -0
- package/docs/catalog/attribute-sets.md +63 -0
- package/docs/catalog/attributes.md +244 -0
- package/docs/catalog/composite-products.md +115 -0
- package/docs/catalog/gallery-and-labels.md +73 -0
- package/docs/catalog/packaging-units.md +67 -0
- package/docs/catalog/per-channel-per-language-overrides.md +234 -0
- package/docs/catalog/product-links.md +79 -0
- package/docs/catalog.md +207 -0
- package/i18n/en.json +649 -0
- package/i18n/pl.json +649 -0
- package/package.json +109 -0
- package/tailwind.css +14 -0
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { UniqueConstraintViolationException } from '@mikro-orm/core';
|
|
3
|
+
import { ERROR_CODES, isCustomFieldValidationFailure, } from '@endora-commerce/contracts';
|
|
4
|
+
import { HttpError } from '@endora-commerce/platform/http';
|
|
5
|
+
import { Category } from '../entities/category.entity.js';
|
|
6
|
+
function categoryUpdatedEvent(categoryId) {
|
|
7
|
+
return {
|
|
8
|
+
eventName: 'category.updated.v1',
|
|
9
|
+
payload: {
|
|
10
|
+
eventId: randomUUID(),
|
|
11
|
+
occurredAt: new Date().toISOString(),
|
|
12
|
+
categoryId,
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export class CategoryAdminService {
|
|
17
|
+
emFactory;
|
|
18
|
+
salesChannelMembership;
|
|
19
|
+
commandBus;
|
|
20
|
+
customFieldValues;
|
|
21
|
+
events;
|
|
22
|
+
constructor(emFactory,
|
|
23
|
+
/**
|
|
24
|
+
* Feature 005 / T027b — when injected, every newly-created Category
|
|
25
|
+
* that does not declare explicit channel membership lands in the
|
|
26
|
+
* system-default Sales Channel automatically (FR-011). Optional so
|
|
27
|
+
* existing tests that construct this service without sales-channels
|
|
28
|
+
* keep compiling; production composition.ts always provides it.
|
|
29
|
+
*/
|
|
30
|
+
salesChannelMembership,
|
|
31
|
+
/** Feature 054 — audits category writes co-transactionally when provided. */
|
|
32
|
+
commandBus,
|
|
33
|
+
/** Feature 055 — validates + merges custom-field values on category write. */
|
|
34
|
+
customFieldValues,
|
|
35
|
+
/**
|
|
36
|
+
* Feature 068 — publishes `category.updated.v1`. Only consulted on the
|
|
37
|
+
* bus-less fallback path: when a Command Bus is injected it dispatches the
|
|
38
|
+
* command's event itself, on commit.
|
|
39
|
+
*/
|
|
40
|
+
events) {
|
|
41
|
+
this.emFactory = emFactory;
|
|
42
|
+
this.salesChannelMembership = salesChannelMembership;
|
|
43
|
+
this.commandBus = commandBus;
|
|
44
|
+
this.customFieldValues = customFieldValues;
|
|
45
|
+
this.events = events;
|
|
46
|
+
}
|
|
47
|
+
/** Validate + merge a custom-field patch, mapping validation errors to HTTP 422. */
|
|
48
|
+
async #mergeCustomFields(current, patch) {
|
|
49
|
+
if (!this.customFieldValues)
|
|
50
|
+
return current;
|
|
51
|
+
try {
|
|
52
|
+
return await this.customFieldValues.validateAndMerge('category', current ?? {}, patch);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
// Feature 075 — narrowed structurally, not by `instanceof` on
|
|
56
|
+
// `custom_fields`' class. The guard tests `name` and the `errors`
|
|
57
|
+
// array, which is what still works once each module is its own npm
|
|
58
|
+
// package; and the re-throw below stays unconditional, so a
|
|
59
|
+
// `ModuleDisabledError` from the port leaves through it.
|
|
60
|
+
if (isCustomFieldValidationFailure(err)) {
|
|
61
|
+
throw new HttpError(422, ERROR_CODES.CUSTOM_FIELD_VALUE_INVALID, 'One or more custom fields are invalid.', err.errors.map((e) => ({ path: e.field, issue: e.message })));
|
|
62
|
+
}
|
|
63
|
+
throw err;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Feature 054 — run a category write through the Command Bus (co-transactional
|
|
68
|
+
* audit) or a plain forked em (bus-less tests). `write` performs the mutation
|
|
69
|
+
* on the given em and returns the entity + before/after snapshot.
|
|
70
|
+
*/
|
|
71
|
+
async #audited(action, objectId, write) {
|
|
72
|
+
if (this.commandBus) {
|
|
73
|
+
// The event is declared per run, so `event()` can hand the bus whatever
|
|
74
|
+
// the closure produced. Captured here rather than on the entity because
|
|
75
|
+
// the bus dispatches it after the transaction commits.
|
|
76
|
+
let declared;
|
|
77
|
+
return this.commandBus.run({
|
|
78
|
+
action,
|
|
79
|
+
objectType: 'category',
|
|
80
|
+
objectId,
|
|
81
|
+
run: async ({ em }) => {
|
|
82
|
+
const w = await write(em);
|
|
83
|
+
declared = w.event;
|
|
84
|
+
return {
|
|
85
|
+
result: w.result,
|
|
86
|
+
before: w.before,
|
|
87
|
+
after: w.after,
|
|
88
|
+
...(w.skipAudit ? { skipAudit: true } : {}),
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
event: () => declared,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
const em = this.emFactory();
|
|
95
|
+
const w = await write(em);
|
|
96
|
+
await em.flush(); // no-op when the closure already flushed (create/update)
|
|
97
|
+
if (w.event) {
|
|
98
|
+
this.events?.emit(w.event.eventName, w.event.payload);
|
|
99
|
+
}
|
|
100
|
+
return w.result;
|
|
101
|
+
}
|
|
102
|
+
async listAll() {
|
|
103
|
+
const em = this.emFactory();
|
|
104
|
+
return em.find(Category, { deletedAt: null }, { orderBy: { sortOrder: 'asc', slug: 'asc' } });
|
|
105
|
+
}
|
|
106
|
+
async create(input) {
|
|
107
|
+
const id = randomUUID();
|
|
108
|
+
const cat = await this.#audited('category.create', id, async (em) => {
|
|
109
|
+
if (input.parentCategoryId)
|
|
110
|
+
await this.#assertParentExists(em, input.parentCategoryId);
|
|
111
|
+
const created = em.create(Category, {
|
|
112
|
+
id,
|
|
113
|
+
...(input.parentCategoryId !== undefined
|
|
114
|
+
? { parentCategoryId: input.parentCategoryId }
|
|
115
|
+
: {}),
|
|
116
|
+
name: input.name,
|
|
117
|
+
slug: input.slug,
|
|
118
|
+
sortOrder: input.sortOrder ?? 0,
|
|
119
|
+
// Feature 068 — omitted means active (the column default).
|
|
120
|
+
...(input.isActive !== undefined ? { isActive: input.isActive } : {}),
|
|
121
|
+
});
|
|
122
|
+
try {
|
|
123
|
+
await em.flush();
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
if (err instanceof UniqueConstraintViolationException) {
|
|
127
|
+
throw new HttpError(409, ERROR_CODES.VALIDATION_FAILED, `Slug "${input.slug}" already exists under this parent.`);
|
|
128
|
+
}
|
|
129
|
+
throw err;
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
result: created,
|
|
133
|
+
before: null,
|
|
134
|
+
after: {
|
|
135
|
+
name: created.name,
|
|
136
|
+
slug: created.slug,
|
|
137
|
+
parentCategoryId: created.parentCategoryId ?? null,
|
|
138
|
+
sortOrder: created.sortOrder,
|
|
139
|
+
isActive: created.isActive,
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
});
|
|
143
|
+
// Feature 005 / FR-011 — bind to Default unless this category was
|
|
144
|
+
// already given memberships through some other path.
|
|
145
|
+
if (this.salesChannelMembership) {
|
|
146
|
+
await this.salesChannelMembership.bindToDefaultIfEmpty('category', cat.id);
|
|
147
|
+
}
|
|
148
|
+
return cat;
|
|
149
|
+
}
|
|
150
|
+
async update(id, input) {
|
|
151
|
+
return this.#audited('category.update', id, async (em) => {
|
|
152
|
+
const cat = await em.findOne(Category, { id, deletedAt: null });
|
|
153
|
+
if (!cat)
|
|
154
|
+
throw new HttpError(404, ERROR_CODES.NOT_FOUND, 'Category not found.');
|
|
155
|
+
const before = {
|
|
156
|
+
name: cat.name,
|
|
157
|
+
slug: cat.slug,
|
|
158
|
+
parentCategoryId: cat.parentCategoryId ?? null,
|
|
159
|
+
sortOrder: cat.sortOrder,
|
|
160
|
+
isActive: cat.isActive,
|
|
161
|
+
};
|
|
162
|
+
if (input.parentCategoryId !== undefined) {
|
|
163
|
+
if (input.parentCategoryId !== null) {
|
|
164
|
+
await this.#assertParentExists(em, input.parentCategoryId);
|
|
165
|
+
await this.#assertNoCycle(em, id, input.parentCategoryId);
|
|
166
|
+
}
|
|
167
|
+
cat.parentCategoryId = input.parentCategoryId;
|
|
168
|
+
}
|
|
169
|
+
if (input.name !== undefined)
|
|
170
|
+
cat.name = input.name;
|
|
171
|
+
if (input.slug !== undefined)
|
|
172
|
+
cat.slug = input.slug;
|
|
173
|
+
if (input.sortOrder !== undefined)
|
|
174
|
+
cat.sortOrder = input.sortOrder;
|
|
175
|
+
if (input.isActive !== undefined)
|
|
176
|
+
cat.isActive = input.isActive;
|
|
177
|
+
if (input.mainImageAssetId !== undefined)
|
|
178
|
+
cat.mainImageAssetId = input.mainImageAssetId;
|
|
179
|
+
if (input.customFieldValues !== undefined) {
|
|
180
|
+
cat.customFieldValues = await this.#mergeCustomFields(cat.customFieldValues ?? {}, input.customFieldValues);
|
|
181
|
+
}
|
|
182
|
+
try {
|
|
183
|
+
await em.flush();
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
if (err instanceof UniqueConstraintViolationException) {
|
|
187
|
+
throw new HttpError(409, ERROR_CODES.VALIDATION_FAILED, 'Another category already uses this slug under that parent.');
|
|
188
|
+
}
|
|
189
|
+
throw err;
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
result: cat,
|
|
193
|
+
before,
|
|
194
|
+
after: {
|
|
195
|
+
name: cat.name,
|
|
196
|
+
slug: cat.slug,
|
|
197
|
+
parentCategoryId: cat.parentCategoryId ?? null,
|
|
198
|
+
sortOrder: cat.sortOrder,
|
|
199
|
+
isActive: cat.isActive,
|
|
200
|
+
},
|
|
201
|
+
// Feature 068 — the subtree's products carry this category's slug and
|
|
202
|
+
// (through the activation flag) their reachability, so every update
|
|
203
|
+
// has to reach the search index.
|
|
204
|
+
event: categoryUpdatedEvent(cat.id),
|
|
205
|
+
};
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
async softDelete(id) {
|
|
209
|
+
await this.#audited('category.delete', id, async (em) => {
|
|
210
|
+
const cat = await em.findOne(Category, { id, deletedAt: null });
|
|
211
|
+
if (!cat)
|
|
212
|
+
throw new HttpError(404, ERROR_CODES.NOT_FOUND, 'Category not found.');
|
|
213
|
+
const childCount = await em.count(Category, { parentCategoryId: id, deletedAt: null });
|
|
214
|
+
if (childCount > 0) {
|
|
215
|
+
throw new HttpError(409, ERROR_CODES.VALIDATION_FAILED, `Cannot delete: ${childCount} child category(ies) still attached. Move or delete them first.`);
|
|
216
|
+
}
|
|
217
|
+
cat.deletedAt = new Date();
|
|
218
|
+
return { result: cat, before: { name: cat.name, slug: cat.slug }, after: { deletedAt: cat.deletedAt } };
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Set the inventory display-band thresholds on a category (feature 075,
|
|
223
|
+
* Phase C — published as `catalogCategoryWritePort.setInventoryThresholds`).
|
|
224
|
+
*
|
|
225
|
+
* `inventory` owns the meaning of these three columns and stored them here
|
|
226
|
+
* because the storefront resolver reads them alongside the category row. It
|
|
227
|
+
* wrote them by importing `Category`; this is the same write, on this side of
|
|
228
|
+
* the boundary, and deliberately the same write and no more: no Command, no
|
|
229
|
+
* `category.updated.v1`, no `category.update` audit row. The caller records
|
|
230
|
+
* one `low_stock_threshold.update` summary row for the whole patch, and
|
|
231
|
+
* routing this through {@link update} would give an operator reading a
|
|
232
|
+
* category's history a second, differently-named entry for the same act.
|
|
233
|
+
*/
|
|
234
|
+
async setInventoryThresholds(id, patch) {
|
|
235
|
+
// command-coverage-ignore: three threshold columns on a category row, audited
|
|
236
|
+
// by the caller as one `low_stock_threshold.update` summary — see the doc
|
|
237
|
+
// comment above and `ThresholdAdminService.patch`.
|
|
238
|
+
const em = this.emFactory();
|
|
239
|
+
const cat = await em.findOne(Category, { id, deletedAt: null });
|
|
240
|
+
if (!cat)
|
|
241
|
+
throw new HttpError(404, ERROR_CODES.NOT_FOUND, `Category ${id} not found`);
|
|
242
|
+
if (patch.high !== undefined)
|
|
243
|
+
cat.inventoryThresholdHigh = patch.high;
|
|
244
|
+
if (patch.medium !== undefined)
|
|
245
|
+
cat.inventoryThresholdMedium = patch.medium;
|
|
246
|
+
if (patch.low !== undefined)
|
|
247
|
+
cat.inventoryThresholdLow = patch.low;
|
|
248
|
+
await em.flush();
|
|
249
|
+
}
|
|
250
|
+
async #assertParentExists(em, parentId) {
|
|
251
|
+
const exists = await em.count(Category, { id: parentId, deletedAt: null });
|
|
252
|
+
if (exists === 0) {
|
|
253
|
+
throw new HttpError(404, ERROR_CODES.NOT_FOUND, 'Parent category not found.');
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
async #assertNoCycle(em, movedId, newParentId) {
|
|
257
|
+
let cursor = newParentId;
|
|
258
|
+
const seen = new Set();
|
|
259
|
+
while (cursor) {
|
|
260
|
+
if (cursor === movedId) {
|
|
261
|
+
throw new HttpError(409, ERROR_CODES.VALIDATION_FAILED, 'Cannot move category beneath one of its descendants.');
|
|
262
|
+
}
|
|
263
|
+
if (seen.has(cursor))
|
|
264
|
+
break; // defensive guard against pre-existing cycles
|
|
265
|
+
seen.add(cursor);
|
|
266
|
+
const parent = await em.findOne(Category, { id: cursor });
|
|
267
|
+
cursor = parent?.parentCategoryId ?? null;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=category-admin.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"category-admin.service.js","sourceRoot":"","sources":["../../../src/backend/services/category-admin.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GalleryService — admin-only CRUD for Product Gallery Items + their
|
|
3
|
+
* Base/Small/Thumbnail label assignments (feature 002 US3,
|
|
4
|
+
* data-model.md §2.3, §2.4, research.md R-2).
|
|
5
|
+
*
|
|
6
|
+
* The per-product UNIQUE constraint on `gallery_item_labels(product_id,
|
|
7
|
+
* label)` is the load-bearing invariant. The atomic-swap operation
|
|
8
|
+
* (`?replace=true`) wraps the swap in a single transaction:
|
|
9
|
+
* DELETE conflicting labels FROM other items → INSERT/UPDATE the new
|
|
10
|
+
* ones. Reading "current owner" + writing "new owner" is one atomic
|
|
11
|
+
* step so concurrent admins don't crash into each other's swaps.
|
|
12
|
+
*/
|
|
13
|
+
import type { EntityManager } from '@mikro-orm/postgresql';
|
|
14
|
+
import { type AssetReadPort, type CatalogGalleryBatchItem, type GalleryItem as GalleryItemDto, type CreateGalleryItemRequest, type UpdateGalleryItemRequest } from '@endora-commerce/contracts';
|
|
15
|
+
import type { CommandBus } from '@endora-commerce/platform/commands';
|
|
16
|
+
export interface GalleryServiceOptions {
|
|
17
|
+
/** When true, conflicting labels on other items are silently moved. */
|
|
18
|
+
replaceConflictingLabels: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare class GalleryService {
|
|
21
|
+
#private;
|
|
22
|
+
private readonly emFactory;
|
|
23
|
+
/** Feature 054 — audits gallery-item writes co-transactionally when provided. */
|
|
24
|
+
private readonly commandBus?;
|
|
25
|
+
/**
|
|
26
|
+
* Feature 075 — `assets_library`'s read port, where `em.findOne(Asset, …)`
|
|
27
|
+
* used to be. It backs the kind check below, so with `assets_library` off
|
|
28
|
+
* the port fails closed and a gallery item pointing at an unverifiable
|
|
29
|
+
* asset is refused rather than stored.
|
|
30
|
+
*/
|
|
31
|
+
private readonly assets?;
|
|
32
|
+
constructor(emFactory: () => EntityManager,
|
|
33
|
+
/** Feature 054 — audits gallery-item writes co-transactionally when provided. */
|
|
34
|
+
commandBus?: CommandBus | undefined,
|
|
35
|
+
/**
|
|
36
|
+
* Feature 075 — `assets_library`'s read port, where `em.findOne(Asset, …)`
|
|
37
|
+
* used to be. It backs the kind check below, so with `assets_library` off
|
|
38
|
+
* the port fails closed and a gallery item pointing at an unverifiable
|
|
39
|
+
* asset is refused rather than stored.
|
|
40
|
+
*/
|
|
41
|
+
assets?: AssetReadPort | undefined);
|
|
42
|
+
list(productId: string): Promise<GalleryItemDto[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Feature 075 / D-87 — the batch half of {@link list}, for the callers that
|
|
45
|
+
* walk a page or a whole sellable catalogue.
|
|
46
|
+
*
|
|
47
|
+
* `product_feeds` used to run this statement itself, inside its own hydration
|
|
48
|
+
* batch, against a table `catalog` owns. It named no import specifier, so the
|
|
49
|
+
* boundary compiled and returned rows; `list` could not replace it because
|
|
50
|
+
* three round-trips per product is 1500 for a 500-product batch.
|
|
51
|
+
*
|
|
52
|
+
* Two things are deliberately absent. There is **no `#assertProductExists`**:
|
|
53
|
+
* a caller asks about the ids it holds, one of which may have been removed
|
|
54
|
+
* since, and answering 404 for the batch would be answering about a different
|
|
55
|
+
* question. And there are **no labels**: neither consumer reads them here, and
|
|
56
|
+
* fetching them costs a second statement per batch.
|
|
57
|
+
*/
|
|
58
|
+
listForProducts(productIds: readonly string[]): Promise<CatalogGalleryBatchItem[]>;
|
|
59
|
+
/**
|
|
60
|
+
* Feature 075 / D-87 — the `base_image` url of each of a batch of products.
|
|
61
|
+
*
|
|
62
|
+
* `comparisons` used to answer this with one statement joining this module's
|
|
63
|
+
* `gallery_item_labels` and `gallery_items` to `assets_library`'s `assets` —
|
|
64
|
+
* three cross-module reaches in a single join, which is why they retire
|
|
65
|
+
* together or not at all. Here the join stops at this module's own two tables
|
|
66
|
+
* and the asset row is asked of its owner through the port this service
|
|
67
|
+
* already holds, in one call for the whole batch.
|
|
68
|
+
*
|
|
69
|
+
* `base_image` only. This is not {@link resolvePrimaryAssetUrls}, which walks
|
|
70
|
+
* thumbnail → base_image → first item and answers "which image represents
|
|
71
|
+
* this product"; the comparison column names the base image explicitly
|
|
72
|
+
* (feature 007, FR-006), and a fallback here would quietly put a thumbnail in
|
|
73
|
+
* a column an operator set deliberately.
|
|
74
|
+
*
|
|
75
|
+
* The map holds one entry per requested id. `null` covers three cases the
|
|
76
|
+
* callers render identically — no label, no product, no asset row — and the
|
|
77
|
+
* inner join it replaces collapsed all three the same way.
|
|
78
|
+
*/
|
|
79
|
+
baseImageUrls(productIds: readonly string[]): Promise<Map<string, string | null>>;
|
|
80
|
+
create(productId: string, req: CreateGalleryItemRequest, options: GalleryServiceOptions): Promise<GalleryItemDto>;
|
|
81
|
+
update(productId: string, itemId: string, req: UpdateGalleryItemRequest, options: GalleryServiceOptions): Promise<GalleryItemDto>;
|
|
82
|
+
delete(productId: string, itemId: string): Promise<void>;
|
|
83
|
+
reorder(productId: string, orderedIds: string[]): Promise<void>;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=gallery.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gallery.service.d.ts","sourceRoot":"","sources":["../../../src/backend/services/gallery.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,WAAW,IAAI,cAAc,EAElC,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC9B,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAYrE,MAAM,WAAW,qBAAqB;IACpC,uEAAuE;IACvE,wBAAwB,EAAE,OAAO,CAAC;CACnC;AAED,qBAAa,cAAc;;IAEvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,iFAAiF;IACjF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC5B;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBATP,SAAS,EAAE,MAAM,aAAa;IAC/C,iFAAiF;IAChE,UAAU,CAAC,EAAE,UAAU,YAAA;IACxC;;;;;OAKG;IACc,MAAM,CAAC,EAAE,aAAa,YAAA;IAmCnC,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAMxD;;;;;;;;;;;;;;OAcG;IACG,eAAe,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAuBxF;;;;;;;;;;;;;;;;;;;OAmBG;IACG,aAAa,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAiCjF,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,wBAAwB,EAC7B,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC;IAuCpB,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,wBAAwB,EAC7B,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC;IA4BpB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBxD,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CA0KtE"}
|