@reventlessdev/online-shop-aggregates-ordering 3.0.0-alpha.101

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 (408) hide show
  1. package/CHANGELOG.md +846 -0
  2. package/LICENSE +202 -0
  3. package/__mocks__/emptyModule.js +1 -0
  4. package/lib/bs/.compiler.log +2 -0
  5. package/lib/bs/OrderingPlugin.cmi +0 -0
  6. package/lib/bs/OrderingPlugin.cmj +0 -0
  7. package/lib/bs/OrderingPlugin.cmt +0 -0
  8. package/lib/bs/OrderingPlugin.mlmap +31 -0
  9. package/lib/bs/build.ninja +0 -0
  10. package/lib/bs/compiler-info.json +8 -0
  11. package/lib/bs/src/CatalogProduct/Aggregate/CatalogProduct-OrderingPlugin.cmi +0 -0
  12. package/lib/bs/src/CatalogProduct/Aggregate/CatalogProduct-OrderingPlugin.cmj +0 -0
  13. package/lib/bs/src/CatalogProduct/Aggregate/CatalogProduct-OrderingPlugin.cmt +0 -0
  14. package/lib/bs/src/CatalogProduct/Aggregate/CatalogProduct.ast +0 -0
  15. package/lib/bs/src/CatalogProduct/Aggregate/CatalogProduct.res +18 -0
  16. package/lib/bs/src/CatalogProduct/Aggregate/CatalogProduct.res.mjs +50 -0
  17. package/lib/bs/src/CatalogProduct/Aggregate/CatalogProduct_Behavior-OrderingPlugin.cmi +0 -0
  18. package/lib/bs/src/CatalogProduct/Aggregate/CatalogProduct_Behavior-OrderingPlugin.cmj +0 -0
  19. package/lib/bs/src/CatalogProduct/Aggregate/CatalogProduct_Behavior-OrderingPlugin.cmt +0 -0
  20. package/lib/bs/src/CatalogProduct/Aggregate/CatalogProduct_Behavior.ast +0 -0
  21. package/lib/bs/src/CatalogProduct/Aggregate/CatalogProduct_Behavior.res +27 -0
  22. package/lib/bs/src/CatalogProduct/Aggregate/CatalogProduct_Behavior.res.mjs +87 -0
  23. package/lib/bs/src/CatalogProduct/ReadModel/AvailableProducts-OrderingPlugin.cmi +0 -0
  24. package/lib/bs/src/CatalogProduct/ReadModel/AvailableProducts-OrderingPlugin.cmj +0 -0
  25. package/lib/bs/src/CatalogProduct/ReadModel/AvailableProducts-OrderingPlugin.cmt +0 -0
  26. package/lib/bs/src/CatalogProduct/ReadModel/AvailableProducts.ast +0 -0
  27. package/lib/bs/src/CatalogProduct/ReadModel/AvailableProducts.res +13 -0
  28. package/lib/bs/src/CatalogProduct/ReadModel/AvailableProducts.res.mjs +53 -0
  29. package/lib/bs/src/CatalogProduct/ReadModel/AvailableProducts_Projections-OrderingPlugin.cmi +0 -0
  30. package/lib/bs/src/CatalogProduct/ReadModel/AvailableProducts_Projections-OrderingPlugin.cmj +0 -0
  31. package/lib/bs/src/CatalogProduct/ReadModel/AvailableProducts_Projections-OrderingPlugin.cmt +0 -0
  32. package/lib/bs/src/CatalogProduct/ReadModel/AvailableProducts_Projections.ast +0 -0
  33. package/lib/bs/src/CatalogProduct/ReadModel/AvailableProducts_Projections.res +20 -0
  34. package/lib/bs/src/CatalogProduct/ReadModel/AvailableProducts_Projections.res.mjs +65 -0
  35. package/lib/bs/src/Customer/Aggregate/Customer-OrderingPlugin.cmi +0 -0
  36. package/lib/bs/src/Customer/Aggregate/Customer-OrderingPlugin.cmj +0 -0
  37. package/lib/bs/src/Customer/Aggregate/Customer-OrderingPlugin.cmt +0 -0
  38. package/lib/bs/src/Customer/Aggregate/Customer.ast +0 -0
  39. package/lib/bs/src/Customer/Aggregate/Customer.res +24 -0
  40. package/lib/bs/src/Customer/Aggregate/Customer.res.mjs +64 -0
  41. package/lib/bs/src/Customer/Aggregate/Customer_Behavior-OrderingPlugin.cmi +0 -0
  42. package/lib/bs/src/Customer/Aggregate/Customer_Behavior-OrderingPlugin.cmj +0 -0
  43. package/lib/bs/src/Customer/Aggregate/Customer_Behavior-OrderingPlugin.cmt +0 -0
  44. package/lib/bs/src/Customer/Aggregate/Customer_Behavior.ast +0 -0
  45. package/lib/bs/src/Customer/Aggregate/Customer_Behavior.res +41 -0
  46. package/lib/bs/src/Customer/Aggregate/Customer_Behavior.res.mjs +143 -0
  47. package/lib/bs/src/Customer/ReadModel/Customers-OrderingPlugin.cmi +0 -0
  48. package/lib/bs/src/Customer/ReadModel/Customers-OrderingPlugin.cmj +0 -0
  49. package/lib/bs/src/Customer/ReadModel/Customers-OrderingPlugin.cmt +0 -0
  50. package/lib/bs/src/Customer/ReadModel/Customers.ast +0 -0
  51. package/lib/bs/src/Customer/ReadModel/Customers.res +12 -0
  52. package/lib/bs/src/Customer/ReadModel/Customers.res.mjs +36 -0
  53. package/lib/bs/src/Customer/ReadModel/Customers_Projections-OrderingPlugin.cmi +0 -0
  54. package/lib/bs/src/Customer/ReadModel/Customers_Projections-OrderingPlugin.cmj +0 -0
  55. package/lib/bs/src/Customer/ReadModel/Customers_Projections-OrderingPlugin.cmt +0 -0
  56. package/lib/bs/src/Customer/ReadModel/Customers_Projections.ast +0 -0
  57. package/lib/bs/src/Customer/ReadModel/Customers_Projections.res +21 -0
  58. package/lib/bs/src/Customer/ReadModel/Customers_Projections.res.mjs +91 -0
  59. package/lib/bs/src/Extension/Products_Extension-OrderingPlugin.cmi +0 -0
  60. package/lib/bs/src/Extension/Products_Extension-OrderingPlugin.cmj +0 -0
  61. package/lib/bs/src/Extension/Products_Extension-OrderingPlugin.cmt +0 -0
  62. package/lib/bs/src/Extension/Products_Extension.ast +0 -0
  63. package/lib/bs/src/Extension/Products_Extension.res +23 -0
  64. package/lib/bs/src/Extension/Products_Extension.res.mjs +43 -0
  65. package/lib/bs/src/ExtensionPoint/Orders_ExtensionPointMapping-OrderingPlugin.cmi +0 -0
  66. package/lib/bs/src/ExtensionPoint/Orders_ExtensionPointMapping-OrderingPlugin.cmj +0 -0
  67. package/lib/bs/src/ExtensionPoint/Orders_ExtensionPointMapping-OrderingPlugin.cmt +0 -0
  68. package/lib/bs/src/ExtensionPoint/Orders_ExtensionPointMapping.ast +0 -0
  69. package/lib/bs/src/ExtensionPoint/Orders_ExtensionPointMapping.res +28 -0
  70. package/lib/bs/src/ExtensionPoint/Orders_ExtensionPointMapping.res.mjs +59 -0
  71. package/lib/bs/src/Order/Aggregate/Order-OrderingPlugin.cmi +0 -0
  72. package/lib/bs/src/Order/Aggregate/Order-OrderingPlugin.cmj +0 -0
  73. package/lib/bs/src/Order/Aggregate/Order-OrderingPlugin.cmt +0 -0
  74. package/lib/bs/src/Order/Aggregate/Order.ast +0 -0
  75. package/lib/bs/src/Order/Aggregate/Order.res +27 -0
  76. package/lib/bs/src/Order/Aggregate/Order.res.mjs +81 -0
  77. package/lib/bs/src/Order/Aggregate/Order_Behavior-OrderingPlugin.cmi +0 -0
  78. package/lib/bs/src/Order/Aggregate/Order_Behavior-OrderingPlugin.cmj +0 -0
  79. package/lib/bs/src/Order/Aggregate/Order_Behavior-OrderingPlugin.cmt +0 -0
  80. package/lib/bs/src/Order/Aggregate/Order_Behavior.ast +0 -0
  81. package/lib/bs/src/Order/Aggregate/Order_Behavior.res +52 -0
  82. package/lib/bs/src/Order/Aggregate/Order_Behavior.res.mjs +193 -0
  83. package/lib/bs/src/Order/Aggregate/Order_Mappings-OrderingPlugin.cmi +0 -0
  84. package/lib/bs/src/Order/Aggregate/Order_Mappings-OrderingPlugin.cmj +0 -0
  85. package/lib/bs/src/Order/Aggregate/Order_Mappings-OrderingPlugin.cmt +0 -0
  86. package/lib/bs/src/Order/Aggregate/Order_Mappings.ast +0 -0
  87. package/lib/bs/src/Order/Aggregate/Order_Mappings.res +15 -0
  88. package/lib/bs/src/Order/Aggregate/Order_Mappings.res.mjs +55 -0
  89. package/lib/bs/src/Order/ReadModel/Orders-OrderingPlugin.cmi +0 -0
  90. package/lib/bs/src/Order/ReadModel/Orders-OrderingPlugin.cmj +0 -0
  91. package/lib/bs/src/Order/ReadModel/Orders-OrderingPlugin.cmt +0 -0
  92. package/lib/bs/src/Order/ReadModel/Orders.ast +0 -0
  93. package/lib/bs/src/Order/ReadModel/Orders.res +19 -0
  94. package/lib/bs/src/Order/ReadModel/Orders.res.mjs +62 -0
  95. package/lib/bs/src/Order/ReadModel/Orders_Projections-OrderingPlugin.cmi +0 -0
  96. package/lib/bs/src/Order/ReadModel/Orders_Projections-OrderingPlugin.cmj +0 -0
  97. package/lib/bs/src/Order/ReadModel/Orders_Projections-OrderingPlugin.cmt +0 -0
  98. package/lib/bs/src/Order/ReadModel/Orders_Projections.ast +0 -0
  99. package/lib/bs/src/Order/ReadModel/Orders_Projections.res +31 -0
  100. package/lib/bs/src/Order/ReadModel/Orders_Projections.res.mjs +89 -0
  101. package/lib/bs/src/Order/SideEffect/Order_EmailNotification-OrderingPlugin.cmi +0 -0
  102. package/lib/bs/src/Order/SideEffect/Order_EmailNotification-OrderingPlugin.cmj +0 -0
  103. package/lib/bs/src/Order/SideEffect/Order_EmailNotification-OrderingPlugin.cmt +0 -0
  104. package/lib/bs/src/Order/SideEffect/Order_EmailNotification.ast +0 -0
  105. package/lib/bs/src/Order/SideEffect/Order_EmailNotification.res +18 -0
  106. package/lib/bs/src/Order/SideEffect/Order_EmailNotification.res.mjs +34 -0
  107. package/lib/bs/src/Plugin-OrderingPlugin.cmi +0 -0
  108. package/lib/bs/src/Plugin-OrderingPlugin.cmj +0 -0
  109. package/lib/bs/src/Plugin-OrderingPlugin.cmt +0 -0
  110. package/lib/bs/src/Plugin.ast +0 -0
  111. package/lib/bs/src/Plugin.res +65 -0
  112. package/lib/bs/src/Plugin.res.mjs +223 -0
  113. package/lib/bs/src/Service/EmailService-OrderingPlugin.cmi +0 -0
  114. package/lib/bs/src/Service/EmailService-OrderingPlugin.cmj +0 -0
  115. package/lib/bs/src/Service/EmailService-OrderingPlugin.cmt +0 -0
  116. package/lib/bs/src/Service/EmailService.ast +0 -0
  117. package/lib/bs/src/Service/EmailService.res +22 -0
  118. package/lib/bs/src/Service/EmailService.res.mjs +23 -0
  119. package/lib/bs/src/Task/OrderNotifications-OrderingPlugin.cmi +0 -0
  120. package/lib/bs/src/Task/OrderNotifications-OrderingPlugin.cmj +0 -0
  121. package/lib/bs/src/Task/OrderNotifications-OrderingPlugin.cmt +0 -0
  122. package/lib/bs/src/Task/OrderNotifications.ast +0 -0
  123. package/lib/bs/src/Task/OrderNotifications.res +8 -0
  124. package/lib/bs/src/Task/OrderNotifications.res.mjs +29 -0
  125. package/lib/bs/tests/CatalogProduct/Aggregate/CatalogProduct_GWT-OrderingPlugin.cmi +0 -0
  126. package/lib/bs/tests/CatalogProduct/Aggregate/CatalogProduct_GWT-OrderingPlugin.cmj +0 -0
  127. package/lib/bs/tests/CatalogProduct/Aggregate/CatalogProduct_GWT-OrderingPlugin.cmt +0 -0
  128. package/lib/bs/tests/CatalogProduct/Aggregate/CatalogProduct_GWT.ast +0 -0
  129. package/lib/bs/tests/CatalogProduct/Aggregate/CatalogProduct_GWT.res +27 -0
  130. package/lib/bs/tests/CatalogProduct/Aggregate/CatalogProduct_GWT.res.mjs +102 -0
  131. package/lib/bs/tests/CatalogProduct/ReadModel/AvailableProducts_GWT-OrderingPlugin.cmi +0 -0
  132. package/lib/bs/tests/CatalogProduct/ReadModel/AvailableProducts_GWT-OrderingPlugin.cmj +0 -0
  133. package/lib/bs/tests/CatalogProduct/ReadModel/AvailableProducts_GWT-OrderingPlugin.cmt +0 -0
  134. package/lib/bs/tests/CatalogProduct/ReadModel/AvailableProducts_GWT.ast +0 -0
  135. package/lib/bs/tests/CatalogProduct/ReadModel/AvailableProducts_GWT.res +15 -0
  136. package/lib/bs/tests/CatalogProduct/ReadModel/AvailableProducts_GWT.res.mjs +83 -0
  137. package/lib/bs/tests/Customer/Aggregate/Customer_GWT-OrderingPlugin.cmi +0 -0
  138. package/lib/bs/tests/Customer/Aggregate/Customer_GWT-OrderingPlugin.cmj +0 -0
  139. package/lib/bs/tests/Customer/Aggregate/Customer_GWT-OrderingPlugin.cmt +0 -0
  140. package/lib/bs/tests/Customer/Aggregate/Customer_GWT.ast +0 -0
  141. package/lib/bs/tests/Customer/Aggregate/Customer_GWT.res +90 -0
  142. package/lib/bs/tests/Customer/Aggregate/Customer_GWT.res.mjs +170 -0
  143. package/lib/bs/tests/Customer/ReadModel/Customers_GWT-OrderingPlugin.cmi +0 -0
  144. package/lib/bs/tests/Customer/ReadModel/Customers_GWT-OrderingPlugin.cmj +0 -0
  145. package/lib/bs/tests/Customer/ReadModel/Customers_GWT-OrderingPlugin.cmt +0 -0
  146. package/lib/bs/tests/Customer/ReadModel/Customers_GWT.ast +0 -0
  147. package/lib/bs/tests/Customer/ReadModel/Customers_GWT.res +27 -0
  148. package/lib/bs/tests/Customer/ReadModel/Customers_GWT.res.mjs +106 -0
  149. package/lib/bs/tests/Extension/Products_Extension_GWT-OrderingPlugin.cmi +0 -0
  150. package/lib/bs/tests/Extension/Products_Extension_GWT-OrderingPlugin.cmj +0 -0
  151. package/lib/bs/tests/Extension/Products_Extension_GWT-OrderingPlugin.cmt +0 -0
  152. package/lib/bs/tests/Extension/Products_Extension_GWT.ast +0 -0
  153. package/lib/bs/tests/Extension/Products_Extension_GWT.res +21 -0
  154. package/lib/bs/tests/Extension/Products_Extension_GWT.res.mjs +106 -0
  155. package/lib/bs/tests/ExtensionPoint/Orders_ExtensionPointMapping_GWT-OrderingPlugin.cmi +0 -0
  156. package/lib/bs/tests/ExtensionPoint/Orders_ExtensionPointMapping_GWT-OrderingPlugin.cmj +0 -0
  157. package/lib/bs/tests/ExtensionPoint/Orders_ExtensionPointMapping_GWT-OrderingPlugin.cmt +0 -0
  158. package/lib/bs/tests/ExtensionPoint/Orders_ExtensionPointMapping_GWT.ast +0 -0
  159. package/lib/bs/tests/ExtensionPoint/Orders_ExtensionPointMapping_GWT.res +33 -0
  160. package/lib/bs/tests/ExtensionPoint/Orders_ExtensionPointMapping_GWT.res.mjs +143 -0
  161. package/lib/bs/tests/Order/Aggregate/OrderMappings_GWT-OrderingPlugin.cmi +0 -0
  162. package/lib/bs/tests/Order/Aggregate/OrderMappings_GWT-OrderingPlugin.cmj +0 -0
  163. package/lib/bs/tests/Order/Aggregate/OrderMappings_GWT-OrderingPlugin.cmt +0 -0
  164. package/lib/bs/tests/Order/Aggregate/OrderMappings_GWT.ast +0 -0
  165. package/lib/bs/tests/Order/Aggregate/OrderMappings_GWT.res +52 -0
  166. package/lib/bs/tests/Order/Aggregate/OrderMappings_GWT.res.mjs +162 -0
  167. package/lib/bs/tests/Order/Aggregate/Order_GWT-OrderingPlugin.cmi +0 -0
  168. package/lib/bs/tests/Order/Aggregate/Order_GWT-OrderingPlugin.cmj +0 -0
  169. package/lib/bs/tests/Order/Aggregate/Order_GWT-OrderingPlugin.cmt +0 -0
  170. package/lib/bs/tests/Order/Aggregate/Order_GWT.ast +0 -0
  171. package/lib/bs/tests/Order/Aggregate/Order_GWT.res +121 -0
  172. package/lib/bs/tests/Order/Aggregate/Order_GWT.res.mjs +231 -0
  173. package/lib/bs/tests/Order/ReadModel/Orders_GWT-OrderingPlugin.cmi +0 -0
  174. package/lib/bs/tests/Order/ReadModel/Orders_GWT-OrderingPlugin.cmj +0 -0
  175. package/lib/bs/tests/Order/ReadModel/Orders_GWT-OrderingPlugin.cmt +0 -0
  176. package/lib/bs/tests/Order/ReadModel/Orders_GWT.ast +0 -0
  177. package/lib/bs/tests/Order/ReadModel/Orders_GWT.res +46 -0
  178. package/lib/bs/tests/Order/ReadModel/Orders_GWT.res.mjs +118 -0
  179. package/lib/bs/tests/Order/SideEffect/EmailService_Mock-OrderingPlugin.cmi +0 -0
  180. package/lib/bs/tests/Order/SideEffect/EmailService_Mock-OrderingPlugin.cmj +0 -0
  181. package/lib/bs/tests/Order/SideEffect/EmailService_Mock-OrderingPlugin.cmt +0 -0
  182. package/lib/bs/tests/Order/SideEffect/EmailService_Mock.ast +0 -0
  183. package/lib/bs/tests/Order/SideEffect/EmailService_Mock.res +31 -0
  184. package/lib/bs/tests/Order/SideEffect/EmailService_Mock.res.mjs +56 -0
  185. package/lib/bs/tests/Order/SideEffect/Order_EmailNotification_GWT-OrderingPlugin.cmi +0 -0
  186. package/lib/bs/tests/Order/SideEffect/Order_EmailNotification_GWT-OrderingPlugin.cmj +0 -0
  187. package/lib/bs/tests/Order/SideEffect/Order_EmailNotification_GWT-OrderingPlugin.cmt +0 -0
  188. package/lib/bs/tests/Order/SideEffect/Order_EmailNotification_GWT.ast +0 -0
  189. package/lib/bs/tests/Order/SideEffect/Order_EmailNotification_GWT.res +37 -0
  190. package/lib/bs/tests/Order/SideEffect/Order_EmailNotification_GWT.res.mjs +76 -0
  191. package/lib/ocaml/.compiler.log +2 -0
  192. package/lib/ocaml/AvailableProducts-OrderingPlugin.cmi +0 -0
  193. package/lib/ocaml/AvailableProducts-OrderingPlugin.cmj +0 -0
  194. package/lib/ocaml/AvailableProducts-OrderingPlugin.cmt +0 -0
  195. package/lib/ocaml/AvailableProducts.ast +0 -0
  196. package/lib/ocaml/AvailableProducts.res +13 -0
  197. package/lib/ocaml/AvailableProducts_GWT-OrderingPlugin.cmi +0 -0
  198. package/lib/ocaml/AvailableProducts_GWT-OrderingPlugin.cmj +0 -0
  199. package/lib/ocaml/AvailableProducts_GWT-OrderingPlugin.cmt +0 -0
  200. package/lib/ocaml/AvailableProducts_GWT.ast +0 -0
  201. package/lib/ocaml/AvailableProducts_GWT.res +15 -0
  202. package/lib/ocaml/AvailableProducts_Projections-OrderingPlugin.cmi +0 -0
  203. package/lib/ocaml/AvailableProducts_Projections-OrderingPlugin.cmj +0 -0
  204. package/lib/ocaml/AvailableProducts_Projections-OrderingPlugin.cmt +0 -0
  205. package/lib/ocaml/AvailableProducts_Projections.ast +0 -0
  206. package/lib/ocaml/AvailableProducts_Projections.res +20 -0
  207. package/lib/ocaml/CatalogProduct-OrderingPlugin.cmi +0 -0
  208. package/lib/ocaml/CatalogProduct-OrderingPlugin.cmj +0 -0
  209. package/lib/ocaml/CatalogProduct-OrderingPlugin.cmt +0 -0
  210. package/lib/ocaml/CatalogProduct.ast +0 -0
  211. package/lib/ocaml/CatalogProduct.res +18 -0
  212. package/lib/ocaml/CatalogProduct_Behavior-OrderingPlugin.cmi +0 -0
  213. package/lib/ocaml/CatalogProduct_Behavior-OrderingPlugin.cmj +0 -0
  214. package/lib/ocaml/CatalogProduct_Behavior-OrderingPlugin.cmt +0 -0
  215. package/lib/ocaml/CatalogProduct_Behavior.ast +0 -0
  216. package/lib/ocaml/CatalogProduct_Behavior.res +27 -0
  217. package/lib/ocaml/CatalogProduct_GWT-OrderingPlugin.cmi +0 -0
  218. package/lib/ocaml/CatalogProduct_GWT-OrderingPlugin.cmj +0 -0
  219. package/lib/ocaml/CatalogProduct_GWT-OrderingPlugin.cmt +0 -0
  220. package/lib/ocaml/CatalogProduct_GWT.ast +0 -0
  221. package/lib/ocaml/CatalogProduct_GWT.res +27 -0
  222. package/lib/ocaml/Customer-OrderingPlugin.cmi +0 -0
  223. package/lib/ocaml/Customer-OrderingPlugin.cmj +0 -0
  224. package/lib/ocaml/Customer-OrderingPlugin.cmt +0 -0
  225. package/lib/ocaml/Customer.ast +0 -0
  226. package/lib/ocaml/Customer.res +24 -0
  227. package/lib/ocaml/Customer_Behavior-OrderingPlugin.cmi +0 -0
  228. package/lib/ocaml/Customer_Behavior-OrderingPlugin.cmj +0 -0
  229. package/lib/ocaml/Customer_Behavior-OrderingPlugin.cmt +0 -0
  230. package/lib/ocaml/Customer_Behavior.ast +0 -0
  231. package/lib/ocaml/Customer_Behavior.res +41 -0
  232. package/lib/ocaml/Customer_GWT-OrderingPlugin.cmi +0 -0
  233. package/lib/ocaml/Customer_GWT-OrderingPlugin.cmj +0 -0
  234. package/lib/ocaml/Customer_GWT-OrderingPlugin.cmt +0 -0
  235. package/lib/ocaml/Customer_GWT.ast +0 -0
  236. package/lib/ocaml/Customer_GWT.res +90 -0
  237. package/lib/ocaml/Customers-OrderingPlugin.cmi +0 -0
  238. package/lib/ocaml/Customers-OrderingPlugin.cmj +0 -0
  239. package/lib/ocaml/Customers-OrderingPlugin.cmt +0 -0
  240. package/lib/ocaml/Customers.ast +0 -0
  241. package/lib/ocaml/Customers.res +12 -0
  242. package/lib/ocaml/Customers_GWT-OrderingPlugin.cmi +0 -0
  243. package/lib/ocaml/Customers_GWT-OrderingPlugin.cmj +0 -0
  244. package/lib/ocaml/Customers_GWT-OrderingPlugin.cmt +0 -0
  245. package/lib/ocaml/Customers_GWT.ast +0 -0
  246. package/lib/ocaml/Customers_GWT.res +27 -0
  247. package/lib/ocaml/Customers_Projections-OrderingPlugin.cmi +0 -0
  248. package/lib/ocaml/Customers_Projections-OrderingPlugin.cmj +0 -0
  249. package/lib/ocaml/Customers_Projections-OrderingPlugin.cmt +0 -0
  250. package/lib/ocaml/Customers_Projections.ast +0 -0
  251. package/lib/ocaml/Customers_Projections.res +21 -0
  252. package/lib/ocaml/EmailService-OrderingPlugin.cmi +0 -0
  253. package/lib/ocaml/EmailService-OrderingPlugin.cmj +0 -0
  254. package/lib/ocaml/EmailService-OrderingPlugin.cmt +0 -0
  255. package/lib/ocaml/EmailService.ast +0 -0
  256. package/lib/ocaml/EmailService.res +22 -0
  257. package/lib/ocaml/EmailService_Mock-OrderingPlugin.cmi +0 -0
  258. package/lib/ocaml/EmailService_Mock-OrderingPlugin.cmj +0 -0
  259. package/lib/ocaml/EmailService_Mock-OrderingPlugin.cmt +0 -0
  260. package/lib/ocaml/EmailService_Mock.ast +0 -0
  261. package/lib/ocaml/EmailService_Mock.res +31 -0
  262. package/lib/ocaml/Order-OrderingPlugin.cmi +0 -0
  263. package/lib/ocaml/Order-OrderingPlugin.cmj +0 -0
  264. package/lib/ocaml/Order-OrderingPlugin.cmt +0 -0
  265. package/lib/ocaml/Order.ast +0 -0
  266. package/lib/ocaml/Order.res +27 -0
  267. package/lib/ocaml/OrderMappings_GWT-OrderingPlugin.cmi +0 -0
  268. package/lib/ocaml/OrderMappings_GWT-OrderingPlugin.cmj +0 -0
  269. package/lib/ocaml/OrderMappings_GWT-OrderingPlugin.cmt +0 -0
  270. package/lib/ocaml/OrderMappings_GWT.ast +0 -0
  271. package/lib/ocaml/OrderMappings_GWT.res +52 -0
  272. package/lib/ocaml/OrderNotifications-OrderingPlugin.cmi +0 -0
  273. package/lib/ocaml/OrderNotifications-OrderingPlugin.cmj +0 -0
  274. package/lib/ocaml/OrderNotifications-OrderingPlugin.cmt +0 -0
  275. package/lib/ocaml/OrderNotifications.ast +0 -0
  276. package/lib/ocaml/OrderNotifications.res +8 -0
  277. package/lib/ocaml/Order_Behavior-OrderingPlugin.cmi +0 -0
  278. package/lib/ocaml/Order_Behavior-OrderingPlugin.cmj +0 -0
  279. package/lib/ocaml/Order_Behavior-OrderingPlugin.cmt +0 -0
  280. package/lib/ocaml/Order_Behavior.ast +0 -0
  281. package/lib/ocaml/Order_Behavior.res +52 -0
  282. package/lib/ocaml/Order_EmailNotification-OrderingPlugin.cmi +0 -0
  283. package/lib/ocaml/Order_EmailNotification-OrderingPlugin.cmj +0 -0
  284. package/lib/ocaml/Order_EmailNotification-OrderingPlugin.cmt +0 -0
  285. package/lib/ocaml/Order_EmailNotification.ast +0 -0
  286. package/lib/ocaml/Order_EmailNotification.res +18 -0
  287. package/lib/ocaml/Order_EmailNotification_GWT-OrderingPlugin.cmi +0 -0
  288. package/lib/ocaml/Order_EmailNotification_GWT-OrderingPlugin.cmj +0 -0
  289. package/lib/ocaml/Order_EmailNotification_GWT-OrderingPlugin.cmt +0 -0
  290. package/lib/ocaml/Order_EmailNotification_GWT.ast +0 -0
  291. package/lib/ocaml/Order_EmailNotification_GWT.res +37 -0
  292. package/lib/ocaml/Order_GWT-OrderingPlugin.cmi +0 -0
  293. package/lib/ocaml/Order_GWT-OrderingPlugin.cmj +0 -0
  294. package/lib/ocaml/Order_GWT-OrderingPlugin.cmt +0 -0
  295. package/lib/ocaml/Order_GWT.ast +0 -0
  296. package/lib/ocaml/Order_GWT.res +121 -0
  297. package/lib/ocaml/Order_Mappings-OrderingPlugin.cmi +0 -0
  298. package/lib/ocaml/Order_Mappings-OrderingPlugin.cmj +0 -0
  299. package/lib/ocaml/Order_Mappings-OrderingPlugin.cmt +0 -0
  300. package/lib/ocaml/Order_Mappings.ast +0 -0
  301. package/lib/ocaml/Order_Mappings.res +15 -0
  302. package/lib/ocaml/OrderingPlugin.cmi +0 -0
  303. package/lib/ocaml/OrderingPlugin.cmj +0 -0
  304. package/lib/ocaml/OrderingPlugin.cmt +0 -0
  305. package/lib/ocaml/OrderingPlugin.mlmap +31 -0
  306. package/lib/ocaml/Orders-OrderingPlugin.cmi +0 -0
  307. package/lib/ocaml/Orders-OrderingPlugin.cmj +0 -0
  308. package/lib/ocaml/Orders-OrderingPlugin.cmt +0 -0
  309. package/lib/ocaml/Orders.ast +0 -0
  310. package/lib/ocaml/Orders.res +19 -0
  311. package/lib/ocaml/Orders_ExtensionPointMapping-OrderingPlugin.cmi +0 -0
  312. package/lib/ocaml/Orders_ExtensionPointMapping-OrderingPlugin.cmj +0 -0
  313. package/lib/ocaml/Orders_ExtensionPointMapping-OrderingPlugin.cmt +0 -0
  314. package/lib/ocaml/Orders_ExtensionPointMapping.ast +0 -0
  315. package/lib/ocaml/Orders_ExtensionPointMapping.res +28 -0
  316. package/lib/ocaml/Orders_ExtensionPointMapping_GWT-OrderingPlugin.cmi +0 -0
  317. package/lib/ocaml/Orders_ExtensionPointMapping_GWT-OrderingPlugin.cmj +0 -0
  318. package/lib/ocaml/Orders_ExtensionPointMapping_GWT-OrderingPlugin.cmt +0 -0
  319. package/lib/ocaml/Orders_ExtensionPointMapping_GWT.ast +0 -0
  320. package/lib/ocaml/Orders_ExtensionPointMapping_GWT.res +33 -0
  321. package/lib/ocaml/Orders_GWT-OrderingPlugin.cmi +0 -0
  322. package/lib/ocaml/Orders_GWT-OrderingPlugin.cmj +0 -0
  323. package/lib/ocaml/Orders_GWT-OrderingPlugin.cmt +0 -0
  324. package/lib/ocaml/Orders_GWT.ast +0 -0
  325. package/lib/ocaml/Orders_GWT.res +46 -0
  326. package/lib/ocaml/Orders_Projections-OrderingPlugin.cmi +0 -0
  327. package/lib/ocaml/Orders_Projections-OrderingPlugin.cmj +0 -0
  328. package/lib/ocaml/Orders_Projections-OrderingPlugin.cmt +0 -0
  329. package/lib/ocaml/Orders_Projections.ast +0 -0
  330. package/lib/ocaml/Orders_Projections.res +31 -0
  331. package/lib/ocaml/Plugin-OrderingPlugin.cmi +0 -0
  332. package/lib/ocaml/Plugin-OrderingPlugin.cmj +0 -0
  333. package/lib/ocaml/Plugin-OrderingPlugin.cmt +0 -0
  334. package/lib/ocaml/Plugin.ast +0 -0
  335. package/lib/ocaml/Plugin.res +65 -0
  336. package/lib/ocaml/Products_Extension-OrderingPlugin.cmi +0 -0
  337. package/lib/ocaml/Products_Extension-OrderingPlugin.cmj +0 -0
  338. package/lib/ocaml/Products_Extension-OrderingPlugin.cmt +0 -0
  339. package/lib/ocaml/Products_Extension.ast +0 -0
  340. package/lib/ocaml/Products_Extension.res +23 -0
  341. package/lib/ocaml/Products_Extension_GWT-OrderingPlugin.cmi +0 -0
  342. package/lib/ocaml/Products_Extension_GWT-OrderingPlugin.cmj +0 -0
  343. package/lib/ocaml/Products_Extension_GWT-OrderingPlugin.cmt +0 -0
  344. package/lib/ocaml/Products_Extension_GWT.ast +0 -0
  345. package/lib/ocaml/Products_Extension_GWT.res +21 -0
  346. package/package.json +52 -0
  347. package/rescript.json +39 -0
  348. package/src/CatalogProduct/Aggregate/CatalogProduct.res +18 -0
  349. package/src/CatalogProduct/Aggregate/CatalogProduct.res.mjs +50 -0
  350. package/src/CatalogProduct/Aggregate/CatalogProduct_Behavior.res +27 -0
  351. package/src/CatalogProduct/Aggregate/CatalogProduct_Behavior.res.mjs +87 -0
  352. package/src/CatalogProduct/ReadModel/AvailableProducts.res +13 -0
  353. package/src/CatalogProduct/ReadModel/AvailableProducts.res.mjs +53 -0
  354. package/src/CatalogProduct/ReadModel/AvailableProducts_Projections.res +20 -0
  355. package/src/CatalogProduct/ReadModel/AvailableProducts_Projections.res.mjs +65 -0
  356. package/src/Customer/Aggregate/Customer.res +24 -0
  357. package/src/Customer/Aggregate/Customer.res.mjs +64 -0
  358. package/src/Customer/Aggregate/Customer_Behavior.res +41 -0
  359. package/src/Customer/Aggregate/Customer_Behavior.res.mjs +143 -0
  360. package/src/Customer/ReadModel/Customers.res +12 -0
  361. package/src/Customer/ReadModel/Customers.res.mjs +36 -0
  362. package/src/Customer/ReadModel/Customers_Projections.res +21 -0
  363. package/src/Customer/ReadModel/Customers_Projections.res.mjs +91 -0
  364. package/src/Extension/Products_Extension.res +23 -0
  365. package/src/Extension/Products_Extension.res.mjs +43 -0
  366. package/src/ExtensionPoint/Orders_ExtensionPointMapping.res +28 -0
  367. package/src/ExtensionPoint/Orders_ExtensionPointMapping.res.mjs +59 -0
  368. package/src/Order/Aggregate/Order.res +27 -0
  369. package/src/Order/Aggregate/Order.res.mjs +81 -0
  370. package/src/Order/Aggregate/Order_Behavior.res +52 -0
  371. package/src/Order/Aggregate/Order_Behavior.res.mjs +193 -0
  372. package/src/Order/Aggregate/Order_Mappings.res +15 -0
  373. package/src/Order/Aggregate/Order_Mappings.res.mjs +55 -0
  374. package/src/Order/ReadModel/Orders.res +19 -0
  375. package/src/Order/ReadModel/Orders.res.mjs +62 -0
  376. package/src/Order/ReadModel/Orders_Projections.res +31 -0
  377. package/src/Order/ReadModel/Orders_Projections.res.mjs +89 -0
  378. package/src/Order/SideEffect/Order_EmailNotification.res +18 -0
  379. package/src/Order/SideEffect/Order_EmailNotification.res.mjs +34 -0
  380. package/src/Plugin.res +65 -0
  381. package/src/Plugin.res.mjs +223 -0
  382. package/src/Service/EmailService.res +22 -0
  383. package/src/Service/EmailService.res.mjs +23 -0
  384. package/src/Task/OrderNotifications.res +8 -0
  385. package/src/Task/OrderNotifications.res.mjs +29 -0
  386. package/src/plugin.json +1 -0
  387. package/tests/CatalogProduct/Aggregate/CatalogProduct_GWT.res +27 -0
  388. package/tests/CatalogProduct/Aggregate/CatalogProduct_GWT.res.mjs +102 -0
  389. package/tests/CatalogProduct/ReadModel/AvailableProducts_GWT.res +15 -0
  390. package/tests/CatalogProduct/ReadModel/AvailableProducts_GWT.res.mjs +83 -0
  391. package/tests/Customer/Aggregate/Customer_GWT.res +90 -0
  392. package/tests/Customer/Aggregate/Customer_GWT.res.mjs +170 -0
  393. package/tests/Customer/ReadModel/Customers_GWT.res +27 -0
  394. package/tests/Customer/ReadModel/Customers_GWT.res.mjs +106 -0
  395. package/tests/Extension/Products_Extension_GWT.res +21 -0
  396. package/tests/Extension/Products_Extension_GWT.res.mjs +106 -0
  397. package/tests/ExtensionPoint/Orders_ExtensionPointMapping_GWT.res +33 -0
  398. package/tests/ExtensionPoint/Orders_ExtensionPointMapping_GWT.res.mjs +143 -0
  399. package/tests/Order/Aggregate/OrderMappings_GWT.res +52 -0
  400. package/tests/Order/Aggregate/OrderMappings_GWT.res.mjs +162 -0
  401. package/tests/Order/Aggregate/Order_GWT.res +121 -0
  402. package/tests/Order/Aggregate/Order_GWT.res.mjs +231 -0
  403. package/tests/Order/ReadModel/Orders_GWT.res +46 -0
  404. package/tests/Order/ReadModel/Orders_GWT.res.mjs +118 -0
  405. package/tests/Order/SideEffect/EmailService_Mock.res +31 -0
  406. package/tests/Order/SideEffect/EmailService_Mock.res.mjs +56 -0
  407. package/tests/Order/SideEffect/Order_EmailNotification_GWT.res +37 -0
  408. package/tests/Order/SideEffect/Order_EmailNotification_GWT.res.mjs +76 -0
