@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.
Files changed (443) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +63 -0
  3. package/dist/admin/components/PackagingUnitsEditor.d.ts +12 -0
  4. package/dist/admin/components/PackagingUnitsEditor.d.ts.map +1 -0
  5. package/dist/admin/components/PackagingUnitsEditor.js +99 -0
  6. package/dist/admin/components/PackagingUnitsEditor.js.map +1 -0
  7. package/dist/admin/components/ProductAttributesTab.d.ts +13 -0
  8. package/dist/admin/components/ProductAttributesTab.d.ts.map +1 -0
  9. package/dist/admin/components/ProductAttributesTab.js +140 -0
  10. package/dist/admin/components/ProductAttributesTab.js.map +1 -0
  11. package/dist/admin/components/ProductInventoryTab.d.ts +14 -0
  12. package/dist/admin/components/ProductInventoryTab.d.ts.map +1 -0
  13. package/dist/admin/components/ProductInventoryTab.js +284 -0
  14. package/dist/admin/components/ProductInventoryTab.js.map +1 -0
  15. package/dist/admin/components/ProductScopeEditor.d.ts +94 -0
  16. package/dist/admin/components/ProductScopeEditor.d.ts.map +1 -0
  17. package/dist/admin/components/ProductScopeEditor.js +395 -0
  18. package/dist/admin/components/ProductScopeEditor.js.map +1 -0
  19. package/dist/admin/components/ProductsBulkEditDialog.d.ts +11 -0
  20. package/dist/admin/components/ProductsBulkEditDialog.d.ts.map +1 -0
  21. package/dist/admin/components/ProductsBulkEditDialog.js +304 -0
  22. package/dist/admin/components/ProductsBulkEditDialog.js.map +1 -0
  23. package/dist/admin/index.d.ts +45 -0
  24. package/dist/admin/index.d.ts.map +1 -0
  25. package/dist/admin/index.js +184 -0
  26. package/dist/admin/index.js.map +1 -0
  27. package/dist/admin/lib/resolve-product-selection.d.ts +21 -0
  28. package/dist/admin/lib/resolve-product-selection.d.ts.map +1 -0
  29. package/dist/admin/lib/resolve-product-selection.js +25 -0
  30. package/dist/admin/lib/resolve-product-selection.js.map +1 -0
  31. package/dist/admin/pages/AttachmentTypesPage.d.ts +18 -0
  32. package/dist/admin/pages/AttachmentTypesPage.d.ts.map +1 -0
  33. package/dist/admin/pages/AttachmentTypesPage.js +92 -0
  34. package/dist/admin/pages/AttachmentTypesPage.js.map +1 -0
  35. package/dist/admin/pages/AttributeSetsPage.d.ts +21 -0
  36. package/dist/admin/pages/AttributeSetsPage.d.ts.map +1 -0
  37. package/dist/admin/pages/AttributeSetsPage.js +158 -0
  38. package/dist/admin/pages/AttributeSetsPage.js.map +1 -0
  39. package/dist/admin/pages/AttributesManager.d.ts +9 -0
  40. package/dist/admin/pages/AttributesManager.d.ts.map +1 -0
  41. package/dist/admin/pages/AttributesManager.js +305 -0
  42. package/dist/admin/pages/AttributesManager.js.map +1 -0
  43. package/dist/admin/pages/BulkOperationDetailPage.d.ts +9 -0
  44. package/dist/admin/pages/BulkOperationDetailPage.d.ts.map +1 -0
  45. package/dist/admin/pages/BulkOperationDetailPage.js +187 -0
  46. package/dist/admin/pages/BulkOperationDetailPage.js.map +1 -0
  47. package/dist/admin/pages/BulkOperationsPage.d.ts +9 -0
  48. package/dist/admin/pages/BulkOperationsPage.d.ts.map +1 -0
  49. package/dist/admin/pages/BulkOperationsPage.js +98 -0
  50. package/dist/admin/pages/BulkOperationsPage.js.map +1 -0
  51. package/dist/admin/pages/CategoriesTree.d.ts +9 -0
  52. package/dist/admin/pages/CategoriesTree.d.ts.map +1 -0
  53. package/dist/admin/pages/CategoriesTree.js +176 -0
  54. package/dist/admin/pages/CategoriesTree.js.map +1 -0
  55. package/dist/admin/pages/ProductEditor.d.ts +13 -0
  56. package/dist/admin/pages/ProductEditor.d.ts.map +1 -0
  57. package/dist/admin/pages/ProductEditor.js +1050 -0
  58. package/dist/admin/pages/ProductEditor.js.map +1 -0
  59. package/dist/admin/pages/ProductsList.d.ts +9 -0
  60. package/dist/admin/pages/ProductsList.d.ts.map +1 -0
  61. package/dist/admin/pages/ProductsList.js +399 -0
  62. package/dist/admin/pages/ProductsList.js.map +1 -0
  63. package/dist/backend/commands/attribute-commands.d.ts +111 -0
  64. package/dist/backend/commands/attribute-commands.d.ts.map +1 -0
  65. package/dist/backend/commands/attribute-commands.js +482 -0
  66. package/dist/backend/commands/attribute-commands.js.map +1 -0
  67. package/dist/backend/demo/reset.d.ts +23 -0
  68. package/dist/backend/demo/reset.d.ts.map +1 -0
  69. package/dist/backend/demo/reset.js +41 -0
  70. package/dist/backend/demo/reset.js.map +1 -0
  71. package/dist/backend/demo/rows.d.ts +103 -0
  72. package/dist/backend/demo/rows.d.ts.map +1 -0
  73. package/dist/backend/demo/rows.js +162 -0
  74. package/dist/backend/demo/rows.js.map +1 -0
  75. package/dist/backend/demo/seed.d.ts +35 -0
  76. package/dist/backend/demo/seed.d.ts.map +1 -0
  77. package/dist/backend/demo/seed.js +177 -0
  78. package/dist/backend/demo/seed.js.map +1 -0
  79. package/dist/backend/entities/attachment-type.entity.d.ts +16 -0
  80. package/dist/backend/entities/attachment-type.entity.d.ts.map +1 -0
  81. package/dist/backend/entities/attachment-type.entity.js +57 -0
  82. package/dist/backend/entities/attachment-type.entity.js.map +1 -0
  83. package/dist/backend/entities/attribute-set-attribute.entity.d.ts +26 -0
  84. package/dist/backend/entities/attribute-set-attribute.entity.d.ts.map +1 -0
  85. package/dist/backend/entities/attribute-set-attribute.entity.js +55 -0
  86. package/dist/backend/entities/attribute-set-attribute.entity.js.map +1 -0
  87. package/dist/backend/entities/attribute-set.entity.d.ts +22 -0
  88. package/dist/backend/entities/attribute-set.entity.d.ts.map +1 -0
  89. package/dist/backend/entities/attribute-set.entity.js +67 -0
  90. package/dist/backend/entities/attribute-set.entity.js.map +1 -0
  91. package/dist/backend/entities/bulk-operation.entity.d.ts +78 -0
  92. package/dist/backend/entities/bulk-operation.entity.d.ts.map +1 -0
  93. package/dist/backend/entities/bulk-operation.entity.js +138 -0
  94. package/dist/backend/entities/bulk-operation.entity.js.map +1 -0
  95. package/dist/backend/entities/bundle-slot-option.entity.d.ts +23 -0
  96. package/dist/backend/entities/bundle-slot-option.entity.d.ts.map +1 -0
  97. package/dist/backend/entities/bundle-slot-option.entity.js +68 -0
  98. package/dist/backend/entities/bundle-slot-option.entity.js.map +1 -0
  99. package/dist/backend/entities/bundle-slot.entity.d.ts +25 -0
  100. package/dist/backend/entities/bundle-slot.entity.d.ts.map +1 -0
  101. package/dist/backend/entities/bundle-slot.entity.js +74 -0
  102. package/dist/backend/entities/bundle-slot.entity.js.map +1 -0
  103. package/dist/backend/entities/category.entity.d.ts +26 -0
  104. package/dist/backend/entities/category.entity.d.ts.map +1 -0
  105. package/dist/backend/entities/category.entity.js +119 -0
  106. package/dist/backend/entities/category.entity.js.map +1 -0
  107. package/dist/backend/entities/gallery-item-label.entity.d.ts +22 -0
  108. package/dist/backend/entities/gallery-item-label.entity.d.ts.map +1 -0
  109. package/dist/backend/entities/gallery-item-label.entity.js +50 -0
  110. package/dist/backend/entities/gallery-item-label.entity.js.map +1 -0
  111. package/dist/backend/entities/gallery-item.entity.d.ts +17 -0
  112. package/dist/backend/entities/gallery-item.entity.d.ts.map +1 -0
  113. package/dist/backend/entities/gallery-item.entity.js +58 -0
  114. package/dist/backend/entities/gallery-item.entity.js.map +1 -0
  115. package/dist/backend/entities/grouped-item.entity.d.ts +23 -0
  116. package/dist/backend/entities/grouped-item.entity.d.ts.map +1 -0
  117. package/dist/backend/entities/grouped-item.entity.js +68 -0
  118. package/dist/backend/entities/grouped-item.entity.js.map +1 -0
  119. package/dist/backend/entities/product-attachment.entity.d.ts +23 -0
  120. package/dist/backend/entities/product-attachment.entity.d.ts.map +1 -0
  121. package/dist/backend/entities/product-attachment.entity.js +77 -0
  122. package/dist/backend/entities/product-attachment.entity.js.map +1 -0
  123. package/dist/backend/entities/product-attribute.entity.d.ts +72 -0
  124. package/dist/backend/entities/product-attribute.entity.d.ts.map +1 -0
  125. package/dist/backend/entities/product-attribute.entity.js +161 -0
  126. package/dist/backend/entities/product-attribute.entity.js.map +1 -0
  127. package/dist/backend/entities/product-editor-preference.entity.d.ts +28 -0
  128. package/dist/backend/entities/product-editor-preference.entity.d.ts.map +1 -0
  129. package/dist/backend/entities/product-editor-preference.entity.js +63 -0
  130. package/dist/backend/entities/product-editor-preference.entity.js.map +1 -0
  131. package/dist/backend/entities/product-link.entity.d.ts +25 -0
  132. package/dist/backend/entities/product-link.entity.d.ts.map +1 -0
  133. package/dist/backend/entities/product-link.entity.js +70 -0
  134. package/dist/backend/entities/product-link.entity.js.map +1 -0
  135. package/dist/backend/entities/product-packaging-unit.entity.d.ts +26 -0
  136. package/dist/backend/entities/product-packaging-unit.entity.d.ts.map +1 -0
  137. package/dist/backend/entities/product-packaging-unit.entity.js +76 -0
  138. package/dist/backend/entities/product-packaging-unit.entity.js.map +1 -0
  139. package/dist/backend/entities/product-value-override.entity.d.ts +43 -0
  140. package/dist/backend/entities/product-value-override.entity.d.ts.map +1 -0
  141. package/dist/backend/entities/product-value-override.entity.js +90 -0
  142. package/dist/backend/entities/product-value-override.entity.js.map +1 -0
  143. package/dist/backend/entities/product-variant.entity.d.ts +18 -0
  144. package/dist/backend/entities/product-variant.entity.d.ts.map +1 -0
  145. package/dist/backend/entities/product-variant.entity.js +68 -0
  146. package/dist/backend/entities/product-variant.entity.js.map +1 -0
  147. package/dist/backend/entities/product.entity.d.ts +108 -0
  148. package/dist/backend/entities/product.entity.d.ts.map +1 -0
  149. package/dist/backend/entities/product.entity.js +230 -0
  150. package/dist/backend/entities/product.entity.js.map +1 -0
  151. package/dist/backend/index.d.ts +262 -0
  152. package/dist/backend/index.d.ts.map +1 -0
  153. package/dist/backend/index.js +642 -0
  154. package/dist/backend/index.js.map +1 -0
  155. package/dist/backend/plugin.d.ts +216 -0
  156. package/dist/backend/plugin.d.ts.map +1 -0
  157. package/dist/backend/plugin.js +223 -0
  158. package/dist/backend/plugin.js.map +1 -0
  159. package/dist/backend/prompt-tools.d.ts +47 -0
  160. package/dist/backend/prompt-tools.d.ts.map +1 -0
  161. package/dist/backend/prompt-tools.js +284 -0
  162. package/dist/backend/prompt-tools.js.map +1 -0
  163. package/dist/backend/routes.admin.d.ts +105 -0
  164. package/dist/backend/routes.admin.d.ts.map +1 -0
  165. package/dist/backend/routes.admin.js +1162 -0
  166. package/dist/backend/routes.admin.js.map +1 -0
  167. package/dist/backend/routes.api-key.d.ts +33 -0
  168. package/dist/backend/routes.api-key.d.ts.map +1 -0
  169. package/dist/backend/routes.api-key.js +43 -0
  170. package/dist/backend/routes.api-key.js.map +1 -0
  171. package/dist/backend/routes.external.d.ts +32 -0
  172. package/dist/backend/routes.external.d.ts.map +1 -0
  173. package/dist/backend/routes.external.js +115 -0
  174. package/dist/backend/routes.external.js.map +1 -0
  175. package/dist/backend/routes.public.d.ts +46 -0
  176. package/dist/backend/routes.public.d.ts.map +1 -0
  177. package/dist/backend/routes.public.js +318 -0
  178. package/dist/backend/routes.public.js.map +1 -0
  179. package/dist/backend/services/asset-references.d.ts +4 -0
  180. package/dist/backend/services/asset-references.d.ts.map +1 -0
  181. package/dist/backend/services/asset-references.js +104 -0
  182. package/dist/backend/services/asset-references.js.map +1 -0
  183. package/dist/backend/services/attachment.service.d.ts +45 -0
  184. package/dist/backend/services/attachment.service.d.ts.map +1 -0
  185. package/dist/backend/services/attachment.service.js +268 -0
  186. package/dist/backend/services/attachment.service.js.map +1 -0
  187. package/dist/backend/services/attribute-option-validator.d.ts +47 -0
  188. package/dist/backend/services/attribute-option-validator.d.ts.map +1 -0
  189. package/dist/backend/services/attribute-option-validator.js +69 -0
  190. package/dist/backend/services/attribute-option-validator.js.map +1 -0
  191. package/dist/backend/services/attribute-set-validations.d.ts +65 -0
  192. package/dist/backend/services/attribute-set-validations.d.ts.map +1 -0
  193. package/dist/backend/services/attribute-set-validations.js +89 -0
  194. package/dist/backend/services/attribute-set-validations.js.map +1 -0
  195. package/dist/backend/services/attribute-set.service.d.ts +50 -0
  196. package/dist/backend/services/attribute-set.service.d.ts.map +1 -0
  197. package/dist/backend/services/attribute-set.service.js +401 -0
  198. package/dist/backend/services/attribute-set.service.js.map +1 -0
  199. package/dist/backend/services/attribute-type-mapping.d.ts +66 -0
  200. package/dist/backend/services/attribute-type-mapping.d.ts.map +1 -0
  201. package/dist/backend/services/attribute-type-mapping.js +121 -0
  202. package/dist/backend/services/attribute-type-mapping.js.map +1 -0
  203. package/dist/backend/services/attribute-value-key.service.d.ts +48 -0
  204. package/dist/backend/services/attribute-value-key.service.d.ts.map +1 -0
  205. package/dist/backend/services/attribute-value-key.service.js +118 -0
  206. package/dist/backend/services/attribute-value-key.service.js.map +1 -0
  207. package/dist/backend/services/audit-references.d.ts +13 -0
  208. package/dist/backend/services/audit-references.d.ts.map +1 -0
  209. package/dist/backend/services/audit-references.js +51 -0
  210. package/dist/backend/services/audit-references.js.map +1 -0
  211. package/dist/backend/services/bulk-operation-queue.d.ts +26 -0
  212. package/dist/backend/services/bulk-operation-queue.d.ts.map +1 -0
  213. package/dist/backend/services/bulk-operation-queue.js +34 -0
  214. package/dist/backend/services/bulk-operation-queue.js.map +1 -0
  215. package/dist/backend/services/bulk-operation.service.d.ts +195 -0
  216. package/dist/backend/services/bulk-operation.service.d.ts.map +1 -0
  217. package/dist/backend/services/bulk-operation.service.js +510 -0
  218. package/dist/backend/services/bulk-operation.service.js.map +1 -0
  219. package/dist/backend/services/bundle.service.d.ts +87 -0
  220. package/dist/backend/services/bundle.service.d.ts.map +1 -0
  221. package/dist/backend/services/bundle.service.js +286 -0
  222. package/dist/backend/services/bundle.service.js.map +1 -0
  223. package/dist/backend/services/catalog-admin.service.d.ts +398 -0
  224. package/dist/backend/services/catalog-admin.service.d.ts.map +1 -0
  225. package/dist/backend/services/catalog-admin.service.js +1516 -0
  226. package/dist/backend/services/catalog-admin.service.js.map +1 -0
  227. package/dist/backend/services/catalog-attribute-read.service.d.ts +78 -0
  228. package/dist/backend/services/catalog-attribute-read.service.d.ts.map +1 -0
  229. package/dist/backend/services/catalog-attribute-read.service.js +216 -0
  230. package/dist/backend/services/catalog-attribute-read.service.js.map +1 -0
  231. package/dist/backend/services/catalog-bulk-import.service.d.ts +30 -0
  232. package/dist/backend/services/catalog-bulk-import.service.d.ts.map +1 -0
  233. package/dist/backend/services/catalog-bulk-import.service.js +136 -0
  234. package/dist/backend/services/catalog-bulk-import.service.js.map +1 -0
  235. package/dist/backend/services/catalog-bulk-update.service.d.ts +91 -0
  236. package/dist/backend/services/catalog-bulk-update.service.d.ts.map +1 -0
  237. package/dist/backend/services/catalog-bulk-update.service.js +330 -0
  238. package/dist/backend/services/catalog-bulk-update.service.js.map +1 -0
  239. package/dist/backend/services/catalog-category-read.service.d.ts +66 -0
  240. package/dist/backend/services/catalog-category-read.service.d.ts.map +1 -0
  241. package/dist/backend/services/catalog-category-read.service.js +248 -0
  242. package/dist/backend/services/catalog-category-read.service.js.map +1 -0
  243. package/dist/backend/services/catalog-org-price-decorator.d.ts +90 -0
  244. package/dist/backend/services/catalog-org-price-decorator.d.ts.map +1 -0
  245. package/dist/backend/services/catalog-org-price-decorator.js +184 -0
  246. package/dist/backend/services/catalog-org-price-decorator.js.map +1 -0
  247. package/dist/backend/services/catalog-product-filter.service.d.ts +82 -0
  248. package/dist/backend/services/catalog-product-filter.service.d.ts.map +1 -0
  249. package/dist/backend/services/catalog-product-filter.service.js +275 -0
  250. package/dist/backend/services/catalog-product-filter.service.js.map +1 -0
  251. package/dist/backend/services/catalog-product-read.service.d.ts +46 -0
  252. package/dist/backend/services/catalog-product-read.service.d.ts.map +1 -0
  253. package/dist/backend/services/catalog-product-read.service.js +197 -0
  254. package/dist/backend/services/catalog-product-read.service.js.map +1 -0
  255. package/dist/backend/services/catalog-query.service.d.ts +444 -0
  256. package/dist/backend/services/catalog-query.service.d.ts.map +1 -0
  257. package/dist/backend/services/catalog-query.service.js +1633 -0
  258. package/dist/backend/services/catalog-query.service.js.map +1 -0
  259. package/dist/backend/services/catalog-quick-search.service.d.ts +78 -0
  260. package/dist/backend/services/catalog-quick-search.service.d.ts.map +1 -0
  261. package/dist/backend/services/catalog-quick-search.service.js +159 -0
  262. package/dist/backend/services/catalog-quick-search.service.js.map +1 -0
  263. package/dist/backend/services/catalog-write-ports.d.ts +25 -0
  264. package/dist/backend/services/catalog-write-ports.d.ts.map +1 -0
  265. package/dist/backend/services/catalog-write-ports.js +63 -0
  266. package/dist/backend/services/catalog-write-ports.js.map +1 -0
  267. package/dist/backend/services/category-admin.service.d.ts +102 -0
  268. package/dist/backend/services/category-admin.service.d.ts.map +1 -0
  269. package/dist/backend/services/category-admin.service.js +271 -0
  270. package/dist/backend/services/category-admin.service.js.map +1 -0
  271. package/dist/backend/services/gallery.service.d.ts +85 -0
  272. package/dist/backend/services/gallery.service.d.ts.map +1 -0
  273. package/dist/backend/services/gallery.service.js +326 -0
  274. package/dist/backend/services/gallery.service.js.map +1 -0
  275. package/dist/backend/services/grouped.service.d.ts +39 -0
  276. package/dist/backend/services/grouped.service.d.ts.map +1 -0
  277. package/dist/backend/services/grouped.service.js +136 -0
  278. package/dist/backend/services/grouped.service.js.map +1 -0
  279. package/dist/backend/services/label-resolver.d.ts +16 -0
  280. package/dist/backend/services/label-resolver.d.ts.map +1 -0
  281. package/dist/backend/services/label-resolver.js +43 -0
  282. package/dist/backend/services/label-resolver.js.map +1 -0
  283. package/dist/backend/services/packaging-unit.service.d.ts +28 -0
  284. package/dist/backend/services/packaging-unit.service.d.ts.map +1 -0
  285. package/dist/backend/services/packaging-unit.service.js +197 -0
  286. package/dist/backend/services/packaging-unit.service.js.map +1 -0
  287. package/dist/backend/services/primary-asset-url.d.ts +4 -0
  288. package/dist/backend/services/primary-asset-url.d.ts.map +1 -0
  289. package/dist/backend/services/primary-asset-url.js +55 -0
  290. package/dist/backend/services/primary-asset-url.js.map +1 -0
  291. package/dist/backend/services/product-editor-preferences.service.d.ts +20 -0
  292. package/dist/backend/services/product-editor-preferences.service.d.ts.map +1 -0
  293. package/dist/backend/services/product-editor-preferences.service.js +44 -0
  294. package/dist/backend/services/product-editor-preferences.service.js.map +1 -0
  295. package/dist/backend/services/product-link.service.d.ts +169 -0
  296. package/dist/backend/services/product-link.service.d.ts.map +1 -0
  297. package/dist/backend/services/product-link.service.js +297 -0
  298. package/dist/backend/services/product-link.service.js.map +1 -0
  299. package/dist/backend/services/product-overrides.service.d.ts +77 -0
  300. package/dist/backend/services/product-overrides.service.d.ts.map +1 -0
  301. package/dist/backend/services/product-overrides.service.js +204 -0
  302. package/dist/backend/services/product-overrides.service.js.map +1 -0
  303. package/dist/backend/services/product-scope-context.service.d.ts +36 -0
  304. package/dist/backend/services/product-scope-context.service.d.ts.map +1 -0
  305. package/dist/backend/services/product-scope-context.service.js +106 -0
  306. package/dist/backend/services/product-scope-context.service.js.map +1 -0
  307. package/dist/backend/services/product-type-validations.d.ts +42 -0
  308. package/dist/backend/services/product-type-validations.d.ts.map +1 -0
  309. package/dist/backend/services/product-type-validations.js +55 -0
  310. package/dist/backend/services/product-type-validations.js.map +1 -0
  311. package/dist/backend/services/product-value-resolver.service.d.ts +59 -0
  312. package/dist/backend/services/product-value-resolver.service.d.ts.map +1 -0
  313. package/dist/backend/services/product-value-resolver.service.js +111 -0
  314. package/dist/backend/services/product-value-resolver.service.js.map +1 -0
  315. package/dist/backend/services/system-attribute-scopes.d.ts +18 -0
  316. package/dist/backend/services/system-attribute-scopes.d.ts.map +1 -0
  317. package/dist/backend/services/system-attribute-scopes.js +18 -0
  318. package/dist/backend/services/system-attribute-scopes.js.map +1 -0
  319. package/dist/backend/services/viewer-organization.d.ts +25 -0
  320. package/dist/backend/services/viewer-organization.d.ts.map +1 -0
  321. package/dist/backend/services/viewer-organization.js +31 -0
  322. package/dist/backend/services/viewer-organization.js.map +1 -0
  323. package/dist/manifest.d.ts +204 -0
  324. package/dist/manifest.d.ts.map +1 -0
  325. package/dist/manifest.js +686 -0
  326. package/dist/manifest.js.map +1 -0
  327. package/dist/migrations/20260429T064146_catalog_attribute_sets_init.d.ts +33 -0
  328. package/dist/migrations/20260429T064146_catalog_attribute_sets_init.d.ts.map +1 -0
  329. package/dist/migrations/20260429T064146_catalog_attribute_sets_init.js +118 -0
  330. package/dist/migrations/20260429T064146_catalog_attribute_sets_init.js.map +1 -0
  331. package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.d.ts +24 -0
  332. package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.d.ts.map +1 -0
  333. package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.js +31 -0
  334. package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.js.map +1 -0
  335. package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.d.ts +32 -0
  336. package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.d.ts.map +1 -0
  337. package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.js +58 -0
  338. package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.js.map +1 -0
  339. package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.d.ts +22 -0
  340. package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.d.ts.map +1 -0
  341. package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.js +66 -0
  342. package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.js.map +1 -0
  343. package/dist/migrations/20260429T112543_catalog_product_attachments.d.ts +18 -0
  344. package/dist/migrations/20260429T112543_catalog_product_attachments.d.ts.map +1 -0
  345. package/dist/migrations/20260429T112543_catalog_product_attachments.js +73 -0
  346. package/dist/migrations/20260429T112543_catalog_product_attachments.js.map +1 -0
  347. package/dist/migrations/20260429T123726_catalog_product_links.d.ts +21 -0
  348. package/dist/migrations/20260429T123726_catalog_product_links.d.ts.map +1 -0
  349. package/dist/migrations/20260429T123726_catalog_product_links.js +48 -0
  350. package/dist/migrations/20260429T123726_catalog_product_links.js.map +1 -0
  351. package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.d.ts +23 -0
  352. package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.d.ts.map +1 -0
  353. package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.js +94 -0
  354. package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.js.map +1 -0
  355. package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.d.ts +24 -0
  356. package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.d.ts.map +1 -0
  357. package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.js +31 -0
  358. package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.js.map +1 -0
  359. package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.d.ts +31 -0
  360. package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.d.ts.map +1 -0
  361. package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.js +133 -0
  362. package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.js.map +1 -0
  363. package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.d.ts +16 -0
  364. package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.d.ts.map +1 -0
  365. package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.js +23 -0
  366. package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.js.map +1 -0
  367. package/dist/migrations/20260526T124736_catalog_product_status_inactive.d.ts +10 -0
  368. package/dist/migrations/20260526T124736_catalog_product_status_inactive.d.ts.map +1 -0
  369. package/dist/migrations/20260526T124736_catalog_product_status_inactive.js +22 -0
  370. package/dist/migrations/20260526T124736_catalog_product_status_inactive.js.map +1 -0
  371. package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.d.ts +38 -0
  372. package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.d.ts.map +1 -0
  373. package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.js +98 -0
  374. package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.js.map +1 -0
  375. package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.d.ts +13 -0
  376. package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.d.ts.map +1 -0
  377. package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.js +17 -0
  378. package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.js.map +1 -0
  379. package/dist/migrations/20260611T140407_catalog_bulk_operations.d.ts +16 -0
  380. package/dist/migrations/20260611T140407_catalog_bulk_operations.d.ts.map +1 -0
  381. package/dist/migrations/20260611T140407_catalog_bulk_operations.js +42 -0
  382. package/dist/migrations/20260611T140407_catalog_bulk_operations.js.map +1 -0
  383. package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.d.ts +14 -0
  384. package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.d.ts.map +1 -0
  385. package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.js +18 -0
  386. package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.js.map +1 -0
  387. package/dist/migrations/20260611T140412_catalog_product_packaging_units.d.ts +11 -0
  388. package/dist/migrations/20260611T140412_catalog_product_packaging_units.d.ts.map +1 -0
  389. package/dist/migrations/20260611T140412_catalog_product_packaging_units.js +29 -0
  390. package/dist/migrations/20260611T140412_catalog_product_packaging_units.js.map +1 -0
  391. package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.d.ts +23 -0
  392. package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.d.ts.map +1 -0
  393. package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.js +35 -0
  394. package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.js.map +1 -0
  395. package/dist/migrations/20260718T200343_catalog_category_custom_field_values.d.ts +12 -0
  396. package/dist/migrations/20260718T200343_catalog_category_custom_field_values.d.ts.map +1 -0
  397. package/dist/migrations/20260718T200343_catalog_category_custom_field_values.js +16 -0
  398. package/dist/migrations/20260718T200343_catalog_category_custom_field_values.js.map +1 -0
  399. package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.d.ts +32 -0
  400. package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.d.ts.map +1 -0
  401. package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.js +286 -0
  402. package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.js.map +1 -0
  403. package/dist/migrations/20260804T152604_catalog_widen_product_sku.d.ts +36 -0
  404. package/dist/migrations/20260804T152604_catalog_widen_product_sku.d.ts.map +1 -0
  405. package/dist/migrations/20260804T152604_catalog_widen_product_sku.js +63 -0
  406. package/dist/migrations/20260804T152604_catalog_widen_product_sku.js.map +1 -0
  407. package/dist/migrations/20260804T160244_catalog_category_activation.d.ts +18 -0
  408. package/dist/migrations/20260804T160244_catalog_category_activation.d.ts.map +1 -0
  409. package/dist/migrations/20260804T160244_catalog_category_activation.js +22 -0
  410. package/dist/migrations/20260804T160244_catalog_category_activation.js.map +1 -0
  411. package/dist/migrations/20260912T094557_catalog_sales_channel_products.d.ts +27 -0
  412. package/dist/migrations/20260912T094557_catalog_sales_channel_products.d.ts.map +1 -0
  413. package/dist/migrations/20260912T094557_catalog_sales_channel_products.js +44 -0
  414. package/dist/migrations/20260912T094557_catalog_sales_channel_products.js.map +1 -0
  415. package/dist/migrations/20260912T094623_catalog_sales_channel_categories.d.ts +27 -0
  416. package/dist/migrations/20260912T094623_catalog_sales_channel_categories.d.ts.map +1 -0
  417. package/dist/migrations/20260912T094623_catalog_sales_channel_categories.js +44 -0
  418. package/dist/migrations/20260912T094623_catalog_sales_channel_categories.js.map +1 -0
  419. package/dist/migrations/20260925T125527_catalog_inventory_columns.d.ts +36 -0
  420. package/dist/migrations/20260925T125527_catalog_inventory_columns.d.ts.map +1 -0
  421. package/dist/migrations/20260925T125527_catalog_inventory_columns.js +87 -0
  422. package/dist/migrations/20260925T125527_catalog_inventory_columns.js.map +1 -0
  423. package/dist/migrations/index.d.ts +55 -0
  424. package/dist/migrations/index.d.ts.map +1 -0
  425. package/dist/migrations/index.js +80 -0
  426. package/dist/migrations/index.js.map +1 -0
  427. package/dist/ports/index.d.ts +96 -0
  428. package/dist/ports/index.d.ts.map +1 -0
  429. package/dist/ports/index.js +2 -0
  430. package/dist/ports/index.js.map +1 -0
  431. package/docs/catalog/attachments.md +69 -0
  432. package/docs/catalog/attribute-sets.md +63 -0
  433. package/docs/catalog/attributes.md +244 -0
  434. package/docs/catalog/composite-products.md +115 -0
  435. package/docs/catalog/gallery-and-labels.md +73 -0
  436. package/docs/catalog/packaging-units.md +67 -0
  437. package/docs/catalog/per-channel-per-language-overrides.md +234 -0
  438. package/docs/catalog/product-links.md +79 -0
  439. package/docs/catalog.md +207 -0
  440. package/i18n/en.json +649 -0
  441. package/i18n/pl.json +649 -0
  442. package/package.json +109 -0
  443. package/tailwind.css +14 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Catalog 002 — Attribute Sets (T014).
