@porulle/core 0.10.8 → 0.13.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 (360) hide show
  1. package/dist/auth/auth-schema-guard.d.ts +2444 -0
  2. package/dist/auth/auth-schema-guard.d.ts.map +1 -0
  3. package/dist/auth/auth-schema-guard.js +113 -0
  4. package/dist/auth/auth-schema.d.ts +228 -0
  5. package/dist/auth/auth-schema.d.ts.map +1 -1
  6. package/dist/auth/auth-schema.js +24 -2
  7. package/dist/auth/middleware.d.ts +1 -0
  8. package/dist/auth/middleware.d.ts.map +1 -1
  9. package/dist/auth/middleware.js +13 -5
  10. package/dist/auth/org.d.ts +8 -2
  11. package/dist/auth/org.d.ts.map +1 -1
  12. package/dist/auth/org.js +12 -4
  13. package/dist/auth/organization-guard.d.ts +5 -0
  14. package/dist/auth/organization-guard.d.ts.map +1 -0
  15. package/dist/auth/organization-guard.js +124 -0
  16. package/dist/auth/permissions.d.ts +10 -0
  17. package/dist/auth/permissions.d.ts.map +1 -1
  18. package/dist/auth/permissions.js +31 -7
  19. package/dist/auth/role-authority.d.ts +44 -0
  20. package/dist/auth/role-authority.d.ts.map +1 -0
  21. package/dist/auth/role-authority.js +85 -0
  22. package/dist/auth/setup.d.ts.map +1 -1
  23. package/dist/auth/setup.js +17 -0
  24. package/dist/auth/strict-org-resolution.d.ts.map +1 -1
  25. package/dist/auth/strict-org-resolution.js +9 -1
  26. package/dist/auth/types.d.ts +1 -1
  27. package/dist/auth/types.d.ts.map +1 -1
  28. package/dist/config/defaults.d.ts.map +1 -1
  29. package/dist/config/defaults.js +2 -0
  30. package/dist/config/types.d.ts +33 -4
  31. package/dist/config/types.d.ts.map +1 -1
  32. package/dist/hooks/checkout.d.ts.map +1 -1
  33. package/dist/hooks/checkout.js +10 -9
  34. package/dist/index.d.ts +9 -6
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +5 -3
  37. package/dist/interfaces/rest/audit-middleware.d.ts.map +1 -1
  38. package/dist/interfaces/rest/audit-middleware.js +2 -0
  39. package/dist/interfaces/rest/customer-portal.d.ts.map +1 -1
  40. package/dist/interfaces/rest/customer-portal.js +9 -8
  41. package/dist/interfaces/rest/index.d.ts.map +1 -1
  42. package/dist/interfaces/rest/index.js +4 -0
  43. package/dist/interfaces/rest/route-coverage.d.ts +14 -0
  44. package/dist/interfaces/rest/route-coverage.d.ts.map +1 -0
  45. package/dist/interfaces/rest/route-coverage.js +81 -0
  46. package/dist/interfaces/rest/router.d.ts +7 -2
  47. package/dist/interfaces/rest/router.d.ts.map +1 -1
  48. package/dist/interfaces/rest/router.js +8 -4
  49. package/dist/interfaces/rest/routes/admin/compensation-failures.d.ts.map +1 -1
  50. package/dist/interfaces/rest/routes/admin/compensation-failures.js +7 -5
  51. package/dist/interfaces/rest/routes/admin/custom-field-proposals.d.ts +5 -0
  52. package/dist/interfaces/rest/routes/admin/custom-field-proposals.d.ts.map +1 -0
  53. package/dist/interfaces/rest/routes/admin/custom-field-proposals.js +22 -0
  54. package/dist/interfaces/rest/routes/admin/entity-field-definitions.d.ts +5 -0
  55. package/dist/interfaces/rest/routes/admin/entity-field-definitions.d.ts.map +1 -0
  56. package/dist/interfaces/rest/routes/admin/entity-field-definitions.js +39 -0
  57. package/dist/interfaces/rest/routes/admin/permissions.d.ts +1 -1
  58. package/dist/interfaces/rest/routes/admin/permissions.d.ts.map +1 -1
  59. package/dist/interfaces/rest/routes/admin/permissions.js +2 -0
  60. package/dist/interfaces/rest/routes/admin/staff.d.ts.map +1 -1
  61. package/dist/interfaces/rest/routes/admin/staff.js +126 -66
  62. package/dist/interfaces/rest/routes/admin-jobs.js +3 -3
  63. package/dist/interfaces/rest/routes/audit.js +3 -3
  64. package/dist/interfaces/rest/routes/carts.d.ts.map +1 -1
  65. package/dist/interfaces/rest/routes/carts.js +13 -10
  66. package/dist/interfaces/rest/routes/catalog.d.ts.map +1 -1
  67. package/dist/interfaces/rest/routes/catalog.js +47 -4
  68. package/dist/interfaces/rest/routes/checkout.d.ts.map +1 -1
  69. package/dist/interfaces/rest/routes/checkout.js +30 -35
  70. package/dist/interfaces/rest/routes/documents.d.ts.map +1 -1
  71. package/dist/interfaces/rest/routes/documents.js +10 -5
  72. package/dist/interfaces/rest/routes/inventory.d.ts.map +1 -1
  73. package/dist/interfaces/rest/routes/inventory.js +2 -0
  74. package/dist/interfaces/rest/routes/media.d.ts.map +1 -1
  75. package/dist/interfaces/rest/routes/media.js +7 -3
  76. package/dist/interfaces/rest/routes/orders.d.ts.map +1 -1
  77. package/dist/interfaces/rest/routes/orders.js +26 -8
  78. package/dist/interfaces/rest/routes/pricing.js +2 -2
  79. package/dist/interfaces/rest/routes/promotions.d.ts.map +1 -1
  80. package/dist/interfaces/rest/routes/promotions.js +13 -10
  81. package/dist/interfaces/rest/routes/search.d.ts.map +1 -1
  82. package/dist/interfaces/rest/routes/search.js +14 -1
  83. package/dist/interfaces/rest/schemas/admin-custom-field-proposals.d.ts +134 -0
  84. package/dist/interfaces/rest/schemas/admin-custom-field-proposals.d.ts.map +1 -0
  85. package/dist/interfaces/rest/schemas/admin-custom-field-proposals.js +26 -0
  86. package/dist/interfaces/rest/schemas/admin-entity-field-definitions.d.ts +592 -0
  87. package/dist/interfaces/rest/schemas/admin-entity-field-definitions.d.ts.map +1 -0
  88. package/dist/interfaces/rest/schemas/admin-entity-field-definitions.js +109 -0
  89. package/dist/interfaces/rest/schemas/carts.d.ts +7 -0
  90. package/dist/interfaces/rest/schemas/carts.d.ts.map +1 -1
  91. package/dist/interfaces/rest/schemas/catalog.d.ts +1364 -401
  92. package/dist/interfaces/rest/schemas/catalog.d.ts.map +1 -1
  93. package/dist/interfaces/rest/schemas/catalog.js +86 -0
  94. package/dist/interfaces/rest/schemas/customer-portal.d.ts +35 -0
  95. package/dist/interfaces/rest/schemas/customer-portal.d.ts.map +1 -1
  96. package/dist/interfaces/rest/schemas/orders.d.ts +204 -0
  97. package/dist/interfaces/rest/schemas/orders.d.ts.map +1 -1
  98. package/dist/interfaces/rest/schemas/pricing.d.ts +1 -0
  99. package/dist/interfaces/rest/schemas/pricing.d.ts.map +1 -1
  100. package/dist/interfaces/rest/schemas/responses.d.ts +71 -0
  101. package/dist/interfaces/rest/schemas/responses.d.ts.map +1 -1
  102. package/dist/interfaces/rest/schemas/search.d.ts +1 -0
  103. package/dist/interfaces/rest/schemas/search.d.ts.map +1 -1
  104. package/dist/interfaces/rest/schemas/search.js +1 -0
  105. package/dist/interfaces/rest/utils.d.ts +15 -0
  106. package/dist/interfaces/rest/utils.d.ts.map +1 -1
  107. package/dist/interfaces/rest/utils.js +45 -2
  108. package/dist/kernel/compensation/executor.js +2 -2
  109. package/dist/kernel/database/tx-context.d.ts +8 -0
  110. package/dist/kernel/database/tx-context.d.ts.map +1 -1
  111. package/dist/kernel/database/tx-context.js +13 -0
  112. package/dist/kernel/hooks/create-context.d.ts +2 -0
  113. package/dist/kernel/hooks/create-context.d.ts.map +1 -1
  114. package/dist/kernel/hooks/create-context.js +1 -0
  115. package/dist/kernel/hooks/types.d.ts +2 -0
  116. package/dist/kernel/hooks/types.d.ts.map +1 -1
  117. package/dist/kernel/plugin/manifest.d.ts.map +1 -1
  118. package/dist/kernel/plugin/manifest.js +9 -5
  119. package/dist/modules/analytics/service.js +2 -2
  120. package/dist/modules/audit/service.js +3 -3
  121. package/dist/modules/cart/repository/index.d.ts +13 -7
  122. package/dist/modules/cart/repository/index.d.ts.map +1 -1
  123. package/dist/modules/cart/repository/index.js +16 -10
  124. package/dist/modules/cart/schema.d.ts +17 -0
  125. package/dist/modules/cart/schema.d.ts.map +1 -1
  126. package/dist/modules/cart/schema.js +4 -0
  127. package/dist/modules/cart/service.d.ts +22 -9
  128. package/dist/modules/cart/service.d.ts.map +1 -1
  129. package/dist/modules/cart/service.js +57 -33
  130. package/dist/modules/catalog/brand-service.js +7 -7
  131. package/dist/modules/catalog/category-service.js +7 -7
  132. package/dist/modules/catalog/entity-service.d.ts +19 -10
  133. package/dist/modules/catalog/entity-service.d.ts.map +1 -1
  134. package/dist/modules/catalog/entity-service.js +180 -51
  135. package/dist/modules/catalog/module.d.ts +6 -1
  136. package/dist/modules/catalog/module.d.ts.map +1 -1
  137. package/dist/modules/catalog/module.js +6 -1
  138. package/dist/modules/catalog/ownership.d.ts +5 -0
  139. package/dist/modules/catalog/ownership.d.ts.map +1 -0
  140. package/dist/modules/catalog/ownership.js +11 -0
  141. package/dist/modules/catalog/read-policy.d.ts +9 -0
  142. package/dist/modules/catalog/read-policy.d.ts.map +1 -0
  143. package/dist/modules/catalog/read-policy.js +8 -0
  144. package/dist/modules/catalog/repository/index.d.ts +55 -3
  145. package/dist/modules/catalog/repository/index.d.ts.map +1 -1
  146. package/dist/modules/catalog/repository/index.js +335 -6
  147. package/dist/modules/catalog/revision.d.ts +4 -0
  148. package/dist/modules/catalog/revision.d.ts.map +1 -0
  149. package/dist/modules/catalog/revision.js +33 -0
  150. package/dist/modules/catalog/schema.d.ts +979 -110
  151. package/dist/modules/catalog/schema.d.ts.map +1 -1
  152. package/dist/modules/catalog/schema.js +112 -2
  153. package/dist/modules/catalog/schemas.d.ts +2 -0
  154. package/dist/modules/catalog/schemas.d.ts.map +1 -1
  155. package/dist/modules/catalog/schemas.js +2 -0
  156. package/dist/modules/catalog/service.d.ts +80 -15
  157. package/dist/modules/catalog/service.d.ts.map +1 -1
  158. package/dist/modules/catalog/service.js +522 -14
  159. package/dist/modules/channels/adapter.d.ts +85 -0
  160. package/dist/modules/channels/adapter.d.ts.map +1 -1
  161. package/dist/modules/channels/adapter.js +9 -1
  162. package/dist/modules/customers/module.d.ts.map +1 -1
  163. package/dist/modules/customers/module.js +1 -0
  164. package/dist/modules/customers/service.d.ts +2 -0
  165. package/dist/modules/customers/service.d.ts.map +1 -1
  166. package/dist/modules/customers/service.js +21 -20
  167. package/dist/modules/documents/module.d.ts.map +1 -1
  168. package/dist/modules/documents/module.js +1 -0
  169. package/dist/modules/documents/service.d.ts +18 -4
  170. package/dist/modules/documents/service.d.ts.map +1 -1
  171. package/dist/modules/documents/service.js +54 -16
  172. package/dist/modules/fulfillment/module.d.ts.map +1 -1
  173. package/dist/modules/fulfillment/module.js +1 -0
  174. package/dist/modules/fulfillment/service.d.ts +2 -0
  175. package/dist/modules/fulfillment/service.d.ts.map +1 -1
  176. package/dist/modules/fulfillment/service.js +15 -6
  177. package/dist/modules/inventory/service.d.ts.map +1 -1
  178. package/dist/modules/inventory/service.js +15 -14
  179. package/dist/modules/media/module.d.ts +68 -0
  180. package/dist/modules/media/module.d.ts.map +1 -1
  181. package/dist/modules/media/module.js +2 -0
  182. package/dist/modules/media/schema.d.ts +70 -0
  183. package/dist/modules/media/schema.d.ts.map +1 -1
  184. package/dist/modules/media/schema.js +20 -2
  185. package/dist/modules/media/service.d.ts +8 -1
  186. package/dist/modules/media/service.d.ts.map +1 -1
  187. package/dist/modules/media/service.js +71 -23
  188. package/dist/modules/orders/guest-access.d.ts +27 -0
  189. package/dist/modules/orders/guest-access.d.ts.map +1 -0
  190. package/dist/modules/orders/guest-access.js +46 -0
  191. package/dist/modules/orders/module.d.ts.map +1 -1
  192. package/dist/modules/orders/module.js +1 -0
  193. package/dist/modules/orders/quote.d.ts.map +1 -1
  194. package/dist/modules/orders/quote.js +1 -0
  195. package/dist/modules/orders/repository/index.d.ts +1 -1
  196. package/dist/modules/orders/repository/index.d.ts.map +1 -1
  197. package/dist/modules/orders/repository/index.js +2 -2
  198. package/dist/modules/orders/schema.d.ts +17 -0
  199. package/dist/modules/orders/schema.d.ts.map +1 -1
  200. package/dist/modules/orders/schema.js +5 -3
  201. package/dist/modules/orders/service.d.ts +16 -7
  202. package/dist/modules/orders/service.d.ts.map +1 -1
  203. package/dist/modules/orders/service.js +184 -55
  204. package/dist/modules/pricing/module.d.ts.map +1 -1
  205. package/dist/modules/pricing/module.js +1 -0
  206. package/dist/modules/pricing/schema.d.ts +17 -0
  207. package/dist/modules/pricing/schema.d.ts.map +1 -1
  208. package/dist/modules/pricing/schema.js +1 -0
  209. package/dist/modules/pricing/schemas.d.ts +1 -0
  210. package/dist/modules/pricing/schemas.d.ts.map +1 -1
  211. package/dist/modules/pricing/schemas.js +1 -0
  212. package/dist/modules/pricing/service.d.ts +2 -0
  213. package/dist/modules/pricing/service.d.ts.map +1 -1
  214. package/dist/modules/pricing/service.js +18 -12
  215. package/dist/modules/promotions/module.d.ts.map +1 -1
  216. package/dist/modules/promotions/module.js +1 -0
  217. package/dist/modules/promotions/service.d.ts +3 -0
  218. package/dist/modules/promotions/service.d.ts.map +1 -1
  219. package/dist/modules/promotions/service.js +19 -11
  220. package/dist/modules/search/adapter.d.ts +8 -0
  221. package/dist/modules/search/adapter.d.ts.map +1 -1
  222. package/dist/modules/search/module.d.ts.map +1 -1
  223. package/dist/modules/search/module.js +3 -0
  224. package/dist/modules/search/service.d.ts +5 -0
  225. package/dist/modules/search/service.d.ts.map +1 -1
  226. package/dist/modules/search/service.js +131 -11
  227. package/dist/modules/settings/module.d.ts.map +1 -1
  228. package/dist/modules/settings/module.js +1 -0
  229. package/dist/modules/settings/service.d.ts +3 -0
  230. package/dist/modules/settings/service.d.ts.map +1 -1
  231. package/dist/modules/settings/service.js +6 -4
  232. package/dist/modules/shipping/service.js +9 -9
  233. package/dist/modules/tax/module.d.ts.map +1 -1
  234. package/dist/modules/tax/module.js +1 -0
  235. package/dist/modules/tax/service.d.ts +3 -0
  236. package/dist/modules/tax/service.d.ts.map +1 -1
  237. package/dist/modules/tax/service.js +11 -9
  238. package/dist/modules/webhooks/hook.js +2 -2
  239. package/dist/modules/webhooks/module.d.ts.map +1 -1
  240. package/dist/modules/webhooks/module.js +1 -0
  241. package/dist/modules/webhooks/service.d.ts +2 -0
  242. package/dist/modules/webhooks/service.d.ts.map +1 -1
  243. package/dist/modules/webhooks/service.js +4 -4
  244. package/dist/runtime/kernel-modules.d.ts +73 -0
  245. package/dist/runtime/kernel-modules.d.ts.map +1 -1
  246. package/dist/runtime/server.d.ts.map +1 -1
  247. package/dist/runtime/server.js +10 -2
  248. package/dist/test-utils/create-pglite-adapter.d.ts.map +1 -1
  249. package/dist/test-utils/create-pglite-adapter.js +35 -13
  250. package/dist/test-utils/create-test-config.d.ts.map +1 -1
  251. package/dist/test-utils/create-test-config.js +4 -0
  252. package/dist/test-utils/rest-api-test-utils.d.ts.map +1 -1
  253. package/dist/test-utils/rest-api-test-utils.js +2 -0
  254. package/dist/test-utils/test-actors.js +2 -2
  255. package/dist/utils/id.d.ts +2 -0
  256. package/dist/utils/id.d.ts.map +1 -1
  257. package/dist/utils/id.js +11 -0
  258. package/package.json +6 -5
  259. package/src/auth/auth-schema-guard.ts +143 -0
  260. package/src/auth/auth-schema.ts +50 -19
  261. package/src/auth/middleware.ts +17 -5
  262. package/src/auth/org.ts +15 -3
  263. package/src/auth/organization-guard.ts +158 -0
  264. package/src/auth/permissions.ts +31 -8
  265. package/src/auth/role-authority.ts +107 -0
  266. package/src/auth/setup.ts +17 -0
  267. package/src/auth/strict-org-resolution.ts +7 -1
  268. package/src/auth/types.ts +1 -1
  269. package/src/config/defaults.ts +2 -0
  270. package/src/config/types.ts +32 -4
  271. package/src/hooks/checkout.ts +19 -12
  272. package/src/index.ts +30 -6
  273. package/src/interfaces/rest/audit-middleware.ts +2 -0
  274. package/src/interfaces/rest/customer-portal.ts +31 -24
  275. package/src/interfaces/rest/index.ts +4 -0
  276. package/src/interfaces/rest/route-coverage.ts +103 -0
  277. package/src/interfaces/rest/router.ts +16 -10
  278. package/src/interfaces/rest/routes/admin/compensation-failures.ts +8 -5
  279. package/src/interfaces/rest/routes/admin/custom-field-proposals.ts +37 -0
  280. package/src/interfaces/rest/routes/admin/entity-field-definitions.ts +89 -0
  281. package/src/interfaces/rest/routes/admin/permissions.ts +3 -1
  282. package/src/interfaces/rest/routes/admin/staff.ts +161 -72
  283. package/src/interfaces/rest/routes/admin-jobs.ts +3 -3
  284. package/src/interfaces/rest/routes/audit.ts +3 -3
  285. package/src/interfaces/rest/routes/carts.ts +17 -7
  286. package/src/interfaces/rest/routes/catalog.ts +96 -0
  287. package/src/interfaces/rest/routes/checkout.ts +41 -38
  288. package/src/interfaces/rest/routes/documents.ts +15 -1
  289. package/src/interfaces/rest/routes/inventory.ts +2 -0
  290. package/src/interfaces/rest/routes/media.ts +8 -3
  291. package/src/interfaces/rest/routes/orders.ts +27 -8
  292. package/src/interfaces/rest/routes/pricing.ts +2 -2
  293. package/src/interfaces/rest/routes/promotions.ts +12 -9
  294. package/src/interfaces/rest/routes/search.ts +19 -1
  295. package/src/interfaces/rest/schemas/admin-custom-field-proposals.ts +29 -0
  296. package/src/interfaces/rest/schemas/admin-entity-field-definitions.ts +120 -0
  297. package/src/interfaces/rest/schemas/catalog.ts +92 -0
  298. package/src/interfaces/rest/schemas/search.ts +2 -0
  299. package/src/interfaces/rest/utils.ts +61 -2
  300. package/src/kernel/compensation/executor.ts +2 -2
  301. package/src/kernel/database/tx-context.ts +25 -0
  302. package/src/kernel/hooks/create-context.ts +3 -0
  303. package/src/kernel/hooks/types.ts +2 -0
  304. package/src/kernel/plugin/manifest.ts +9 -5
  305. package/src/modules/analytics/service.ts +2 -2
  306. package/src/modules/audit/service.ts +3 -3
  307. package/src/modules/cart/repository/index.ts +22 -8
  308. package/src/modules/cart/schema.ts +4 -0
  309. package/src/modules/cart/service.ts +62 -27
  310. package/src/modules/catalog/brand-service.ts +7 -7
  311. package/src/modules/catalog/category-service.ts +7 -7
  312. package/src/modules/catalog/entity-service.ts +188 -53
  313. package/src/modules/catalog/module.ts +15 -0
  314. package/src/modules/catalog/ownership.ts +17 -0
  315. package/src/modules/catalog/read-policy.ts +16 -0
  316. package/src/modules/catalog/repository/index.ts +566 -4
  317. package/src/modules/catalog/revision.ts +35 -0
  318. package/src/modules/catalog/schema.ts +169 -1
  319. package/src/modules/catalog/schemas.ts +2 -0
  320. package/src/modules/catalog/service.ts +766 -26
  321. package/src/modules/channels/adapter.ts +107 -1
  322. package/src/modules/customers/module.ts +2 -0
  323. package/src/modules/customers/service.ts +23 -22
  324. package/src/modules/documents/module.ts +2 -0
  325. package/src/modules/documents/service.ts +74 -11
  326. package/src/modules/fulfillment/module.ts +2 -0
  327. package/src/modules/fulfillment/service.ts +17 -6
  328. package/src/modules/inventory/service.ts +15 -24
  329. package/src/modules/media/module.ts +2 -0
  330. package/src/modules/media/schema.ts +23 -2
  331. package/src/modules/media/service.ts +89 -28
  332. package/src/modules/orders/guest-access.ts +55 -0
  333. package/src/modules/orders/module.ts +1 -0
  334. package/src/modules/orders/quote.ts +1 -0
  335. package/src/modules/orders/repository/index.ts +2 -0
  336. package/src/modules/orders/schema.ts +5 -3
  337. package/src/modules/orders/service.ts +302 -52
  338. package/src/modules/pricing/module.ts +2 -0
  339. package/src/modules/pricing/schema.ts +1 -0
  340. package/src/modules/pricing/schemas.ts +1 -0
  341. package/src/modules/pricing/service.ts +21 -18
  342. package/src/modules/promotions/module.ts +2 -0
  343. package/src/modules/promotions/service.ts +25 -16
  344. package/src/modules/search/adapter.ts +8 -0
  345. package/src/modules/search/module.ts +3 -0
  346. package/src/modules/search/service.ts +142 -12
  347. package/src/modules/settings/module.ts +2 -0
  348. package/src/modules/settings/service.ts +8 -4
  349. package/src/modules/shipping/service.ts +9 -9
  350. package/src/modules/tax/module.ts +1 -0
  351. package/src/modules/tax/service.ts +13 -9
  352. package/src/modules/webhooks/hook.ts +2 -2
  353. package/src/modules/webhooks/module.ts +2 -0
  354. package/src/modules/webhooks/service.ts +6 -4
  355. package/src/runtime/server.ts +16 -2
  356. package/src/test-utils/create-pglite-adapter.ts +34 -12
  357. package/src/test-utils/create-test-config.ts +10 -6
  358. package/src/test-utils/rest-api-test-utils.ts +2 -0
  359. package/src/test-utils/test-actors.ts +2 -2
  360. package/src/utils/id.ts +20 -0