@@ -0,0 +1,52 @@
1
+ // Order aggregate behavior.
2
+ // Implements the lifecycle for placing, shipping, cancelling, and refunding orders.
3
+
4
+ @@reventless.behavior
5
+
6
+ @schema
7
+ type state =
8
+ | NotCreated
9
+ | Placed({customerId: string, productIds: array<string>})
10
+ | Shipped
11
+ | Cancelled
12
+ | Refunded
13
+
14
+ let initialState = NotCreated
15
+
16
+ let evolve = (state, event) =>
17
+ switch (state, event) {
18
+ | (NotCreated, Order.Placed({customerId, productIds})) => Placed({customerId, productIds})
19
+ | (Placed(_), Order.Placed({customerId, productIds})) => Placed({customerId, productIds})
20
+ | (Placed(_), Order.Shipped) => Shipped
21
+ | (Placed(_), Order.Cancelled(_)) => Cancelled
22
+ | (Cancelled, Order.Refunded(_)) => Refunded
23
+ | (Shipped, _) => state
24
+ | (Cancelled, _) => state
25
+ | (Refunded, _) => state
26
+ | (NotCreated, _) => state
27
+ }
28
+
29
+ let decide = (state, command) =>
30
+ switch (state, command) {
31
+ | (NotCreated, Place({customerId, productIds})) =>
32
+ Ok([Order.Placed({customerId, productIds})])
33
+ | (NotCreated, Ship) => Error(OrderNotFound)
34
+ | (NotCreated, Cancel) => Error(OrderNotFound)
35
+ | (NotCreated, Refund(_)) => Error(OrderNotFound)
36
+ | (Placed(_), Place(_)) => Error(OrderAlreadyPlaced)
37
+ | (Placed(_), Ship) => Ok([Order.Shipped])
38
+ | (Placed({productIds}), Cancel) => Ok([Order.Cancelled({productIds: productIds})])
39
+ | (Placed(_), Refund(_)) => Error(OrderNotCancelled)
40
+ | (Shipped, Place(_)) => Error(OrderAlreadyShipped)
41
+ | (Shipped, Ship) => Ok([]) // idempotent
42
+ | (Shipped, Cancel) => Error(OrderAlreadyShipped)
43
+ | (Shipped, Refund(_)) => Error(OrderNotCancelled)
44
+ | (Cancelled, Place(_)) => Error(OrderAlreadyCancelled)
45
+ | (Cancelled, Ship) => Error(OrderAlreadyCancelled)
46
+ | (Cancelled, Cancel) => Ok([]) // idempotent
47
+ | (Cancelled, Refund({reason})) => Ok([Order.Refunded({reason: reason})])
48
+ | (Refunded, Place(_)) => Error(OrderAlreadyRefunded)
49
+ | (Refunded, Ship) => Error(OrderAlreadyRefunded)
50
+ | (Refunded, Cancel) => Error(OrderAlreadyRefunded)
51
+ | (Refunded, Refund(_)) => Ok([]) // idempotent
52
+ }
@@ -0,0 +1,18 @@
1
+ // Send an order confirmation email when an order is placed.
2
+ @@reventless.spec
3
+
4
+ module Source = {
5
+ let name = Order.name
6
+ module Id = Order.Id
7
+ @schema type event = Order.event
8
+ }
9
+
10
+ let execute = async (orderId, _meta, event, _queryEngine) =>
11
+ switch event {
12
+ | Order.Placed({customerId}) =>
13
+ await EmailService.sendOrderConfirmation(
14
+ ~email=customerId,
15
+ ~orderId=orderId->Order.Id.toString,
16
+ )
17
+ | _ => ()
18
+ }
@@ -0,0 +1,37 @@
1
+ // GWT for the aggregate-style egress `Order_EmailNotification`. Mirrors the
2
+ // hybrid example's DCB-side `SendOrderConfirmation_GWT` (OutboundTranslation).
3
+ // The folder `SideEffect/` is what the PPX uses to infer the DSL kind.
4
+
5
+ @@reventless.gwt
6
+
7
+ // Each test installs the recording backend at the start of its pipeline; the
8
+ // install also resets the recorded-calls ref, so tests stay isolated without
9
+ // pulling rescript-jest's `beforeEach` into the example's dependencies.
10
+
11
+ describe("Order_EmailNotification SideEffect", () => {
12
+ test("Placed triggers a confirmation email", () => {
13
+ EmailService_Mock.install()
14
+ givenEventForId(
15
+ Order.Id.makeFromString("o1"),
16
+ Order.Placed({customerId: "alice@example.com", productIds: ["p1"]}),
17
+ )
18
+ ->whenExecuted(EmailService_Mock.mock)
19
+ ->thenExternalCalls([
20
+ EmailService_Mock.SendOrderConfirmation({email: "alice@example.com", orderId: "o1"}),
21
+ ])
22
+ })
23
+
24
+ test("Shipped is a no-op", () => {
25
+ EmailService_Mock.install()
26
+ givenEvent(Order.Shipped)
27
+ ->whenExecuted(EmailService_Mock.mock)
28
+ ->thenNoExternalCalls
29
+ })
30
+
31
+ test("Cancelled is a no-op", () => {
32
+ EmailService_Mock.install()
33
+ givenEvent(Order.Cancelled({productIds: ["p1"]}))
34
+ ->whenExecuted(EmailService_Mock.mock)
35
+ ->thenNoExternalCalls
36
+ })
37
+ })
Binary file
@@ -0,0 +1,121 @@
1
+ @@reventless.gwt
2
+
3
+ describe("Order Behavior", () => {
4
+ test("Place on new aggregate produces Placed", () =>
5
+ givenEvents([])
6
+ ->whenCmd(Place({customerId: "cust-1", productIds: ["prod-1", "prod-2"]}))
7
+ ->thenEvent(Placed({customerId: "cust-1", productIds: ["prod-1", "prod-2"]}))
8
+ )
9
+
10
+ test("Place on existing order returns OrderAlreadyPlaced", () =>
11
+ givenEvents([Placed({customerId: "cust-1", productIds: ["prod-1"]})])
12
+ ->whenCmd(Place({customerId: "cust-1", productIds: ["prod-1"]}))
13
+ ->thenError(OrderAlreadyPlaced)
14
+ )
15
+
16
+ test("Place on shipped order returns OrderAlreadyShipped", () =>
17
+ givenEvents([Placed({customerId: "cust-1", productIds: ["prod-1"]}), Shipped])
18
+ ->whenCmd(Place({customerId: "cust-1", productIds: ["prod-1"]}))
19
+ ->thenError(OrderAlreadyShipped)
20
+ )
21
+
22
+ test("Place on cancelled order returns OrderAlreadyCancelled", () =>
23
+ givenEvents([
24
+ Placed({customerId: "cust-1", productIds: ["prod-1"]}),
25
+ Cancelled({productIds: ["prod-1"]}),
26
+ ])
27
+ ->whenCmd(Place({customerId: "cust-1", productIds: ["prod-1"]}))
28
+ ->thenError(OrderAlreadyCancelled)
29
+ )
30
+
31
+ test("Ship on non-existent order returns OrderNotFound", () =>
32
+ givenEvents([])
33
+ ->whenCmd(Ship)
34
+ ->thenError(OrderNotFound)
35
+ )
36
+
37
+ test("Ship on placed order produces Shipped", () =>
38
+ givenEvents([Placed({customerId: "cust-1", productIds: ["prod-1"]})])
39
+ ->whenCmd(Ship)
40
+ ->thenEvent(Shipped)
41
+ )
42
+
43
+ test("Ship on shipped order produces no events (idempotent)", () =>
44
+ givenEvents([Placed({customerId: "cust-1", productIds: ["prod-1"]}), Shipped])
45
+ ->whenCmd(Ship)
46
+ ->thenNoEvent
47
+ )
48
+
49
+ test("Ship on cancelled order returns OrderAlreadyCancelled", () =>
50
+ givenEvents([
51
+ Placed({customerId: "cust-1", productIds: ["prod-1"]}),
52
+ Cancelled({productIds: ["prod-1"]}),
53
+ ])
54
+ ->whenCmd(Ship)
55
+ ->thenError(OrderAlreadyCancelled)
56
+ )
57
+
58
+ test("Cancel on non-existent order returns OrderNotFound", () =>
59
+ givenEvents([])
60
+ ->whenCmd(Cancel)
61
+ ->thenError(OrderNotFound)
62
+ )
63
+
64
+ test("Cancel on placed order produces Cancelled", () =>
65
+ givenEvents([Placed({customerId: "cust-1", productIds: ["prod-1"]})])
66
+ ->whenCmd(Cancel)
67
+ ->thenEvent(Cancelled({productIds: ["prod-1"]}))
68
+ )
69
+
70
+ test("Cancel on shipped order returns OrderAlreadyShipped", () =>
71
+ givenEvents([Placed({customerId: "cust-1", productIds: ["prod-1"]}), Shipped])
72
+ ->whenCmd(Cancel)
73
+ ->thenError(OrderAlreadyShipped)
74
+ )
75
+
76
+ test("Cancel on cancelled order produces no events (idempotent)", () =>
77
+ givenEvents([
78
+ Placed({customerId: "cust-1", productIds: ["prod-1"]}),
79
+ Cancelled({productIds: ["prod-1"]}),
80
+ ])
81
+ ->whenCmd(Cancel)
82
+ ->thenNoEvent
83
+ )
84
+
85
+ test("Refund on non-existent order returns OrderNotFound", () =>
86
+ givenEvents([])
87
+ ->whenCmd(Refund({reason: "lost-in-transit"}))
88
+ ->thenError(OrderNotFound)
89
+ )
90
+
91
+ test("Refund on placed order returns OrderNotCancelled", () =>
92
+ givenEvents([Placed({customerId: "cust-1", productIds: ["prod-1"]})])
93
+ ->whenCmd(Refund({reason: "customer-changed-mind"}))
94
+ ->thenError(OrderNotCancelled)
95
+ )
96
+
97
+ test("Refund on shipped order returns OrderNotCancelled", () =>
98
+ givenEvents([Placed({customerId: "cust-1", productIds: ["prod-1"]}), Shipped])
99
+ ->whenCmd(Refund({reason: "delivered-damaged"}))
100
+ ->thenError(OrderNotCancelled)
101
+ )
102
+
103
+ test("Refund on cancelled order produces Refunded", () =>
104
+ givenEvents([
105
+ Placed({customerId: "cust-1", productIds: ["prod-1"]}),
106
+ Cancelled({productIds: ["prod-1"]}),
107
+ ])
108
+ ->whenCmd(Refund({reason: "customer-changed-mind"}))
109
+ ->thenEvent(Refunded({reason: "customer-changed-mind"}))
110
+ )
111
+
112
+ test("Refund on already-refunded order produces no events (idempotent)", () =>
113
+ givenEvents([
114
+ Placed({customerId: "cust-1", productIds: ["prod-1"]}),
115
+ Cancelled({productIds: ["prod-1"]}),
116
+ Refunded({reason: "customer-changed-mind"}),
117
+ ])
118
+ ->whenCmd(Refund({reason: "customer-changed-mind"}))
119
+ ->thenNoEvent
120
+ )
121
+ })
Binary file
@@ -0,0 +1,15 @@
1
+ // Order event mappings — maps Order events to Order commands.
2
+ // When an order is placed, automatically issue a Ship command.
3
+ @@reventless.mappings
4
+
5
+ module AutoShipMapping = {
6
+ module Source = Order
7
+
8
+ let map = (orderId, event, _queryEngine) =>
9
+ switch event {
10
+ | Order.Placed(_) => [Publish(orderId, Order.Ship)]
11
+ | _ => []
12
+ }
13
+ }
14
+
15
+ let mappings: array<module(Mapping)> = [module(AutoShipMapping)]
Binary file
Binary file
Binary file
@@ -0,0 +1,31 @@
1
+ randjbuildsystem
2
+ AvailableProducts
3
+ AvailableProducts_GWT
4
+ AvailableProducts_Projections
5
+ CatalogProduct
6
+ CatalogProduct_Behavior
7
+ CatalogProduct_GWT
8
+ Customer
9
+ Customer_Behavior
10
+ Customer_GWT
11
+ Customers
12
+ Customers_GWT
13
+ Customers_Projections
14
+ EmailService
15
+ EmailService_Mock
16
+ Order
17
+ OrderMappings_GWT
18
+ OrderNotifications
19
+ Order_Behavior
20
+ Order_EmailNotification
21
+ Order_EmailNotification_GWT
22
+ Order_GWT
23
+ Order_Mappings
24
+ Orders
25
+ Orders_ExtensionPointMapping
26
+ Orders_ExtensionPointMapping_GWT
27
+ Orders_GWT
28
+ Orders_Projections
29
+ Plugin
30
+ Products_Extension
31
+ Products_Extension_GWT
Binary file
@@ -0,0 +1,19 @@
1
+ // Orders read model specification.
2
+ // Query-side state for customer orders.
3
+
4
+ @@reventless.spec
5
+
6
+ @schema
7
+ type status =
8
+ | Placed
9
+ | Shipped
10
+ | Cancelled
11
+ | Refunded
12
+
13
+ @schema
14
+ type state = {
15
+ customerId: string,
16
+ productIds: array<string>,
17
+ @status status: status,
18
+ }
19
+
@@ -0,0 +1,28 @@
1
+ // Maps internal Order aggregate events to the stable OrdersExtensionPoint public API.
2
+ // Decomposes a batch OrderPlaced (multiple productIds) into one ItemOrdered per product.
3
+ @@reventless.spec
4
+
5
+ module ExtensionPoint = OrderingSpec.Orders_ExtensionPoint
6
+ module Delegate = Order
7
+
8
+ let mapIncomingCommand = (_id, _command, _meta) => []
9
+
10
+ let mapOutgoingEvent = Some((_id, event, _meta, _queryEngine) =>
11
+ switch event {
12
+ | Order.Placed({customerId, productIds}) =>
13
+ productIds->Array.map(productId =>
14
+ PublishEvent(
15
+ productId,
16
+ OrderingSpec.Orders_ExtensionPoint.ItemOrdered({productId, orderId: _id, customerId}),
17
+ )
18
+ )
19
+ | Order.Cancelled({productIds}) =>
20
+ productIds->Array.map(productId =>
21
+ PublishEvent(
22
+ productId,
23
+ OrderingSpec.Orders_ExtensionPoint.ItemOrderCancelled({productId, orderId: _id}),
24
+ )
25
+ )
26
+ | _ => []
27
+ }
28
+ )
@@ -0,0 +1,33 @@
1
+ // Boundary GWT for the Orders extension point: batch order events decompose
2
+ // into one public per-product event each (one-to-many fan-out).
3
+ @@reventless.gwt
4
+
5
+ describe("Orders ExtensionPoint mapping — per-product fan-out", () => {
6
+ test("Placed fans out to one ItemOrdered per product", () =>
7
+ whenDelegateEvent(
8
+ Delegate.Placed({customerId: "c1", productIds: ["p1", "p2"]}),
9
+ )->thenPublishesEvents([
10
+ ("p1", ExtensionPoint.ItemOrdered({productId: "p1", orderId: "gwt-id", customerId: "c1"})),
11
+ ("p2", ExtensionPoint.ItemOrdered({productId: "p2", orderId: "gwt-id", customerId: "c1"})),
12
+ ])
13
+ )
14
+
15
+ test("Cancelled fans out to one ItemOrderCancelled per product", () =>
16
+ whenDelegateEvent(
17
+ Delegate.Cancelled({productIds: ["p1", "p2"]}),
18
+ )->thenPublishesEvents([
19
+ ("p1", ExtensionPoint.ItemOrderCancelled({productId: "p1", orderId: "gwt-id"})),
20
+ ("p2", ExtensionPoint.ItemOrderCancelled({productId: "p2", orderId: "gwt-id"})),
21
+ ])
22
+ )
23
+
24
+ test("Shipped publishes nothing", () =>
25
+ whenDelegateEvent(Delegate.Shipped)->thenPublishesNothing
26
+ )
27
+
28
+ test("Refunded publishes nothing", () =>
29
+ whenDelegateEvent(
30
+ Delegate.Refunded({reason: "customer-changed-mind"}),
31
+ )->thenPublishesNothing
32
+ )
33
+ })
Binary file
@@ -0,0 +1,46 @@
1
+ @@reventless.gwt(Orders_Projections.OrderMapping)
2
+
3
+ describe("Orders ReadModel ← Order", () => {
4
+ test("Placed sets initial read model state", () =>
5
+ givenEvents([])
6
+ ->whenEvent(Order.Placed({customerId: "cust-1", productIds: ["prod-1", "prod-2"]}))
7
+ ->thenState({
8
+ Orders.customerId: "cust-1",
9
+ productIds: ["prod-1", "prod-2"],
10
+ status: Placed,
11
+ })
12
+ )
13
+
14
+ test("Shipped updates status", () =>
15
+ givenEvents([Order.Placed({customerId: "cust-1", productIds: ["prod-1"]})])
16
+ ->whenEvent(Order.Shipped)
17
+ ->thenState({
18
+ Orders.customerId: "cust-1",
19
+ productIds: ["prod-1"],
20
+ status: Shipped,
21
+ })
22
+ )
23
+
24
+ test("Cancelled updates status", () =>
25
+ givenEvents([Order.Placed({customerId: "cust-1", productIds: ["prod-1"]})])
26
+ ->whenEvent(Order.Cancelled({productIds: ["prod-1"]}))
27
+ ->thenState({
28
+ Orders.customerId: "cust-1",
29
+ productIds: ["prod-1"],
30
+ status: Cancelled,
31
+ })
32
+ )
33
+
34
+ test("Refunded updates status", () =>
35
+ givenEvents([
36
+ Order.Placed({customerId: "cust-1", productIds: ["prod-1"]}),
37
+ Order.Cancelled({productIds: ["prod-1"]}),
38
+ ])
39
+ ->whenEvent(Order.Refunded({reason: "customer-changed-mind"}))
40
+ ->thenState({
41
+ Orders.customerId: "cust-1",
42
+ productIds: ["prod-1"],
43
+ status: Refunded,
44
+ })
45
+ )
46
+ })
Binary file
@@ -0,0 +1,31 @@
1
+ // Order projection mappings.
2
+ // Maps Order aggregate events to Orders read model state changes.
3
+ @@reventless.mappings
4
+
5
+ module OrderMapping = Mapping.Make(
6
+ Order,
7
+ Orders,
8
+ {
9
+ open Order
10
+ let project = ({event, id, _}) =>
11
+ switch event {
12
+ | Placed({customerId, productIds}) =>
13
+ Set(
14
+ id,
15
+ {
16
+ Orders.customerId: customerId,
17
+ productIds,
18
+ status: (Placed: Orders.status),
19
+ },
20
+ )
21
+ | Shipped =>
22
+ Update(id, state => {...state, status: (Shipped: Orders.status)})
23
+ | Cancelled(_) =>
24
+ Update(id, state => {...state, status: (Cancelled: Orders.status)})
25
+ | Refunded(_) =>
26
+ Update(id, state => {...state, status: (Refunded: Orders.status)})
27
+ }
28
+ },
29
+ )
30
+
31
+ let mappings: array<module(Mapping)> = [module(OrderMapping)]
Binary file
@@ -0,0 +1,65 @@
1
+ // AUTO-GENERATED — do not edit. Run `npm run generate` to update.
2
+
3
+ @val external uiBundleUrl: option<string> = "process.env.ORDERING_UI_BUNDLE_URL"
4
+
5
+ module Make = (Platform: ReventlessInfra.Platform.T) => {
6
+ // Aggregates
7
+ module CatalogProductAggregate = Platform.Aggregate.Make(
8
+ CatalogProduct,
9
+ CatalogProduct_Behavior,
10
+ ReventlessInfra.NoEventMappings.Make(CatalogProduct),
11
+ )
12
+ module CustomerAggregate = Platform.Aggregate.Make(
13
+ Customer,
14
+ Customer_Behavior,
15
+ ReventlessInfra.NoEventMappings.Make(Customer),
16
+ )
17
+ module OrderAggregate = Platform.Aggregate.Make(
18
+ Order,
19
+ Order_Behavior,
20
+ Order_Mappings,
21
+ )
22
+
23
+ // ReadModels
24
+ module AvailableProductsReadModel = Platform.ReadModel.Make(AvailableProducts, AvailableProducts_Projections)
25
+ module CustomersReadModel = Platform.ReadModel.Make(Customers, Customers_Projections)
26
+ module OrdersReadModel = Platform.ReadModel.Make(Orders, Orders_Projections)
27
+
28
+ // Tasks
29
+ module OrderNotificationsTask = Platform.Task.Make(OrderNotifications)
30
+
31
+ // ExtensionPoints
32
+ module Orders_ExtensionPoint = Platform.ExtensionPoint.Make(Orders_ExtensionPointMapping)
33
+
34
+ // Extensions
35
+ module Products_Extension = Platform.Extension.Make(Products_Extension.Mapping)
36
+
37
+ let pluginStructure = Platform.Plugin.makePluginDefinition(
38
+ ~name="Ordering",
39
+ ~aggregates=[module(CatalogProductAggregate), module(CustomerAggregate), module(OrderAggregate)],
40
+ ~readModels=[module(AvailableProductsReadModel), module(CustomersReadModel), module(OrdersReadModel)],
41
+ ~extensions=[module(Products_Extension)],
42
+ ~extensionPoints=[module(Orders_ExtensionPointMapping)],
43
+ )
44
+
45
+ let make = () =>
46
+ Platform.Plugin.make(
47
+ ~name="Ordering",
48
+ ~heartbeatInterval=5,
49
+ ~extensionPoints=[module(Orders_ExtensionPoint)],
50
+ ~extensions=[module(Products_Extension)],
51
+ ~aggregates=[module(CatalogProductAggregate), module(CustomerAggregate), module(OrderAggregate)],
52
+ ~readModels=[module(AvailableProductsReadModel), module(CustomersReadModel), module(OrdersReadModel)],
53
+ ~tasks=[module(OrderNotificationsTask)],
54
+ ~pluginStructure=pluginStructure,
55
+ ~uiFragments=?uiBundleUrl->Option.map(url =>
56
+ Platform.Plugin.makeAutoUIManifest(
57
+ ~remoteEntryUrl=url,
58
+ ~name="Ordering",
59
+ ~pluginStructure,
60
+ ~readModelPositions=["platform-summary"],
61
+ ~aggregatePositions=["resource-detail"],
62
+ )
63
+ ),
64
+ )
65
+ }
Binary file
@@ -0,0 +1,23 @@
1
+ // Ordering's extension subscribing to Catalog's ProductsExtensionPoint.
2
+ // Routes ProductBecameAvailable / ProductPriceChanged events to CatalogProduct commands.
3
+
4
+ @@reventless.extension
5
+
6
+ module Mapping = {
7
+ module ExtensionPoint = CatalogSpec.Products_ExtensionPoint
8
+ module Delegate = CatalogProduct
9
+
10
+ open ExtensionPoint
11
+ open Delegate
12
+ let mapIncomingEvent = (_id, event, _meta, _pluginDef, _queryEngine) =>
13
+ switch event {
14
+ | ProductBecameAvailable({productId, name, price}) => [
15
+ PublishAggregateCommand(productId, Sync({name, price})),
16
+ ]
17
+ | ProductPriceChanged({productId, price}) => [
18
+ PublishAggregateCommand(productId, UpdatePrice({price: price})),
19
+ ]
20
+ }
21
+
22
+ let mapOutgoingEvent = None
23
+ }