4
+ *
5
+ * Adds the AttributeSet domain on top of foundation 001:
6
+ * - `attribute_sets`: named container of Product Attributes.
7
+ * - `attribute_set_attributes`: composite-PK bridge to
8
+ * `product_attributes` with a `position` column.
9
+ * - Idempotent seed of the system **Default** Attribute Set with a
10
+ * deterministic UUID so every Product can reference it without
11
+ * application-level lookup.
12
+ * - `products.attribute_set_id`: NOT NULL FK pointing at the Default
13
+ * set on existing rows; new rows pick the Set explicitly.
14
+ *
15
+ * See specs/002-catalog-module/data-model.md §2.1, §2.2, §1.1.
16
+ *
17
+ * Naming follows Principle VI:
18
+ * - Plural snake_case tables.
19
+ * - FK columns named `{singular}_id`.
20
+ * - Unique / index constraint names prefixed with table name.
21
+ */
22
+ export declare class Migration20260429T064146CatalogAttributeSetsInit extends Migration {
23
+ /**
24
+ * Deterministic UUID for the system Default Attribute Set. Hard-coded
25
+ * so seeds, contract tests, and integration tests can reference it
26
+ * without a lookup query, and so backfilling existing Products on this
27
+ * migration is a single UPDATE rather than two queries.
28
+ */
29
+ static readonly DEFAULT_ATTRIBUTE_SET_ID = "defa0017-0000-4000-8000-000000000000";
30
+ up(): Promise<void>;
31
+ down(): Promise<void>;
32
+ }
33
+ //# sourceMappingURL=20260429T064146_catalog_attribute_sets_init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260429T064146_catalog_attribute_sets_init.d.ts","sourceRoot":"","sources":["../../src/migrations/20260429T064146_catalog_attribute_sets_init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,gDAAiD,SAAQ,SAAS;IAC7E;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,wBAAwB,0CACC;IAE1B,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;IA0FnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CASrC"}
@@ -0,0 +1,118 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Catalog 002 — Attribute Sets (T014).
4
+ *
5
+ * Adds the AttributeSet domain on top of foundation 001:
6
+ * - `attribute_sets`: named container of Product Attributes.
7
+ * - `attribute_set_attributes`: composite-PK bridge to
8
+ * `product_attributes` with a `position` column.
9
+ * - Idempotent seed of the system **Default** Attribute Set with a
10
+ * deterministic UUID so every Product can reference it without
11
+ * application-level lookup.
12
+ * - `products.attribute_set_id`: NOT NULL FK pointing at the Default
13
+ * set on existing rows; new rows pick the Set explicitly.
14
+ *
15
+ * See specs/002-catalog-module/data-model.md §2.1, §2.2, §1.1.
16
+ *
17
+ * Naming follows Principle VI:
18
+ * - Plural snake_case tables.
19
+ * - FK columns named `{singular}_id`.
20
+ * - Unique / index constraint names prefixed with table name.
21
+ */
22
+ export class Migration20260429T064146CatalogAttributeSetsInit extends Migration {
23
+ /**
24
+ * Deterministic UUID for the system Default Attribute Set. Hard-coded
25
+ * so seeds, contract tests, and integration tests can reference it
26
+ * without a lookup query, and so backfilling existing Products on this
27
+ * migration is a single UPDATE rather than two queries.
28
+ */
29
+ static DEFAULT_ATTRIBUTE_SET_ID = 'defa0017-0000-4000-8000-000000000000'; // mnemonic: default + migration 017; valid UUID v4 (version=4, variant=8)
30
+ async up() {
31
+ // -- attribute_sets -------------------------------------------------------
32
+ this.addSql(`
33
+ create table "attribute_sets" (
34
+ "id" uuid not null,
35
+ "code" varchar(64) not null,
36
+ "name" jsonb not null,
37
+ "description" jsonb null,
38
+ "is_system" boolean not null default false,
39
+ "created_at" timestamptz not null,
40
+ "updated_at" timestamptz not null,
41
+ constraint "attribute_sets_pkey" primary key ("id"),
42
+ constraint "uniq_attribute_sets_code" unique ("code")
43
+ );
44
+ `);
45
+ // Idempotent seed of the system Default set.
46
+ this.addSql(`
47
+ insert into "attribute_sets"
48
+ ("id", "code", "name", "description", "is_system", "created_at", "updated_at")
49
+ values
50
+ ('${Migration20260429T064146CatalogAttributeSetsInit.DEFAULT_ATTRIBUTE_SET_ID}',
51
+ 'default',
52
+ '{"en-US":"Default","pl-PL":"Domyślny"}'::jsonb,
53
+ '{"en-US":"System default attribute set assigned to every product unless explicitly changed.","pl-PL":"Systemowy domyślny zbiór atrybutów przypisywany do każdego produktu, dopóki administrator go nie zmieni."}'::jsonb,
54
+ true,
55
+ now(),
56
+ now())
57
+ on conflict ("code") do nothing;
58
+ `);
59
+ // -- attribute_set_attributes (M:N bridge) -------------------------------
60
+ this.addSql(`
61
+ create table "attribute_set_attributes" (
62
+ "attribute_set_id" uuid not null,
63
+ "product_attribute_id" uuid not null,
64
+ "position" int not null default 0,
65
+ constraint "attribute_set_attributes_pkey"
66
+ primary key ("attribute_set_id", "product_attribute_id"),
67
+ constraint "fk_attribute_set_attributes_set"
68
+ foreign key ("attribute_set_id")
69
+ references "attribute_sets" ("id")
70
+ on delete cascade,
71
+ constraint "fk_attribute_set_attributes_attribute"
72
+ foreign key ("product_attribute_id")
73
+ references "product_attributes" ("id")
74
+ on delete restrict
75
+ );
76
+ `);
77
+ this.addSql('create index "attribute_set_attributes_set_id_index" on "attribute_set_attributes" ("attribute_set_id");');
78
+ this.addSql('create index "attribute_set_attributes_attribute_id_index" on "attribute_set_attributes" ("product_attribute_id");');
79
+ // -- products.attribute_set_id -------------------------------------------
80
+ // Backfill in three steps so the constraint is enforceable on
81
+ // pre-existing rows:
82
+ // 1. Add the column nullable with a default of the Default set ID.
83
+ // 2. Update all rows whose value is NULL to the Default set ID
84
+ // (handles any legacy NULL state, even though the default makes
85
+ // this a no-op for greenfield).
86
+ // 3. Tighten to NOT NULL and add the FK + index.
87
+ this.addSql(`
88
+ alter table "products"
89
+ add column "attribute_set_id" uuid
90
+ default '${Migration20260429T064146CatalogAttributeSetsInit.DEFAULT_ATTRIBUTE_SET_ID}'::uuid;
91
+ `);
92
+ this.addSql(`
93
+ update "products"
94
+ set "attribute_set_id" = '${Migration20260429T064146CatalogAttributeSetsInit.DEFAULT_ATTRIBUTE_SET_ID}'::uuid
95
+ where "attribute_set_id" is null;
96
+ `);
97
+ this.addSql(`
98
+ alter table "products"
99
+ alter column "attribute_set_id" set not null;
100
+ `);
101
+ this.addSql(`
102
+ alter table "products"
103
+ add constraint "fk_products_attribute_set"
104
+ foreign key ("attribute_set_id")
105
+ references "attribute_sets" ("id")
106
+ on delete restrict;
107
+ `);
108
+ this.addSql('create index "products_attribute_set_id_index" on "products" ("attribute_set_id");');
109
+ }
110
+ async down() {
111
+ this.addSql('drop index if exists "products_attribute_set_id_index";');
112
+ this.addSql('alter table "products" drop constraint if exists "fk_products_attribute_set";');
113
+ this.addSql('alter table "products" drop column if exists "attribute_set_id";');
114
+ this.addSql('drop table if exists "attribute_set_attributes" cascade;');
115
+ this.addSql('drop table if exists "attribute_sets" cascade;');
116
+ }
117
+ }
118
+ //# sourceMappingURL=20260429T064146_catalog_attribute_sets_init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260429T064146_catalog_attribute_sets_init.js","sourceRoot":"","sources":["../../src/migrations/20260429T064146_catalog_attribute_sets_init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,gDAAiD,SAAQ,SAAS;IAC7E;;;;;OAKG;IACH,MAAM,CAAU,wBAAwB,GACtC,sCAAsC,CAAC,CAAC,0EAA0E;IAE3G,KAAK,CAAC,EAAE;QACf,4EAA4E;QAC5E,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;KAYX,CAAC,CAAC;QAEH,6CAA6C;QAC7C,IAAI,CAAC,MAAM,CAAC;;;;YAIJ,gDAAgD,CAAC,wBAAwB;;;;;;;;KAQhF,CAAC,CAAC;QAEH,2EAA2E;QAC3E,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;KAgBX,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CACT,0GAA0G,CAC3G,CAAC;QACF,IAAI,CAAC,MAAM,CACT,oHAAoH,CACrH,CAAC;QAEF,2EAA2E;QAC3E,8DAA8D;QAC9D,qBAAqB;QACrB,qEAAqE;QACrE,iEAAiE;QACjE,qEAAqE;QACrE,qCAAqC;QACrC,mDAAmD;QACnD,IAAI,CAAC,MAAM,CAAC;;;mBAGG,gDAAgD,CAAC,wBAAwB;KACvF,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC;;oCAEoB,gDAAgD,CAAC,wBAAwB;;KAExG,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC;;;KAGX,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC;;;;;;KAMX,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CACT,oFAAoF,CACrF,CAAC;IACJ,CAAC;IAEQ,KAAK,CAAC,IAAI;QACjB,IAAI,CAAC,MAAM,CAAC,yDAAyD,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,CACT,+EAA+E,CAChF,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,kEAAkE,CAAC,CAAC;QAChF,IAAI,CAAC,MAAM,CAAC,0DAA0D,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC;IAChE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Catalog 002 — ProductAttribute extensions (T015).
4
+ *
5
+ * Backs the new attribute capabilities introduced in feature 002:
6
+ * - `display_as_slider` boolean: presentation hint for filterable
7
+ * numeric/price attributes. Honored only when `value_type IN
8
+ * ('number','price')`; service layer rejects `display_as_slider=true`
9
+ * on any other type.
10
+ *
11
+ * The `value_type` column itself stays a plain `varchar(16)` with no
12
+ * DB-level CHECK constraint (foundation 001 chose to enforce the enum
13
+ * only at the application/Zod layer). New values `'multiselect'` and
14
+ * `'price'` are added to the application enum in the same change set
15
+ * (entity + Zod schema); no DDL change needed for them — both fit
16
+ * within varchar(16).
17
+ *
18
+ * See specs/002-catalog-module/data-model.md §1.2, research.md R-4 / R-7.
19
+ */
20
+ export declare class Migration20260429T070004CatalogProductAttributeExtensions extends Migration {
21
+ up(): Promise<void>;
22
+ down(): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=20260429T070004_catalog_product_attribute_extensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260429T070004_catalog_product_attribute_extensions.d.ts","sourceRoot":"","sources":["../../src/migrations/20260429T070004_catalog_product_attribute_extensions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,yDAA0D,SAAQ,SAAS;IACvE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;IAOnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAKrC"}
@@ -0,0 +1,31 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Catalog 002 — ProductAttribute extensions (T015).
4
+ *
5
+ * Backs the new attribute capabilities introduced in feature 002:
6
+ * - `display_as_slider` boolean: presentation hint for filterable
7
+ * numeric/price attributes. Honored only when `value_type IN
8
+ * ('number','price')`; service layer rejects `display_as_slider=true`
9
+ * on any other type.
10
+ *
11
+ * The `value_type` column itself stays a plain `varchar(16)` with no
12
+ * DB-level CHECK constraint (foundation 001 chose to enforce the enum
13
+ * only at the application/Zod layer). New values `'multiselect'` and
14
+ * `'price'` are added to the application enum in the same change set
15
+ * (entity + Zod schema); no DDL change needed for them — both fit
16
+ * within varchar(16).
17
+ *
18
+ * See specs/002-catalog-module/data-model.md §1.2, research.md R-4 / R-7.
19
+ */
20
+ export class Migration20260429T070004CatalogProductAttributeExtensions extends Migration {
21
+ async up() {
22
+ this.addSql(`
23
+ alter table "product_attributes"
24
+ add column "display_as_slider" boolean not null default false;
25
+ `);
26
+ }
27
+ async down() {
28
+ this.addSql('alter table "product_attributes" drop column if exists "display_as_slider";');
29
+ }
30
+ }
31
+ //# sourceMappingURL=20260429T070004_catalog_product_attribute_extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260429T070004_catalog_product_attribute_extensions.js","sourceRoot":"","sources":["../../src/migrations/20260429T070004_catalog_product_attribute_extensions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,yDAA0D,SAAQ,SAAS;IAC7E,KAAK,CAAC,EAAE;QACf,IAAI,CAAC,MAAM,CAAC;;;KAGX,CAAC,CAAC;IACL,CAAC;IAEQ,KAAK,CAAC,IAAI;QACjB,IAAI,CAAC,MAAM,CACT,6EAA6E,CAC9E,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,32 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Catalog 002 — Product type rename + virtual download fields (T044).
4
+ *
5
+ * Three changes (data-model.md §1.1, research.md R-1):
6
+ * - Rename `products.type` value 'variant' → 'configurable'. Foundation
7
+ * 001 stored configurable products as type='variant'; feature 002
8
+ * renames this everywhere for consistency with the spec wording.
9
+ * The DB column itself is `varchar(16)` with no CHECK constraint
10
+ * (foundation enforces the enum only at the application/Zod layer),
11
+ * so the rename is a plain UPDATE.
12
+ * - Add 'bundle' as a new type value. No DDL needed for the same
13
+ * reason — varchar(16) already accommodates it. The application
14
+ * enum extension lives in T046 (productTypeSchema).
15
+ * - Add `download_asset_id` (uuid NULL FK to assets) and `download_url`
16
+ * (varchar(2048) NULL) for type='virtual'. Cross-field invariant
17
+ * ("exactly one of") is enforced at the service layer (T047), not
18
+ * by a DB CHECK — PG can't express the rule cleanly without
19
+ * duplicating the type comparison in every CHECK constraint.
20
+ *
21
+ * Rollback (down) reverses everything: drop new columns, then UPDATE
22
+ * configurable rows back to 'variant'. Bundle rows would need to be
23
+ * downgraded too — for safety we update them to 'simple' on rollback
24
+ * since foundation has no native 'bundle' representation; rollback in
25
+ * production with bundle data already present would be a separate
26
+ * data-migration concern.
27
+ */
28
+ export declare class Migration20260429T102322CatalogProductTypeAndVirtualFields extends Migration {
29
+ up(): Promise<void>;
30
+ down(): Promise<void>;
31
+ }
32
+ //# sourceMappingURL=20260429T102322_catalog_product_type_and_virtual_fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260429T102322_catalog_product_type_and_virtual_fields.d.ts","sourceRoot":"","sources":["../../src/migrations/20260429T102322_catalog_product_type_and_virtual_fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,0DAA2D,SAAQ,SAAS;IACxE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAiBrC"}
@@ -0,0 +1,58 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Catalog 002 — Product type rename + virtual download fields (T044).
4
+ *
5
+ * Three changes (data-model.md §1.1, research.md R-1):
6
+ * - Rename `products.type` value 'variant' → 'configurable'. Foundation
7
+ * 001 stored configurable products as type='variant'; feature 002
8
+ * renames this everywhere for consistency with the spec wording.
9
+ * The DB column itself is `varchar(16)` with no CHECK constraint
10
+ * (foundation enforces the enum only at the application/Zod layer),
11
+ * so the rename is a plain UPDATE.
12
+ * - Add 'bundle' as a new type value. No DDL needed for the same
13
+ * reason — varchar(16) already accommodates it. The application
14
+ * enum extension lives in T046 (productTypeSchema).
15
+ * - Add `download_asset_id` (uuid NULL FK to assets) and `download_url`
16
+ * (varchar(2048) NULL) for type='virtual'. Cross-field invariant
17
+ * ("exactly one of") is enforced at the service layer (T047), not
18
+ * by a DB CHECK — PG can't express the rule cleanly without
19
+ * duplicating the type comparison in every CHECK constraint.
20
+ *
21
+ * Rollback (down) reverses everything: drop new columns, then UPDATE
22
+ * configurable rows back to 'variant'. Bundle rows would need to be
23
+ * downgraded too — for safety we update them to 'simple' on rollback
24
+ * since foundation has no native 'bundle' representation; rollback in
25
+ * production with bundle data already present would be a separate
26
+ * data-migration concern.
27
+ */
28
+ export class Migration20260429T102322CatalogProductTypeAndVirtualFields extends Migration {
29
+ async up() {
30
+ // 1. Rename 'variant' → 'configurable'.
31
+ this.addSql(`update "products" set "type" = 'configurable' where "type" = 'variant';`);
32
+ // 2. Add virtual download fields. Both nullable; "exactly one of"
33
+ // is enforced by the service (T047).
34
+ this.addSql(`
35
+ alter table "products"
36
+ add column "download_asset_id" uuid null,
37
+ add column "download_url" varchar(2048) null;
38
+ `);
39
+ this.addSql(`
40
+ alter table "products"
41
+ add constraint "fk_products_download_asset"
42
+ foreign key ("download_asset_id")
43
+ references "assets" ("id")
44
+ on delete restrict;
45
+ `);
46
+ this.addSql('create index "products_download_asset_id_index" on "products" ("download_asset_id");');
47
+ }
48
+ async down() {
49
+ this.addSql('drop index if exists "products_download_asset_id_index";');
50
+ this.addSql('alter table "products" drop constraint if exists "fk_products_download_asset";');
51
+ this.addSql('alter table "products" drop column if exists "download_url", drop column if exists "download_asset_id";');
52
+ // Rollback type rename. Bundle-typed rows are downgraded to simple
53
+ // because foundation 001 has no 'bundle' value.
54
+ this.addSql(`update "products" set "type" = 'simple' where "type" = 'bundle';`);
55
+ this.addSql(`update "products" set "type" = 'variant' where "type" = 'configurable';`);
56
+ }
57
+ }
58
+ //# sourceMappingURL=20260429T102322_catalog_product_type_and_virtual_fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260429T102322_catalog_product_type_and_virtual_fields.js","sourceRoot":"","sources":["../../src/migrations/20260429T102322_catalog_product_type_and_virtual_fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,OAAO,0DAA2D,SAAQ,SAAS;IAC9E,KAAK,CAAC,EAAE;QACf,wCAAwC;QACxC,IAAI,CAAC,MAAM,CACT,yEAAyE,CAC1E,CAAC;QAEF,kEAAkE;QAClE,wCAAwC;QACxC,IAAI,CAAC,MAAM,CAAC;;;;KAIX,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC;;;;;;KAMX,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CACT,sFAAsF,CACvF,CAAC;IACJ,CAAC;IAEQ,KAAK,CAAC,IAAI;QACjB,IAAI,CAAC,MAAM,CAAC,0DAA0D,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,CACT,gFAAgF,CACjF,CAAC;QACF,IAAI,CAAC,MAAM,CACT,yGAAyG,CAC1G,CAAC;QACF,mEAAmE;QACnE,gDAAgD;QAChD,IAAI,CAAC,MAAM,CACT,kEAAkE,CACnE,CAAC;QACF,IAAI,CAAC,MAAM,CACT,yEAAyE,CAC1E,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Catalog 002 — Gallery (T062, US3, data-model.md §2.3, §2.4).
4
+ *
5
+ * Two tables:
6
+ * - gallery_items: per-Product list of Asset references with `position`
7
+ * ordering. Asset is FK → assets(id) ON DELETE RESTRICT (Asset
8
+ * survives gallery item deletion).
9
+ * - gallery_item_labels: per-Product label assignments. Per-product
10
+ * UNIQUE constraint on (product_id, label) enforces the spec rule
11
+ * that only ONE Element of each label kind can exist per Product
12
+ * (research.md R-2). The `product_id` column is duplicated on the
13
+ * bridge so PG can enforce the unique constraint without a sub-query.
14
+ *
15
+ * Naming follows Principle VI (plural snake_case tables, FK columns
16
+ * named `{singular}_id`).
17
+ */
18
+ export declare class Migration20260429T111839CatalogGalleryItemsAndLabels extends Migration {
19
+ up(): Promise<void>;
20
+ down(): Promise<void>;
21
+ }
22
+ //# sourceMappingURL=20260429T111839_catalog_gallery_items_and_labels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260429T111839_catalog_gallery_items_and_labels.d.ts","sourceRoot":"","sources":["../../src/migrations/20260429T111839_catalog_gallery_items_and_labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,oDAAqD,SAAQ,SAAS;IAClE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;IAkDnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAIrC"}
@@ -0,0 +1,66 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Catalog 002 — Gallery (T062, US3, data-model.md §2.3, §2.4).
4
+ *
5
+ * Two tables:
6
+ * - gallery_items: per-Product list of Asset references with `position`
7
+ * ordering. Asset is FK → assets(id) ON DELETE RESTRICT (Asset
8
+ * survives gallery item deletion).
9
+ * - gallery_item_labels: per-Product label assignments. Per-product
10
+ * UNIQUE constraint on (product_id, label) enforces the spec rule
11
+ * that only ONE Element of each label kind can exist per Product
12
+ * (research.md R-2). The `product_id` column is duplicated on the
13
+ * bridge so PG can enforce the unique constraint without a sub-query.
14
+ *
15
+ * Naming follows Principle VI (plural snake_case tables, FK columns
16
+ * named `{singular}_id`).
17
+ */
18
+ export class Migration20260429T111839CatalogGalleryItemsAndLabels extends Migration {
19
+ async up() {
20
+ // -- gallery_items --------------------------------------------------------
21
+ this.addSql(`
22
+ create table "gallery_items" (
23
+ "id" uuid not null,
24
+ "product_id" uuid not null,
25
+ "asset_id" uuid not null,
26
+ "position" int not null default 0,
27
+ "created_at" timestamptz not null,
28
+ "updated_at" timestamptz not null,
29
+ constraint "gallery_items_pkey" primary key ("id"),
30
+ constraint "fk_gallery_items_product"
31
+ foreign key ("product_id") references "products" ("id") on delete cascade,
32
+ constraint "fk_gallery_items_asset"
33
+ foreign key ("asset_id") references "assets" ("id") on delete restrict
34
+ );
35
+ `);
36
+ this.addSql('create index "gallery_items_product_id_index" on "gallery_items" ("product_id");');
37
+ this.addSql('create index "gallery_items_product_id_position_index" on "gallery_items" ("product_id", "position");');
38
+ // -- gallery_item_labels (bridge) ----------------------------------------
39
+ // Composite PK on (gallery_item_id, label) prevents a single
40
+ // gallery_item from receiving the same label twice.
41
+ // UNIQUE(product_id, label) enforces "only one of each label per
42
+ // Product" — the load-bearing constraint that makes the swap
43
+ // operation safe (research.md R-2).
44
+ this.addSql(`
45
+ create table "gallery_item_labels" (
46
+ "gallery_item_id" uuid not null,
47
+ "product_id" uuid not null,
48
+ "label" varchar(16) not null,
49
+ constraint "gallery_item_labels_pkey" primary key ("gallery_item_id", "label"),
50
+ constraint "uniq_gallery_item_labels_product_label" unique ("product_id", "label"),
51
+ constraint "fk_gallery_item_labels_item"
52
+ foreign key ("gallery_item_id") references "gallery_items" ("id") on delete cascade,
53
+ constraint "fk_gallery_item_labels_product"
54
+ foreign key ("product_id") references "products" ("id") on delete cascade,
55
+ constraint "chk_gallery_item_labels_label"
56
+ check ("label" in ('base_image', 'small_image', 'thumbnail'))
57
+ );
58
+ `);
59
+ this.addSql('create index "gallery_item_labels_product_id_index" on "gallery_item_labels" ("product_id");');
60
+ }
61
+ async down() {
62
+ this.addSql('drop table if exists "gallery_item_labels" cascade;');
63
+ this.addSql('drop table if exists "gallery_items" cascade;');
64
+ }
65
+ }
66
+ //# sourceMappingURL=20260429T111839_catalog_gallery_items_and_labels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260429T111839_catalog_gallery_items_and_labels.js","sourceRoot":"","sources":["../../src/migrations/20260429T111839_catalog_gallery_items_and_labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,oDAAqD,SAAQ,SAAS;IACxE,KAAK,CAAC,EAAE;QACf,4EAA4E;QAC5E,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;;;KAcX,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CACT,kFAAkF,CACnF,CAAC;QACF,IAAI,CAAC,MAAM,CACT,uGAAuG,CACxG,CAAC;QAEF,2EAA2E;QAC3E,6DAA6D;QAC7D,oDAAoD;QACpD,iEAAiE;QACjE,6DAA6D;QAC7D,oCAAoC;QACpC,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;;;KAcX,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CACT,8FAA8F,CAC/F,CAAC;IACJ,CAAC;IAEQ,KAAK,CAAC,IAAI;QACjB,IAAI,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC;IAC/D,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Catalog 002 — Attachments (T070, US3, data-model.md §2.5, §2.6).
4
+ *
5
+ * Two tables:
6
+ * - attachment_types: global dictionary (code, multilingual name,
7
+ * position). Seeded with 4 standard types: certificate, tech_spec,
8
+ * product_card, pdf. Idempotent ON CONFLICT (code) DO NOTHING.
9
+ * - product_attachments: cross-product wrapper around an Asset
10
+ * (research.md R-9). Composite of (product_id, asset_id,
11
+ * attachment_type_id, name, description, position). Asset is FK
12
+ * RESTRICT (Asset survives attachment unlink).
13
+ */
14
+ export declare class Migration20260429T112543CatalogProductAttachments extends Migration {
15
+ up(): Promise<void>;
16
+ down(): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=20260429T112543_catalog_product_attachments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260429T112543_catalog_product_attachments.d.ts","sourceRoot":"","sources":["../../src/migrations/20260429T112543_catalog_product_attachments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;GAWG;AACH,qBAAa,iDAAkD,SAAQ,SAAS;IAC/D,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;IA2DnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAIrC"}
@@ -0,0 +1,73 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Catalog 002 — Attachments (T070, US3, data-model.md §2.5, §2.6).
4
+ *
5
+ * Two tables:
6
+ * - attachment_types: global dictionary (code, multilingual name,
7
+ * position). Seeded with 4 standard types: certificate, tech_spec,
8
+ * product_card, pdf. Idempotent ON CONFLICT (code) DO NOTHING.
9
+ * - product_attachments: cross-product wrapper around an Asset
10
+ * (research.md R-9). Composite of (product_id, asset_id,
11
+ * attachment_type_id, name, description, position). Asset is FK
12
+ * RESTRICT (Asset survives attachment unlink).
13
+ */
14
+ export class Migration20260429T112543CatalogProductAttachments extends Migration {
15
+ async up() {
16
+ // -- attachment_types -----------------------------------------------------
17
+ this.addSql(`
18
+ create table "attachment_types" (
19
+ "id" uuid not null,
20
+ "code" varchar(64) not null,
21
+ "name" jsonb not null,
22
+ "position" int not null default 0,
23
+ "created_at" timestamptz not null,
24
+ "updated_at" timestamptz not null,
25
+ constraint "attachment_types_pkey" primary key ("id"),
26
+ constraint "uniq_attachment_types_code" unique ("code")
27
+ );
28
+ `);
29
+ // Seed 4 standard types with deterministic UUIDs (v4-shaped) so seeds
30
+ // and tests can reference them stably.
31
+ this.addSql(`
32
+ insert into "attachment_types" ("id", "code", "name", "position", "created_at", "updated_at")
33
+ values
34
+ ('a77ac001-0000-4000-8000-000000000001', 'certificate',
35
+ '{"en-US":"Certificate","pl-PL":"Certyfikat"}'::jsonb, 0, now(), now()),
36
+ ('a77ac001-0000-4000-8000-000000000002', 'tech_spec',
37
+ '{"en-US":"Technical specification","pl-PL":"Specyfikacja techniczna"}'::jsonb, 1, now(), now()),
38
+ ('a77ac001-0000-4000-8000-000000000003', 'product_card',
39
+ '{"en-US":"Product card","pl-PL":"Karta produktu"}'::jsonb, 2, now(), now()),
40
+ ('a77ac001-0000-4000-8000-000000000004', 'pdf',
41
+ '{"en-US":"PDF","pl-PL":"PDF"}'::jsonb, 3, now(), now())
42
+ on conflict ("code") do nothing;
43
+ `);
44
+ // -- product_attachments --------------------------------------------------
45
+ this.addSql(`
46
+ create table "product_attachments" (
47
+ "id" uuid not null,
48
+ "product_id" uuid not null,
49
+ "asset_id" uuid not null,
50
+ "attachment_type_id" uuid not null,
51
+ "name" varchar(160) not null,
52
+ "description" text null,
53
+ "position" int not null default 0,
54
+ "created_at" timestamptz not null,
55
+ "updated_at" timestamptz not null,
56
+ constraint "product_attachments_pkey" primary key ("id"),
57
+ constraint "fk_product_attachments_product"
58
+ foreign key ("product_id") references "products" ("id") on delete cascade,
59
+ constraint "fk_product_attachments_asset"
60
+ foreign key ("asset_id") references "assets" ("id") on delete restrict,
61
+ constraint "fk_product_attachments_type"
62
+ foreign key ("attachment_type_id") references "attachment_types" ("id") on delete restrict
63
+ );
64
+ `);
65
+ this.addSql('create index "product_attachments_product_id_index" on "product_attachments" ("product_id");');
66
+ this.addSql('create index "product_attachments_attachment_type_id_index" on "product_attachments" ("attachment_type_id");');
67
+ }
68
+ async down() {
69
+ this.addSql('drop table if exists "product_attachments" cascade;');
70
+ this.addSql('drop table if exists "attachment_types" cascade;');
71
+ }
72
+ }
73
+ //# sourceMappingURL=20260429T112543_catalog_product_attachments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260429T112543_catalog_product_attachments.js","sourceRoot":"","sources":["../../src/migrations/20260429T112543_catalog_product_attachments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,iDAAkD,SAAQ,SAAS;IACrE,KAAK,CAAC,EAAE;QACf,4EAA4E;QAC5E,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;KAWX,CAAC,CAAC;QACH,sEAAsE;QACtE,uCAAuC;QACvC,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;KAYX,CAAC,CAAC;QAEH,4EAA4E;QAC5E,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;KAmBX,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CACT,8FAA8F,CAC/F,CAAC;QACF,IAAI,CAAC,MAAM,CACT,8GAA8G,CAC/G,CAAC;IACJ,CAAC;IAEQ,KAAK,CAAC,IAAI;QACjB,IAAI,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Catalog 002 — Product Links (T101, US4, data-model.md §2.7).
4
+ *
5
+ * Single table `product_links` for related / up-sell / cross-sell pairings:
6
+ * - composite PK on `id`
7
+ * - UNIQUE (source_product_id, target_product_id, kind) — same pair can
8
+ * appear once per kind, never twice for the same kind
9
+ * - CHECK source_product_id <> target_product_id — DB-level guard against
10
+ * self-links so even raw SQL inserts are blocked (defence-in-depth on
11
+ * top of the service-layer SELF_LINK_NOT_ALLOWED 400 in T104)
12
+ * - CHECK kind IN ('related','up_sell','cross_sell')
13
+ * - position int default 0 — admin-curated ordering per (source, kind)
14
+ * - both FKs cascade on product delete (link rows have no value when
15
+ * either side is gone)
16
+ */
17
+ export declare class Migration20260429T123726CatalogProductLinks extends Migration {
18
+ up(): Promise<void>;
19
+ down(): Promise<void>;
20
+ }
21
+ //# sourceMappingURL=20260429T123726_catalog_product_links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260429T123726_catalog_product_links.d.ts","sourceRoot":"","sources":["../../src/migrations/20260429T123726_catalog_product_links.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,2CAA4C,SAAQ,SAAS;IACzD,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAGrC"}
@@ -0,0 +1,48 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Catalog 002 — Product Links (T101, US4, data-model.md §2.7).
4
+ *
5
+ * Single table `product_links` for related / up-sell / cross-sell pairings:
6
+ * - composite PK on `id`
7
+ * - UNIQUE (source_product_id, target_product_id, kind) — same pair can
8
+ * appear once per kind, never twice for the same kind
9
+ * - CHECK source_product_id <> target_product_id — DB-level guard against
10
+ * self-links so even raw SQL inserts are blocked (defence-in-depth on
11
+ * top of the service-layer SELF_LINK_NOT_ALLOWED 400 in T104)
12
+ * - CHECK kind IN ('related','up_sell','cross_sell')
13
+ * - position int default 0 — admin-curated ordering per (source, kind)
14
+ * - both FKs cascade on product delete (link rows have no value when
15
+ * either side is gone)
16
+ */
17
+ export class Migration20260429T123726CatalogProductLinks extends Migration {
18
+ async up() {
19
+ this.addSql(`
20
+ create table "product_links" (
21
+ "id" uuid not null,
22
+ "source_product_id" uuid not null,
23
+ "target_product_id" uuid not null,
24
+ "kind" varchar(16) not null,
25
+ "position" int not null default 0,
26
+ "created_at" timestamptz not null,
27
+ "updated_at" timestamptz not null,
28
+ constraint "product_links_pkey" primary key ("id"),
29
+ constraint "uniq_product_links_source_target_kind"
30
+ unique ("source_product_id", "target_product_id", "kind"),
31
+ constraint "chk_product_links_no_self"
32
+ check ("source_product_id" <> "target_product_id"),
33
+ constraint "chk_product_links_kind"
34
+ check ("kind" in ('related', 'up_sell', 'cross_sell')),
35
+ constraint "fk_product_links_source"
36
+ foreign key ("source_product_id") references "products" ("id") on delete cascade,
37
+ constraint "fk_product_links_target"
38
+ foreign key ("target_product_id") references "products" ("id") on delete cascade
39
+ );
40
+ `);
41
+ this.addSql('create index "product_links_source_kind_index" on "product_links" ("source_product_id", "kind");');
42
+ this.addSql('create index "product_links_target_index" on "product_links" ("target_product_id");');
43
+ }
44
+ async down() {
45
+ this.addSql('drop table if exists "product_links" cascade;');
46
+ }
47
+ }
48
+ //# sourceMappingURL=20260429T123726_catalog_product_links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260429T123726_catalog_product_links.js","sourceRoot":"","sources":["../../src/migrations/20260429T123726_catalog_product_links.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,2CAA4C,SAAQ,SAAS;IAC/D,KAAK,CAAC,EAAE;QACf,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;KAqBX,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CACT,kGAAkG,CACnG,CAAC;QACF,IAAI,CAAC,MAAM,CACT,qFAAqF,CACtF,CAAC;IACJ,CAAC;IAEQ,KAAK,CAAC,IAAI;QACjB,IAAI,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC;IAC/D,CAAC;CACF"}