@@ -1,12 +1,15 @@
1
1
  import type { TxContext } from "../../../kernel/database/tx-context.js";
2
2
  import type { DrizzleDatabase } from "../../../kernel/database/drizzle-db.js";
3
- import { sellableEntities, sellableAttributes, sellableCustomFields, categories, entityCategories, brands, entityBrands, optionTypes, optionValues, variants, variantOptionValues } from "../schema.js";
3
+ import { sellableEntities, sellableAttributes, sellableCustomFields, entityFieldDefinitions, categories, entityCategories, brands, entityBrands, entityTags, optionTypes, optionValues, variants, variantOptionValues, sellableEntityRevisions, catalogFieldOwnership, type SellableEntityRevisionSnapshot } from "../schema.js";
4
+ import { entityMedia } from "../../media/schema.js";
4
5
  export type SellableEntity = typeof sellableEntities.$inferSelect;
5
6
  export type SellableEntityInsert = typeof sellableEntities.$inferInsert;
6
7
  export type SellableAttribute = typeof sellableAttributes.$inferSelect;
7
8
  export type SellableAttributeInsert = typeof sellableAttributes.$inferInsert;
8
9
  export type SellableCustomField = typeof sellableCustomFields.$inferSelect;
9
10
  export type SellableCustomFieldInsert = typeof sellableCustomFields.$inferInsert;
11
+ export type EntityFieldDefinitionRecord = typeof entityFieldDefinitions.$inferSelect;
12
+ export type EntityFieldDefinitionInsert = typeof entityFieldDefinitions.$inferInsert;
10
13
  export type Category = typeof categories.$inferSelect;
11
14
  export type CategoryInsert = typeof categories.$inferInsert;
12
15
  export type EntityCategory = typeof entityCategories.$inferSelect;
@@ -23,6 +26,14 @@ export type Variant = typeof variants.$inferSelect;
23
26
  export type VariantInsert = typeof variants.$inferInsert;
24
27
  export type VariantOptionValue = typeof variantOptionValues.$inferSelect;
25
28
  export type VariantOptionValueInsert = typeof variantOptionValues.$inferInsert;
29
+ export type SellableEntityRevision = typeof sellableEntityRevisions.$inferSelect;
30
+ export type SellableEntityRevisionInsert = typeof sellableEntityRevisions.$inferInsert;
31
+ export type CatalogFieldOwnership = typeof catalogFieldOwnership.$inferSelect;
32
+ export type CatalogFieldOwnershipInsert = typeof catalogFieldOwnership.$inferInsert;
33
+ export type ProposedCustomField = SellableCustomField & {
34
+ entitySlug: string;
35
+ entityType: string;
36
+ };
26
37
  /**
27
38
  * CatalogRepository provides type-safe database operations for catalog entities.
28
39
  *
@@ -45,11 +56,27 @@ export declare class CatalogRepository {
45
56
  findEntities(orgId: string, filter?: {
46
57
  type?: string;
47
58
  status?: string;
59
+ isVisible?: boolean;
48
60
  ids?: string[];
49
61
  }, ctx?: TxContext): Promise<SellableEntity[]>;
50
62
  createEntity(data: SellableEntityInsert, ctx?: TxContext): Promise<SellableEntity>;
51
63
  updateEntity(id: string, data: Partial<Omit<SellableEntityInsert, "id">>, ctx?: TxContext): Promise<SellableEntity | undefined>;
52
64
  deleteEntity(id: string, ctx?: TxContext): Promise<boolean>;
65
+ findFieldOwnership(entityId: string, ctx?: TxContext, storeId?: string): Promise<CatalogFieldOwnership[]>;
66
+ findFieldOwnershipForResolution(entityId: string, storeId: string, variantId: string | null, ctx?: TxContext): Promise<CatalogFieldOwnership[]>;
67
+ upsertFieldOwnership(data: CatalogFieldOwnershipInsert, ctx?: TxContext): Promise<CatalogFieldOwnership>;
68
+ seedFieldOwnership(data: CatalogFieldOwnershipInsert[], ctx?: TxContext): Promise<void>;
69
+ findRevisionsByEntityId(entityId: string, ctx?: TxContext): Promise<SellableEntityRevision[]>;
70
+ findRevisionMarkers(entityId: string, since?: Date, ctx?: TxContext): Promise<Array<Pick<SellableEntityRevision, "createdAt" | "reason">>>;
71
+ findLatestRevision(entityId: string, ctx?: TxContext): Promise<SellableEntityRevision | undefined>;
72
+ findRevisionById(entityId: string, id: string, ctx?: TxContext): Promise<SellableEntityRevision | undefined>;
73
+ createRevision(data: Omit<SellableEntityRevisionInsert, "id" | "revision" | "pinned">, ctx?: TxContext): Promise<SellableEntityRevision>;
74
+ updateRevision(id: string, data: Partial<Pick<SellableEntityRevisionInsert, "createdAt" | "pinned">>, ctx?: TxContext): Promise<SellableEntityRevision | undefined>;
75
+ deleteRevisionsOlderThan(organizationId: string, cutoff: Date, ctx?: TxContext): Promise<number>;
76
+ snapshotEntity(entityId: string, ctx?: TxContext): Promise<SellableEntityRevisionSnapshot>;
77
+ findEntityMedia(entityId: string, ctx?: TxContext): Promise<Array<typeof entityMedia.$inferSelect>>;
78
+ deleteEntityMediaByEntityId(entityId: string, ctx?: TxContext): Promise<void>;
79
+ createEntityMedia(data: typeof entityMedia.$inferInsert, ctx?: TxContext): Promise<typeof entityMedia.$inferSelect>;
53
80
  findAttributesByEntityId(entityId: string, ctx?: TxContext): Promise<SellableAttribute[]>;
54
81
  findAttributeByLocale(entityId: string, locale: string, ctx?: TxContext): Promise<SellableAttribute | undefined>;
55
82
  createAttribute(data: SellableAttributeInsert, ctx?: TxContext): Promise<SellableAttribute>;
@@ -57,9 +84,31 @@ export declare class CatalogRepository {
57
84
  upsertAttribute(entityId: string, locale: string, data: Omit<SellableAttributeInsert, "entityId" | "locale">, ctx?: TxContext): Promise<SellableAttribute>;
58
85
  deleteAttributesByEntityId(entityId: string, ctx?: TxContext): Promise<void>;
59
86
  findCustomFieldsByEntityId(entityId: string, ctx?: TxContext): Promise<SellableCustomField[]>;
87
+ findAllCustomFieldsByEntityId(entityId: string, ctx?: TxContext): Promise<SellableCustomField[]>;
88
+ findProposedCustomField(entityId: string, fieldName: string, locale?: string, ctx?: TxContext): Promise<SellableCustomField | undefined>;
89
+ updateProposedCustomField(id: string, data: Partial<Omit<SellableCustomFieldInsert, "id">>, ctx?: TxContext): Promise<SellableCustomField | undefined>;
90
+ rejectOtherProposedCustomFields(entityId: string, fieldName: string, locale: string, excludeId: string, ctx?: TxContext): Promise<number>;
91
+ listProposedCustomFields(organizationId: string, pagination: {
92
+ page: number;
93
+ limit: number;
94
+ }, filter?: {
95
+ entityType?: string;
96
+ }, ctx?: TxContext): Promise<{
97
+ items: ProposedCustomField[];
98
+ total: number;
99
+ }>;
100
+ findCustomFieldByName(entityId: string, fieldName: string, locale?: string, ctx?: TxContext): Promise<SellableCustomField | undefined>;
60
101
  createCustomField(data: SellableCustomFieldInsert, ctx?: TxContext): Promise<SellableCustomField>;
102
+ updateCustomField(id: string, data: Partial<Omit<SellableCustomFieldInsert, "id">>, ctx?: TxContext): Promise<SellableCustomField | undefined>;
103
+ upsertCustomField(entityId: string, fieldName: string, locale: string, data: Omit<SellableCustomFieldInsert, "entityId" | "fieldName">, ctx?: TxContext): Promise<SellableCustomField>;
104
+ deleteCustomField(entityId: string, fieldName: string, locale?: string, ctx?: TxContext): Promise<void>;
61
105
  deleteCustomFieldsByEntityId(entityId: string, ctx?: TxContext): Promise<void>;
62
- findCategoryById(id: string, ctx?: TxContext): Promise<Category | undefined>;
106
+ findEntityFieldDefinitions(organizationId: string, entityType?: string, ctx?: TxContext): Promise<EntityFieldDefinitionRecord[]>;
107
+ findActiveEntityFieldDefinitions(organizationId: string, entityType: string, ctx?: TxContext): Promise<EntityFieldDefinitionRecord[]>;
108
+ findEntityFieldDefinitionById(organizationId: string, id: string, ctx?: TxContext): Promise<EntityFieldDefinitionRecord | undefined>;
109
+ createEntityFieldDefinition(data: EntityFieldDefinitionInsert, ctx?: TxContext): Promise<EntityFieldDefinitionRecord>;
110
+ updateEntityFieldDefinition(organizationId: string, id: string, data: Partial<Omit<EntityFieldDefinitionInsert, "id" | "organizationId">>, ctx?: TxContext): Promise<EntityFieldDefinitionRecord | undefined>;
111
+ findCategoryById(id: string, ctx?: TxContext, orgId?: string): Promise<Category | undefined>;
63
112
  findCategoryBySlug(orgId: string, slug: string, ctx?: TxContext): Promise<Category | undefined>;
64
113
  findAllCategories(orgId: string, ctx?: TxContext): Promise<Category[]>;
65
114
  createCategory(data: CategoryInsert, ctx?: TxContext): Promise<Category>;
@@ -71,13 +120,16 @@ export declare class CatalogRepository {
71
120
  removeEntityFromCategory(entityId: string, categoryId: string, ctx?: TxContext): Promise<boolean>;
72
121
  deleteEntityCategoriesByEntityId(entityId: string, ctx?: TxContext): Promise<void>;
73
122
  deleteEntityCategoriesByCategoryId(categoryId: string, ctx?: TxContext): Promise<void>;
74
- findBrandById(id: string, ctx?: TxContext): Promise<Brand | undefined>;
123
+ findBrandById(id: string, ctx?: TxContext, orgId?: string): Promise<Brand | undefined>;
75
124
  findBrandBySlug(orgId: string, slug: string, ctx?: TxContext): Promise<Brand | undefined>;
76
125
  findAllBrands(orgId: string, ctx?: TxContext): Promise<Brand[]>;
77
126
  createBrand(data: BrandInsert, ctx?: TxContext): Promise<Brand>;
78
127
  updateBrand(id: string, data: Partial<Omit<BrandInsert, "id">>, ctx?: TxContext): Promise<Brand | undefined>;
79
128
  deleteBrand(id: string, ctx?: TxContext): Promise<boolean>;
80
129
  findEntityBrands(entityId: string, ctx?: TxContext): Promise<EntityBrand[]>;
130
+ findEntityTags(entityId: string, ctx?: TxContext): Promise<Array<typeof entityTags.$inferSelect>>;
131
+ addEntityTag(entityId: string, tagId: string, ctx?: TxContext): Promise<void>;
132
+ deleteEntityTagsByEntityId(entityId: string, ctx?: TxContext): Promise<void>;
81
133
  addEntityToBrand(entityId: string, brandId: string, sortOrder?: number, ctx?: TxContext): Promise<void>;
82
134
  removeEntityFromBrand(entityId: string, brandId: string, ctx?: TxContext): Promise<boolean>;
83
135
  deleteEntityBrandsByEntityId(entityId: string, ctx?: TxContext): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/catalog/repository/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/catalog/repository/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- import { eq, and, inArray } from "drizzle-orm";
1
+ import { eq, and, asc, count, desc, gt, inArray, isNull, lt, max, ne, or } from "drizzle-orm";
2
2
  import { CommerceNotFoundError } from "../../../kernel/errors.js";
3
- import { sellableEntities, sellableAttributes, sellableCustomFields, categories, entityCategories, brands, entityBrands, optionTypes, optionValues, variants, variantOptionValues, } from "../schema.js";
3
+ import { sellableEntities, sellableAttributes, sellableCustomFields, entityFieldDefinitions, categories, entityCategories, brands, entityBrands, entityTags, optionTypes, optionValues, variants, variantOptionValues, sellableEntityRevisions, catalogFieldOwnership, } from "../schema.js";
4
+ import { entityMedia } from "../../media/schema.js";
4
5
  /**
5
6
  * CatalogRepository provides type-safe database operations for catalog entities.
6
7
  *
@@ -54,6 +55,9 @@ export class CatalogRepository {
54
55
  if (filter?.status) {
55
56
  conditions.push(eq(sellableEntities.status, filter.status));
56
57
  }
58
+ if (filter?.isVisible !== undefined) {
59
+ conditions.push(eq(sellableEntities.isVisible, filter.isVisible));
60
+ }
57
61
  if (filter?.ids && filter.ids.length > 0) {
58
62
  conditions.push(inArray(sellableEntities.id, filter.ids));
59
63
  }
@@ -84,6 +88,163 @@ export class CatalogRepository {
84
88
  .returning();
85
89
  return result.length > 0;
86
90
  }
91
+ async findFieldOwnership(entityId, ctx, storeId) {
92
+ const db = this.getDb(ctx);
93
+ const conditions = [eq(catalogFieldOwnership.entityId, entityId)];
94
+ if (storeId !== undefined) {
95
+ conditions.push(or(isNull(catalogFieldOwnership.storeId), eq(catalogFieldOwnership.storeId, storeId)));
96
+ }
97
+ return db
98
+ .select()
99
+ .from(catalogFieldOwnership)
100
+ .where(and(...conditions))
101
+ .orderBy(asc(catalogFieldOwnership.fieldPath), asc(catalogFieldOwnership.updatedAt));
102
+ }
103
+ async findFieldOwnershipForResolution(entityId, storeId, variantId, ctx) {
104
+ const db = this.getDb(ctx);
105
+ return db
106
+ .select()
107
+ .from(catalogFieldOwnership)
108
+ .where(and(eq(catalogFieldOwnership.entityId, entityId), or(isNull(catalogFieldOwnership.storeId), eq(catalogFieldOwnership.storeId, storeId)), variantId == null
109
+ ? isNull(catalogFieldOwnership.variantId)
110
+ : or(isNull(catalogFieldOwnership.variantId), eq(catalogFieldOwnership.variantId, variantId))));
111
+ }
112
+ async upsertFieldOwnership(data, ctx) {
113
+ const db = this.getDb(ctx);
114
+ const rows = await db
115
+ .insert(catalogFieldOwnership)
116
+ .values(data)
117
+ .onConflictDoUpdate({
118
+ target: [
119
+ catalogFieldOwnership.organizationId,
120
+ catalogFieldOwnership.entityId,
121
+ catalogFieldOwnership.variantId,
122
+ catalogFieldOwnership.storeId,
123
+ catalogFieldOwnership.fieldPath,
124
+ ],
125
+ set: {
126
+ owner: data.owner,
127
+ updatedAt: data.updatedAt ?? new Date(),
128
+ },
129
+ })
130
+ .returning();
131
+ return rows[0];
132
+ }
133
+ async seedFieldOwnership(data, ctx) {
134
+ if (data.length === 0)
135
+ return;
136
+ const db = this.getDb(ctx);
137
+ await db.insert(catalogFieldOwnership).values(data).onConflictDoNothing();
138
+ }
139
+ async findRevisionsByEntityId(entityId, ctx) {
140
+ const db = this.getDb(ctx);
141
+ return db
142
+ .select()
143
+ .from(sellableEntityRevisions)
144
+ .where(eq(sellableEntityRevisions.entityId, entityId))
145
+ .orderBy(asc(sellableEntityRevisions.revision));
146
+ }
147
+ async findRevisionMarkers(entityId, since, ctx) {
148
+ const db = this.getDb(ctx);
149
+ return db
150
+ .select({
151
+ createdAt: sellableEntityRevisions.createdAt,
152
+ reason: sellableEntityRevisions.reason,
153
+ })
154
+ .from(sellableEntityRevisions)
155
+ .where(and(eq(sellableEntityRevisions.entityId, entityId), ...(since ? [gt(sellableEntityRevisions.createdAt, since)] : [])))
156
+ .orderBy(asc(sellableEntityRevisions.createdAt));
157
+ }
158
+ async findLatestRevision(entityId, ctx) {
159
+ const db = this.getDb(ctx);
160
+ const rows = await db
161
+ .select()
162
+ .from(sellableEntityRevisions)
163
+ .where(eq(sellableEntityRevisions.entityId, entityId))
164
+ .orderBy(desc(sellableEntityRevisions.revision))
165
+ .limit(1);
166
+ return rows[0];
167
+ }
168
+ async findRevisionById(entityId, id, ctx) {
169
+ const db = this.getDb(ctx);
170
+ const rows = await db
171
+ .select()
172
+ .from(sellableEntityRevisions)
173
+ .where(and(eq(sellableEntityRevisions.entityId, entityId), eq(sellableEntityRevisions.id, id)));
174
+ return rows[0];
175
+ }
176
+ async createRevision(data, ctx) {
177
+ const db = this.getDb(ctx);
178
+ const rows = await db
179
+ .select({ revision: max(sellableEntityRevisions.revision) })
180
+ .from(sellableEntityRevisions)
181
+ .where(eq(sellableEntityRevisions.entityId, data.entityId));
182
+ const revision = (rows[0]?.revision ?? 0) + 1;
183
+ const inserted = await db
184
+ .insert(sellableEntityRevisions)
185
+ .values({
186
+ ...data,
187
+ revision,
188
+ pinned: revision === 1,
189
+ })
190
+ .returning();
191
+ return inserted[0];
192
+ }
193
+ async updateRevision(id, data, ctx) {
194
+ const db = this.getDb(ctx);
195
+ const rows = await db
196
+ .update(sellableEntityRevisions)
197
+ .set(data)
198
+ .where(eq(sellableEntityRevisions.id, id))
199
+ .returning();
200
+ return rows[0];
201
+ }
202
+ async deleteRevisionsOlderThan(organizationId, cutoff, ctx) {
203
+ const db = this.getDb(ctx);
204
+ const deleted = await db
205
+ .delete(sellableEntityRevisions)
206
+ .where(and(eq(sellableEntityRevisions.organizationId, organizationId), lt(sellableEntityRevisions.createdAt, cutoff), eq(sellableEntityRevisions.pinned, false), gt(sellableEntityRevisions.revision, 1)))
207
+ .returning({ id: sellableEntityRevisions.id });
208
+ return deleted.length;
209
+ }
210
+ async snapshotEntity(entityId, ctx) {
211
+ const entity = await this.findEntityById(entityId, ctx);
212
+ if (!entity)
213
+ throw new CommerceNotFoundError("Entity not found.");
214
+ const [attributes, customFields, categoriesForEntity, brandsForEntity, media, tagsForEntity] = await Promise.all([
215
+ this.findAttributesByEntityId(entityId, ctx),
216
+ this.findAllCustomFieldsByEntityId(entityId, ctx),
217
+ this.findEntityCategories(entityId, ctx),
218
+ this.findEntityBrands(entityId, ctx),
219
+ this.findEntityMedia(entityId, ctx),
220
+ this.findEntityTags(entityId, ctx),
221
+ ]);
222
+ return {
223
+ entity: entity,
224
+ attributes: attributes.sort((a, b) => a.locale.localeCompare(b.locale) || a.id.localeCompare(b.id)),
225
+ customFields: customFields.sort((a, b) => a.locale.localeCompare(b.locale) || a.fieldName.localeCompare(b.fieldName) || a.id.localeCompare(b.id)),
226
+ media: media.sort((a, b) => a.mediaAssetId.localeCompare(b.mediaAssetId) || (a.variantId ?? "").localeCompare(b.variantId ?? "")),
227
+ categories: categoriesForEntity.sort((a, b) => a.categoryId.localeCompare(b.categoryId)),
228
+ brands: brandsForEntity.sort((a, b) => a.brandId.localeCompare(b.brandId)),
229
+ tags: tagsForEntity.sort((a, b) => a.tagId.localeCompare(b.tagId)),
230
+ };
231
+ }
232
+ async findEntityMedia(entityId, ctx) {
233
+ const db = this.getDb(ctx);
234
+ return db
235
+ .select()
236
+ .from(entityMedia)
237
+ .where(eq(entityMedia.entityId, entityId));
238
+ }
239
+ async deleteEntityMediaByEntityId(entityId, ctx) {
240
+ const db = this.getDb(ctx);
241
+ await db.delete(entityMedia).where(eq(entityMedia.entityId, entityId));
242
+ }
243
+ async createEntityMedia(data, ctx) {
244
+ const db = this.getDb(ctx);
245
+ const rows = await db.insert(entityMedia).values(data).returning();
246
+ return rows[0];
247
+ }
87
248
  // ─────────────────────────────────────────────────────────────────────────────
88
249
  // Sellable Attributes
89
250
  // ─────────────────────────────────────────────────────────────────────────────
@@ -134,32 +295,180 @@ export class CatalogRepository {
134
295
  // Custom Fields
135
296
  // ─────────────────────────────────────────────────────────────────────────────
136
297
  async findCustomFieldsByEntityId(entityId, ctx) {
298
+ const db = this.getDb(ctx);
299
+ return db
300
+ .select()
301
+ .from(sellableCustomFields)
302
+ .where(and(eq(sellableCustomFields.entityId, entityId), eq(sellableCustomFields.status, "approved")));
303
+ }
304
+ async findAllCustomFieldsByEntityId(entityId, ctx) {
137
305
  const db = this.getDb(ctx);
138
306
  return db
139
307
  .select()
140
308
  .from(sellableCustomFields)
141
309
  .where(eq(sellableCustomFields.entityId, entityId));
142
310
  }
311
+ async findProposedCustomField(entityId, fieldName, locale = "en", ctx) {
312
+ const db = this.getDb(ctx);
313
+ const rows = await db
314
+ .select()
315
+ .from(sellableCustomFields)
316
+ .where(and(eq(sellableCustomFields.entityId, entityId), eq(sellableCustomFields.fieldName, fieldName), eq(sellableCustomFields.locale, locale), eq(sellableCustomFields.status, "proposed")))
317
+ .orderBy(desc(sellableCustomFields.createdAt), desc(sellableCustomFields.id))
318
+ .limit(1);
319
+ return rows[0];
320
+ }
321
+ async updateProposedCustomField(id, data, ctx) {
322
+ const db = this.getDb(ctx);
323
+ const rows = await db
324
+ .update(sellableCustomFields)
325
+ .set({ ...data, updatedAt: new Date() })
326
+ .where(and(eq(sellableCustomFields.id, id), eq(sellableCustomFields.status, "proposed")))
327
+ .returning();
328
+ return rows[0];
329
+ }
330
+ async rejectOtherProposedCustomFields(entityId, fieldName, locale, excludeId, ctx) {
331
+ const db = this.getDb(ctx);
332
+ const rows = await db
333
+ .update(sellableCustomFields)
334
+ .set({ status: "rejected", updatedAt: new Date() })
335
+ .where(and(eq(sellableCustomFields.entityId, entityId), eq(sellableCustomFields.fieldName, fieldName), eq(sellableCustomFields.locale, locale), eq(sellableCustomFields.status, "proposed"), ne(sellableCustomFields.id, excludeId)))
336
+ .returning({ id: sellableCustomFields.id });
337
+ return rows.length;
338
+ }
339
+ async listProposedCustomFields(organizationId, pagination, filter, ctx) {
340
+ const db = this.getDb(ctx);
341
+ const page = Math.max(1, pagination.page);
342
+ const limit = Math.max(1, pagination.limit);
343
+ const conditions = [
344
+ eq(sellableCustomFields.status, "proposed"),
345
+ eq(sellableEntities.organizationId, organizationId),
346
+ ];
347
+ if (filter?.entityType !== undefined) {
348
+ conditions.push(eq(sellableEntities.type, filter.entityType));
349
+ }
350
+ const where = and(...conditions);
351
+ const rows = await db
352
+ .select({
353
+ customField: sellableCustomFields,
354
+ entitySlug: sellableEntities.slug,
355
+ entityType: sellableEntities.type,
356
+ })
357
+ .from(sellableCustomFields)
358
+ .innerJoin(sellableEntities, eq(sellableCustomFields.entityId, sellableEntities.id))
359
+ .where(where)
360
+ .orderBy(asc(sellableCustomFields.createdAt), asc(sellableCustomFields.id))
361
+ .limit(limit)
362
+ .offset((page - 1) * limit);
363
+ const totalRows = await db
364
+ .select({ count: count() })
365
+ .from(sellableCustomFields)
366
+ .innerJoin(sellableEntities, eq(sellableCustomFields.entityId, sellableEntities.id))
367
+ .where(where);
368
+ return {
369
+ items: rows.map(({ customField, entitySlug, entityType }) => ({
370
+ ...customField,
371
+ entitySlug,
372
+ entityType,
373
+ })),
374
+ total: totalRows[0]?.count ?? 0,
375
+ };
376
+ }
377
+ async findCustomFieldByName(entityId, fieldName, locale = "en", ctx) {
378
+ const db = this.getDb(ctx);
379
+ const rows = await db
380
+ .select()
381
+ .from(sellableCustomFields)
382
+ .where(and(eq(sellableCustomFields.entityId, entityId), eq(sellableCustomFields.fieldName, fieldName), eq(sellableCustomFields.locale, locale), eq(sellableCustomFields.status, "approved")));
383
+ return rows[0];
384
+ }
143
385
  async createCustomField(data, ctx) {
144
386
  const db = this.getDb(ctx);
145
387
  const rows = await db.insert(sellableCustomFields).values(data).returning();
146
388
  return rows[0];
147
389
  }
390
+ async updateCustomField(id, data, ctx) {
391
+ const db = this.getDb(ctx);
392
+ const rows = await db
393
+ .update(sellableCustomFields)
394
+ .set({ ...data, updatedAt: new Date() })
395
+ .where(eq(sellableCustomFields.id, id))
396
+ .returning();
397
+ return rows[0];
398
+ }
399
+ async upsertCustomField(entityId, fieldName, locale, data, ctx) {
400
+ const existing = await this.findCustomFieldByName(entityId, fieldName, locale, ctx);
401
+ if (existing) {
402
+ const updated = await this.updateCustomField(existing.id, data, ctx);
403
+ return updated;
404
+ }
405
+ return this.createCustomField({ ...data, entityId, fieldName, locale }, ctx);
406
+ }
407
+ async deleteCustomField(entityId, fieldName, locale = "en", ctx) {
408
+ const db = this.getDb(ctx);
409
+ await db
410
+ .delete(sellableCustomFields)
411
+ .where(and(eq(sellableCustomFields.entityId, entityId), eq(sellableCustomFields.fieldName, fieldName), eq(sellableCustomFields.locale, locale), eq(sellableCustomFields.status, "approved")));
412
+ }
148
413
  async deleteCustomFieldsByEntityId(entityId, ctx) {
149
414
  const db = this.getDb(ctx);
150
415
  await db
151
416
  .delete(sellableCustomFields)
152
417
  .where(eq(sellableCustomFields.entityId, entityId));
153
418
  }
419
+ async findEntityFieldDefinitions(organizationId, entityType, ctx) {
420
+ const db = this.getDb(ctx);
421
+ const conditions = [eq(entityFieldDefinitions.organizationId, organizationId)];
422
+ if (entityType !== undefined) {
423
+ conditions.push(eq(entityFieldDefinitions.entityType, entityType));
424
+ }
425
+ return db
426
+ .select()
427
+ .from(entityFieldDefinitions)
428
+ .where(and(...conditions))
429
+ .orderBy(asc(entityFieldDefinitions.entityType), asc(entityFieldDefinitions.sortOrder), asc(entityFieldDefinitions.name));
430
+ }
431
+ async findActiveEntityFieldDefinitions(organizationId, entityType, ctx) {
432
+ const db = this.getDb(ctx);
433
+ return db
434
+ .select()
435
+ .from(entityFieldDefinitions)
436
+ .where(and(eq(entityFieldDefinitions.organizationId, organizationId), eq(entityFieldDefinitions.entityType, entityType), eq(entityFieldDefinitions.status, "active")))
437
+ .orderBy(asc(entityFieldDefinitions.sortOrder), asc(entityFieldDefinitions.name));
438
+ }
439
+ async findEntityFieldDefinitionById(organizationId, id, ctx) {
440
+ const db = this.getDb(ctx);
441
+ const rows = await db
442
+ .select()
443
+ .from(entityFieldDefinitions)
444
+ .where(and(eq(entityFieldDefinitions.organizationId, organizationId), eq(entityFieldDefinitions.id, id)));
445
+ return rows[0];
446
+ }
447
+ async createEntityFieldDefinition(data, ctx) {
448
+ const db = this.getDb(ctx);
449
+ const rows = await db.insert(entityFieldDefinitions).values(data).returning();
450
+ return rows[0];
451
+ }
452
+ async updateEntityFieldDefinition(organizationId, id, data, ctx) {
453
+ const db = this.getDb(ctx);
454
+ const rows = await db
455
+ .update(entityFieldDefinitions)
456
+ .set({ ...data, updatedAt: new Date() })
457
+ .where(and(eq(entityFieldDefinitions.organizationId, organizationId), eq(entityFieldDefinitions.id, id)))
458
+ .returning();
459
+ return rows[0];
460
+ }
154
461
  // ─────────────────────────────────────────────────────────────────────────────
155
462
  // Categories
156
463
  // ─────────────────────────────────────────────────────────────────────────────
157
- async findCategoryById(id, ctx) {
464
+ async findCategoryById(id, ctx, orgId) {
158
465
  const db = this.getDb(ctx);
159
466
  const rows = await db
160
467
  .select()
161
468
  .from(categories)
162
- .where(eq(categories.id, id));
469
+ .where(orgId
470
+ ? and(eq(categories.id, id), eq(categories.organizationId, orgId))
471
+ : eq(categories.id, id));
163
472
  return rows[0];
164
473
  }
165
474
  async findCategoryBySlug(orgId, slug, ctx) {
@@ -247,9 +556,14 @@ export class CatalogRepository {
247
556
  // ─────────────────────────────────────────────────────────────────────────────
248
557
  // Brands
249
558
  // ─────────────────────────────────────────────────────────────────────────────
250
- async findBrandById(id, ctx) {
559
+ async findBrandById(id, ctx, orgId) {
251
560
  const db = this.getDb(ctx);
252
- const rows = await db.select().from(brands).where(eq(brands.id, id));
561
+ const rows = await db
562
+ .select()
563
+ .from(brands)
564
+ .where(orgId
565
+ ? and(eq(brands.id, id), eq(brands.organizationId, orgId))
566
+ : eq(brands.id, id));
253
567
  return rows[0];
254
568
  }
255
569
  async findBrandBySlug(orgId, slug, ctx) {
@@ -296,6 +610,21 @@ export class CatalogRepository {
296
610
  .from(entityBrands)
297
611
  .where(eq(entityBrands.entityId, entityId));
298
612
  }
613
+ async findEntityTags(entityId, ctx) {
614
+ const db = this.getDb(ctx);
615
+ return db
616
+ .select()
617
+ .from(entityTags)
618
+ .where(eq(entityTags.entityId, entityId));
619
+ }
620
+ async addEntityTag(entityId, tagId, ctx) {
621
+ const db = this.getDb(ctx);
622
+ await db.insert(entityTags).values({ entityId, tagId }).onConflictDoNothing();
623
+ }
624
+ async deleteEntityTagsByEntityId(entityId, ctx) {
625
+ const db = this.getDb(ctx);
626
+ await db.delete(entityTags).where(eq(entityTags.entityId, entityId));
627
+ }
299
628
  async addEntityToBrand(entityId, brandId, sortOrder = 0, ctx) {
300
629
  const db = this.getDb(ctx);
301
630
  await db
@@ -0,0 +1,4 @@
1
+ import type { SellableEntityRevisionSnapshot } from "./schema.js";
2
+ export declare function canonicalSerialize(value: unknown): string;
3
+ export declare function comparableSerialize(snapshot: SellableEntityRevisionSnapshot): string;
4
+ //# sourceMappingURL=revision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revision.d.ts","sourceRoot":"","sources":["../../../src/modules/catalog/revision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAElE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAWzD;AAWD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,8BAA8B,GAAG,MAAM,CAUpF"}
@@ -0,0 +1,33 @@
1
+ export function canonicalSerialize(value) {
2
+ if (value instanceof Date)
3
+ return JSON.stringify(value.toISOString());
4
+ if (Array.isArray(value))
5
+ return `[${value.map(canonicalSerialize).join(",")}]`;
6
+ if (value !== null && typeof value === "object") {
7
+ const record = value;
8
+ return `{${Object.keys(record)
9
+ .sort()
10
+ .map((key) => `${JSON.stringify(key)}:${canonicalSerialize(record[key])}`)
11
+ .join(",")}}`;
12
+ }
13
+ return JSON.stringify(value) ?? "null";
14
+ }
15
+ // Row bookkeeping timestamps are excluded from comparison only at row roots,
16
+ // never inside nested jsonb where a user key may share the same name.
17
+ function stripRowTimestamps(row) {
18
+ const { createdAt, updatedAt, ...rest } = row;
19
+ void createdAt;
20
+ void updatedAt;
21
+ return rest;
22
+ }
23
+ export function comparableSerialize(snapshot) {
24
+ return canonicalSerialize({
25
+ entity: stripRowTimestamps(snapshot.entity),
26
+ attributes: snapshot.attributes.map(stripRowTimestamps),
27
+ customFields: snapshot.customFields.map(stripRowTimestamps),
28
+ media: snapshot.media.map(stripRowTimestamps),
29
+ categories: snapshot.categories.map(stripRowTimestamps),
30
+ brands: snapshot.brands.map(stripRowTimestamps),
31
+ tags: (snapshot.tags ?? []).map(stripRowTimestamps),
32
+ });
33
+ }