@tailor-platform/erp-kit 0.2.1 → 0.2.2

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 (618) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +1 -23
  3. package/dist/cli.mjs +1613 -0
  4. package/package.json +14 -13
  5. package/schemas/app-compose/story.yml +12 -0
  6. package/schemas/module/command.yml +9 -0
  7. package/schemas/module/module.yml +4 -0
  8. package/schemas/module/query.yml +9 -0
  9. package/skills/erp-kit-app-1-requirements/SKILL.md +4 -4
  10. package/skills/erp-kit-app-2-requirements-review/SKILL.md +102 -0
  11. package/skills/erp-kit-app-2-requirements-review/references/best-practices-check.md +66 -0
  12. package/skills/erp-kit-app-2-requirements-review/references/boundary-consistency-check.md +69 -0
  13. package/skills/erp-kit-app-2-requirements-review/references/requirements-report-format.md +25 -0
  14. package/skills/erp-kit-app-3-plan/SKILL.md +157 -0
  15. package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +107 -0
  16. package/skills/erp-kit-app-3-plan/references/screen-extraction.md +74 -0
  17. package/skills/erp-kit-app-3-plan/references/story-extraction.md +86 -0
  18. package/skills/erp-kit-app-4-plan-review/SKILL.md +177 -0
  19. package/skills/erp-kit-app-4-plan-review/references/actor-flow-parity.md +73 -0
  20. package/skills/erp-kit-app-4-plan-review/references/business-flow-story-parity.md +86 -0
  21. package/skills/erp-kit-app-4-plan-review/references/orphan-detection.md +69 -0
  22. package/skills/erp-kit-app-4-plan-review/references/parity-report-format.md +52 -0
  23. package/skills/erp-kit-app-4-plan-review/references/story-resolver-parity.md +83 -0
  24. package/skills/erp-kit-app-4-plan-review/references/story-screen-parity.md +73 -0
  25. package/skills/{erp-kit-app-5-implementation → erp-kit-app-5-impl-backend}/SKILL.md +24 -68
  26. package/skills/erp-kit-app-5-impl-backend/references/app-config.md +38 -0
  27. package/skills/erp-kit-app-5-impl-backend/references/module-wiring.md +48 -0
  28. package/skills/erp-kit-app-5-impl-backend/references/resolver-patterns.md +68 -0
  29. package/skills/erp-kit-app-6-impl-frontend/SKILL.md +74 -0
  30. package/skills/{erp-kit-app-5-implementation/references/frontend.md → erp-kit-app-6-impl-frontend/references/pages.md} +8 -90
  31. package/skills/erp-kit-app-7-impl-review/SKILL.md +176 -0
  32. package/skills/erp-kit-app-7-impl-review/references/impl-parity-report-format.md +52 -0
  33. package/skills/erp-kit-app-7-impl-review/references/module-wiring-parity.md +84 -0
  34. package/skills/erp-kit-app-7-impl-review/references/resolver-doc-code-parity.md +86 -0
  35. package/skills/erp-kit-app-7-impl-review/references/screen-doc-code-parity.md +86 -0
  36. package/skills/erp-kit-module-1-requirements/SKILL.md +126 -0
  37. package/skills/erp-kit-module-1-requirements/references/boundary-analysis.md +51 -0
  38. package/skills/erp-kit-module-1-requirements/references/erp-research.md +57 -0
  39. package/skills/erp-kit-module-1-requirements/references/feature-doc.md +61 -0
  40. package/skills/erp-kit-module-2-requirements-review/SKILL.md +112 -0
  41. package/skills/erp-kit-module-2-requirements-review/references/best-practices-check.md +79 -0
  42. package/skills/erp-kit-module-2-requirements-review/references/boundary-consistency-check.md +70 -0
  43. package/skills/erp-kit-module-2-requirements-review/references/requirements-report-format.md +25 -0
  44. package/skills/erp-kit-module-3-plan/SKILL.md +107 -0
  45. package/skills/erp-kit-module-3-plan/references/command-extraction.md +87 -0
  46. package/skills/erp-kit-module-3-plan/references/model-extraction.md +72 -0
  47. package/skills/erp-kit-module-3-plan/references/query-extraction.md +59 -0
  48. package/skills/erp-kit-module-4-plan-review/SKILL.md +158 -0
  49. package/skills/erp-kit-module-4-plan-review/references/command-model-consistency.md +46 -0
  50. package/skills/erp-kit-module-4-plan-review/references/feature-command-parity.md +97 -0
  51. package/skills/erp-kit-module-4-plan-review/references/feature-model-parity.md +47 -0
  52. package/skills/erp-kit-module-4-plan-review/references/feature-query-parity.md +70 -0
  53. package/skills/erp-kit-module-4-plan-review/references/parity-report-format.md +52 -0
  54. package/skills/erp-kit-module-5-impl/SKILL.md +118 -0
  55. package/skills/erp-kit-module-5-impl/references/command-impl.md +68 -0
  56. package/skills/erp-kit-module-5-impl/references/exports.md +10 -0
  57. package/skills/erp-kit-module-5-impl/references/model-impl.md +45 -0
  58. package/skills/erp-kit-module-5-impl/references/query-impl.md +53 -0
  59. package/skills/erp-kit-module-6-impl-review/SKILL.md +187 -0
  60. package/skills/erp-kit-module-6-impl-review/references/command-doc-code-parity.md +92 -0
  61. package/skills/erp-kit-module-6-impl-review/references/command-doc-test-parity.md +93 -0
  62. package/skills/erp-kit-module-6-impl-review/references/error-implementation-parity.md +95 -0
  63. package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/errors.md +1 -1
  64. package/skills/erp-kit-module-6-impl-review/references/impl-parity-report-format.md +52 -0
  65. package/skills/erp-kit-module-6-impl-review/references/model-doc-code-parity.md +80 -0
  66. package/skills/erp-kit-module-shared/SKILL.md +1 -1
  67. package/skills/erp-kit-module-shared/references/commands.md +1 -1
  68. package/skills/erp-kit-module-shared/references/errors.md +12 -9
  69. package/skills/erp-kit-module-shared/references/queries.md +109 -36
  70. package/skills/erp-kit-module-shared/references/testing.md +10 -0
  71. package/skills/erp-kit-update/SKILL.md +2 -2
  72. package/src/app.ts +1 -1
  73. package/src/commands/check.ts +1 -1
  74. package/src/commands/index.ts +16 -5
  75. package/src/commands/init.test.ts +22 -69
  76. package/src/commands/init.ts +28 -115
  77. package/src/commands/lib/distribute.test.ts +126 -0
  78. package/src/commands/lib/distribute.ts +129 -0
  79. package/src/commands/parse-doc-test-cases.ts +55 -0
  80. package/src/commands/scaffold.test.ts +74 -33
  81. package/src/commands/scaffold.ts +54 -18
  82. package/src/commands/sync-check.test.ts +173 -0
  83. package/src/commands/sync-check.ts +103 -2
  84. package/src/commands/update.test.ts +87 -0
  85. package/src/commands/update.ts +41 -0
  86. package/src/generator/generate-code.test.ts +23 -12
  87. package/src/generator/generate-code.ts +22 -16
  88. package/src/integration.test.ts +1 -1
  89. package/src/module.ts +14 -97
  90. package/src/modules/item-management/README.md +8 -0
  91. package/src/modules/item-management/command/activateItem.generated.ts +1 -1
  92. package/src/modules/item-management/command/activateItem.test.ts +12 -18
  93. package/src/modules/item-management/command/activateItem.ts +9 -5
  94. package/src/modules/item-management/command/assignItemToTaxonomy.generated.ts +1 -1
  95. package/src/modules/item-management/command/assignItemToTaxonomy.test.ts +10 -24
  96. package/src/modules/item-management/command/assignItemToTaxonomy.ts +19 -16
  97. package/src/modules/item-management/command/createItem.generated.ts +1 -1
  98. package/src/modules/item-management/command/createItem.test.ts +11 -11
  99. package/src/modules/item-management/command/createItem.ts +16 -7
  100. package/src/modules/item-management/command/createTaxonomyNode.generated.ts +1 -1
  101. package/src/modules/item-management/command/createTaxonomyNode.test.ts +9 -9
  102. package/src/modules/item-management/command/createTaxonomyNode.ts +33 -14
  103. package/src/modules/item-management/command/deactivateItem.generated.ts +1 -1
  104. package/src/modules/item-management/command/deactivateItem.test.ts +12 -18
  105. package/src/modules/item-management/command/deactivateItem.ts +9 -5
  106. package/src/modules/item-management/command/deleteItem.generated.ts +1 -1
  107. package/src/modules/item-management/command/deleteItem.test.ts +10 -16
  108. package/src/modules/item-management/command/deleteItem.ts +9 -5
  109. package/src/modules/item-management/command/deleteTaxonomyNode.generated.ts +1 -1
  110. package/src/modules/item-management/command/deleteTaxonomyNode.test.ts +10 -16
  111. package/src/modules/item-management/command/deleteTaxonomyNode.ts +22 -12
  112. package/src/modules/item-management/command/moveTaxonomyNode.generated.ts +1 -1
  113. package/src/modules/item-management/command/moveTaxonomyNode.test.ts +10 -10
  114. package/src/modules/item-management/command/moveTaxonomyNode.ts +63 -19
  115. package/src/modules/item-management/command/reactivateItem.generated.ts +1 -1
  116. package/src/modules/item-management/command/reactivateItem.test.ts +12 -18
  117. package/src/modules/item-management/command/reactivateItem.ts +9 -5
  118. package/src/modules/item-management/command/removeItemFromTaxonomy.generated.ts +1 -1
  119. package/src/modules/item-management/command/removeItemFromTaxonomy.test.ts +9 -16
  120. package/src/modules/item-management/command/removeItemFromTaxonomy.ts +11 -6
  121. package/src/modules/item-management/command/updateItem.generated.ts +1 -1
  122. package/src/modules/item-management/command/updateItem.test.ts +16 -16
  123. package/src/modules/item-management/command/updateItem.ts +11 -6
  124. package/src/modules/item-management/command/updateTaxonomyNode.generated.ts +1 -1
  125. package/src/modules/item-management/command/updateTaxonomyNode.test.ts +14 -20
  126. package/src/modules/item-management/command/updateTaxonomyNode.ts +9 -6
  127. package/src/modules/item-management/docs/commands/ActivateItem.md +8 -0
  128. package/src/modules/item-management/docs/commands/AssignItemToTaxonomy.md +7 -0
  129. package/src/modules/item-management/docs/commands/CreateItem.md +10 -0
  130. package/src/modules/item-management/docs/commands/CreateTaxonomyNode.md +9 -0
  131. package/src/modules/item-management/docs/commands/DeactivateItem.md +8 -0
  132. package/src/modules/item-management/docs/commands/DeleteItem.md +7 -0
  133. package/src/modules/item-management/docs/commands/DeleteTaxonomyNode.md +7 -0
  134. package/src/modules/item-management/docs/commands/MoveTaxonomyNode.md +10 -0
  135. package/src/modules/item-management/docs/commands/ReactivateItem.md +8 -0
  136. package/src/modules/item-management/docs/commands/RemoveItemFromTaxonomy.md +5 -0
  137. package/src/modules/item-management/docs/commands/UpdateItem.md +15 -0
  138. package/src/modules/item-management/docs/commands/UpdateTaxonomyNode.md +9 -0
  139. package/src/modules/item-management/docs/queries/CalculateNodeDepth.md +8 -0
  140. package/src/modules/item-management/docs/queries/CalculateSubtreeDepth.md +7 -0
  141. package/src/modules/item-management/docs/queries/DetectCircularReference.md +9 -0
  142. package/src/modules/item-management/docs/queries/GetItem.md +9 -0
  143. package/src/modules/item-management/docs/queries/GetItemTaxonomyAssignment.md +5 -0
  144. package/src/modules/item-management/docs/queries/GetTaxonomyNode.md +7 -0
  145. package/src/modules/item-management/docs/queries/GetTaxonomyNodeAssignments.md +5 -0
  146. package/src/modules/item-management/docs/queries/GetTaxonomyNodeChildren.md +6 -0
  147. package/src/modules/item-management/index.ts +0 -51
  148. package/src/modules/item-management/lib/errors.generated.ts +24 -24
  149. package/src/modules/item-management/lib/permissions.generated.ts +1 -1
  150. package/src/modules/item-management/lib/types.ts +1 -1
  151. package/src/modules/item-management/module.ts +1 -1
  152. package/src/modules/item-management/query/calculateNodeDepth.generated.ts +1 -1
  153. package/src/modules/item-management/query/calculateNodeDepth.test.ts +21 -6
  154. package/src/modules/item-management/query/calculateNodeDepth.ts +2 -2
  155. package/src/modules/item-management/query/calculateSubtreeDepth.generated.ts +1 -1
  156. package/src/modules/item-management/query/calculateSubtreeDepth.test.ts +17 -5
  157. package/src/modules/item-management/query/calculateSubtreeDepth.ts +2 -2
  158. package/src/modules/item-management/query/detectCircularReference.generated.ts +1 -1
  159. package/src/modules/item-management/query/detectCircularReference.test.ts +25 -7
  160. package/src/modules/item-management/query/detectCircularReference.ts +4 -4
  161. package/src/modules/item-management/query/getItem.generated.ts +1 -1
  162. package/src/modules/item-management/query/getItem.test.ts +25 -7
  163. package/src/modules/item-management/query/getItem.ts +2 -2
  164. package/src/modules/item-management/query/getItemTaxonomyAssignment.generated.ts +1 -1
  165. package/src/modules/item-management/query/getItemTaxonomyAssignment.test.ts +9 -3
  166. package/src/modules/item-management/query/getItemTaxonomyAssignment.ts +2 -2
  167. package/src/modules/item-management/query/getTaxonomyNode.generated.ts +1 -1
  168. package/src/modules/item-management/query/getTaxonomyNode.test.ts +17 -5
  169. package/src/modules/item-management/query/getTaxonomyNode.ts +2 -2
  170. package/src/modules/item-management/query/getTaxonomyNodeAssignments.generated.ts +1 -1
  171. package/src/modules/item-management/query/getTaxonomyNodeAssignments.test.ts +9 -3
  172. package/src/modules/item-management/query/getTaxonomyNodeAssignments.ts +2 -2
  173. package/src/modules/item-management/query/getTaxonomyNodeChildren.generated.ts +1 -1
  174. package/src/modules/item-management/query/getTaxonomyNodeChildren.test.ts +13 -4
  175. package/src/modules/item-management/query/getTaxonomyNodeChildren.ts +2 -2
  176. package/src/modules/item-management/tailor.config.ts +6 -4
  177. package/src/modules/item-management/tailor.d.ts +13 -0
  178. package/src/modules/primitives/README.md +8 -0
  179. package/src/modules/primitives/command/activateCategory.generated.ts +1 -1
  180. package/src/modules/primitives/command/activateCategory.test.ts +8 -18
  181. package/src/modules/primitives/command/activateCategory.ts +9 -5
  182. package/src/modules/primitives/command/activateCurrency.generated.ts +1 -1
  183. package/src/modules/primitives/command/activateCurrency.test.ts +8 -18
  184. package/src/modules/primitives/command/activateCurrency.ts +9 -5
  185. package/src/modules/primitives/command/activateUnit.generated.ts +1 -1
  186. package/src/modules/primitives/command/activateUnit.test.ts +8 -15
  187. package/src/modules/primitives/command/activateUnit.ts +9 -5
  188. package/src/modules/primitives/command/createCategory.generated.ts +1 -1
  189. package/src/modules/primitives/command/createCategory.test.ts +29 -44
  190. package/src/modules/primitives/command/createCategory.ts +9 -5
  191. package/src/modules/primitives/command/createCurrency.generated.ts +1 -1
  192. package/src/modules/primitives/command/createCurrency.test.ts +53 -78
  193. package/src/modules/primitives/command/createCurrency.ts +9 -6
  194. package/src/modules/primitives/command/createExchangeRate.generated.ts +1 -1
  195. package/src/modules/primitives/command/createExchangeRate.test.ts +59 -97
  196. package/src/modules/primitives/command/createExchangeRate.ts +13 -7
  197. package/src/modules/primitives/command/createUnit.generated.ts +1 -1
  198. package/src/modules/primitives/command/createUnit.test.ts +59 -90
  199. package/src/modules/primitives/command/createUnit.ts +9 -6
  200. package/src/modules/primitives/command/deactivateCategory.generated.ts +1 -1
  201. package/src/modules/primitives/command/deactivateCategory.test.ts +15 -33
  202. package/src/modules/primitives/command/deactivateCategory.ts +9 -5
  203. package/src/modules/primitives/command/deactivateCurrency.generated.ts +1 -1
  204. package/src/modules/primitives/command/deactivateCurrency.test.ts +12 -26
  205. package/src/modules/primitives/command/deactivateCurrency.ts +9 -5
  206. package/src/modules/primitives/command/deactivateUnit.generated.ts +1 -1
  207. package/src/modules/primitives/command/deactivateUnit.test.ts +15 -30
  208. package/src/modules/primitives/command/deactivateUnit.ts +14 -7
  209. package/src/modules/primitives/command/setBaseCurrency.generated.ts +1 -1
  210. package/src/modules/primitives/command/setBaseCurrency.test.ts +18 -40
  211. package/src/modules/primitives/command/setBaseCurrency.ts +15 -7
  212. package/src/modules/primitives/command/setReferenceUnit.generated.ts +1 -1
  213. package/src/modules/primitives/command/setReferenceUnit.test.ts +22 -44
  214. package/src/modules/primitives/command/setReferenceUnit.ts +21 -9
  215. package/src/modules/primitives/docs/commands/ActivateCategory.md +6 -0
  216. package/src/modules/primitives/docs/commands/ActivateCurrency.md +6 -0
  217. package/src/modules/primitives/docs/commands/ActivateUnit.md +6 -0
  218. package/src/modules/primitives/docs/commands/CreateCategory.md +6 -0
  219. package/src/modules/primitives/docs/commands/CreateCurrency.md +10 -0
  220. package/src/modules/primitives/docs/commands/CreateExchangeRate.md +11 -0
  221. package/src/modules/primitives/docs/commands/CreateUnit.md +10 -0
  222. package/src/modules/primitives/docs/commands/DeactivateCategory.md +7 -0
  223. package/src/modules/primitives/docs/commands/DeactivateCurrency.md +7 -0
  224. package/src/modules/primitives/docs/commands/DeactivateUnit.md +7 -0
  225. package/src/modules/primitives/docs/commands/SetBaseCurrency.md +7 -0
  226. package/src/modules/primitives/docs/commands/SetReferenceUnit.md +7 -0
  227. package/src/modules/primitives/docs/queries/ConvertAmount.md +14 -0
  228. package/src/modules/primitives/docs/queries/ConvertQuantity.md +13 -0
  229. package/src/modules/primitives/docs/queries/GetBaseCurrency.md +5 -0
  230. package/src/modules/primitives/docs/queries/GetCurrency.md +7 -0
  231. package/src/modules/primitives/docs/queries/GetUnit.md +7 -0
  232. package/src/modules/primitives/docs/queries/GetUoMCategory.md +7 -0
  233. package/src/modules/primitives/docs/queries/ListUnitsByCategory.md +15 -5
  234. package/src/modules/primitives/index.ts +0 -49
  235. package/src/modules/primitives/lib/errors.generated.ts +23 -23
  236. package/src/modules/primitives/lib/permissions.generated.ts +1 -1
  237. package/src/modules/primitives/lib/types.ts +1 -1
  238. package/src/modules/primitives/module.ts +1 -1
  239. package/src/modules/primitives/query/convertAmount.generated.ts +1 -1
  240. package/src/modules/primitives/query/convertAmount.test.ts +110 -77
  241. package/src/modules/primitives/query/convertAmount.ts +61 -47
  242. package/src/modules/primitives/query/convertQuantity.generated.ts +1 -1
  243. package/src/modules/primitives/query/convertQuantity.test.ts +99 -69
  244. package/src/modules/primitives/query/convertQuantity.ts +12 -10
  245. package/src/modules/primitives/query/getBaseCurrency.generated.ts +1 -1
  246. package/src/modules/primitives/query/getBaseCurrency.test.ts +10 -4
  247. package/src/modules/primitives/query/getBaseCurrency.ts +2 -2
  248. package/src/modules/primitives/query/getCurrency.generated.ts +1 -1
  249. package/src/modules/primitives/query/getCurrency.test.ts +17 -5
  250. package/src/modules/primitives/query/getCurrency.ts +2 -2
  251. package/src/modules/primitives/query/getUnit.generated.ts +1 -1
  252. package/src/modules/primitives/query/getUnit.test.ts +17 -5
  253. package/src/modules/primitives/query/getUnit.ts +2 -2
  254. package/src/modules/primitives/query/getUoMCategory.generated.ts +1 -1
  255. package/src/modules/primitives/query/getUoMCategory.test.ts +17 -5
  256. package/src/modules/primitives/query/getUoMCategory.ts +2 -2
  257. package/src/modules/primitives/query/listUnitsByCategory.generated.ts +1 -1
  258. package/src/modules/primitives/query/listUnitsByCategory.test.ts +80 -0
  259. package/src/modules/primitives/query/listUnitsByCategory.ts +19 -3
  260. package/src/modules/primitives/tailor.config.ts +6 -4
  261. package/src/modules/primitives/tailor.d.ts +13 -0
  262. package/src/modules/product-management/README.md +52 -0
  263. package/src/modules/product-management/command/activateProduct.generated.ts +6 -0
  264. package/src/modules/product-management/command/activateProduct.test.ts +40 -0
  265. package/src/modules/product-management/command/activateProduct.ts +42 -0
  266. package/src/modules/product-management/command/assignProductToCategory.generated.ts +6 -0
  267. package/src/modules/product-management/command/assignProductToCategory.test.ts +90 -0
  268. package/src/modules/product-management/command/assignProductToCategory.ts +62 -0
  269. package/src/modules/product-management/command/createProduct.generated.ts +6 -0
  270. package/src/modules/product-management/command/createProduct.test.ts +149 -0
  271. package/src/modules/product-management/command/createProduct.ts +73 -0
  272. package/src/modules/product-management/command/createProductAttribute.generated.ts +6 -0
  273. package/src/modules/product-management/command/createProductAttribute.test.ts +70 -0
  274. package/src/modules/product-management/command/createProductAttribute.ts +53 -0
  275. package/src/modules/product-management/command/createProductAttributeValue.generated.ts +6 -0
  276. package/src/modules/product-management/command/createProductAttributeValue.test.ts +68 -0
  277. package/src/modules/product-management/command/createProductAttributeValue.ts +63 -0
  278. package/src/modules/product-management/command/createProductCategory.generated.ts +6 -0
  279. package/src/modules/product-management/command/createProductCategory.test.ts +135 -0
  280. package/src/modules/product-management/command/createProductCategory.ts +82 -0
  281. package/src/modules/product-management/command/deactivateProduct.generated.ts +6 -0
  282. package/src/modules/product-management/command/deactivateProduct.test.ts +40 -0
  283. package/src/modules/product-management/command/deactivateProduct.ts +42 -0
  284. package/src/modules/product-management/command/deleteProduct.generated.ts +6 -0
  285. package/src/modules/product-management/command/deleteProduct.test.ts +42 -0
  286. package/src/modules/product-management/command/deleteProduct.ts +42 -0
  287. package/src/modules/product-management/command/deleteProductAttribute.generated.ts +6 -0
  288. package/src/modules/product-management/command/deleteProductAttribute.test.ts +49 -0
  289. package/src/modules/product-management/command/deleteProductAttribute.ts +45 -0
  290. package/src/modules/product-management/command/deleteProductAttributeValue.generated.ts +6 -0
  291. package/src/modules/product-management/command/deleteProductAttributeValue.test.ts +71 -0
  292. package/src/modules/product-management/command/deleteProductAttributeValue.ts +68 -0
  293. package/src/modules/product-management/command/deleteProductCategory.generated.ts +6 -0
  294. package/src/modules/product-management/command/deleteProductCategory.test.ts +74 -0
  295. package/src/modules/product-management/command/deleteProductCategory.ts +53 -0
  296. package/src/modules/product-management/command/generateVariants.generated.ts +6 -0
  297. package/src/modules/product-management/command/generateVariants.test.ts +365 -0
  298. package/src/modules/product-management/command/generateVariants.ts +168 -0
  299. package/src/modules/product-management/command/moveProductCategory.generated.ts +6 -0
  300. package/src/modules/product-management/command/moveProductCategory.test.ts +170 -0
  301. package/src/modules/product-management/command/moveProductCategory.ts +124 -0
  302. package/src/modules/product-management/command/reactivateProduct.generated.ts +6 -0
  303. package/src/modules/product-management/command/reactivateProduct.test.ts +40 -0
  304. package/src/modules/product-management/command/reactivateProduct.ts +42 -0
  305. package/src/modules/product-management/command/removeProductFromCategory.generated.ts +6 -0
  306. package/src/modules/product-management/command/removeProductFromCategory.test.ts +42 -0
  307. package/src/modules/product-management/command/removeProductFromCategory.ts +32 -0
  308. package/src/modules/product-management/command/setProductAttributeAssignment.generated.ts +6 -0
  309. package/src/modules/product-management/command/setProductAttributeAssignment.test.ts +206 -0
  310. package/src/modules/product-management/command/setProductAttributeAssignment.ts +102 -0
  311. package/src/modules/product-management/command/updateProduct.generated.ts +6 -0
  312. package/src/modules/product-management/command/updateProduct.test.ts +168 -0
  313. package/src/modules/product-management/command/updateProduct.ts +95 -0
  314. package/src/modules/product-management/command/updateProductAttribute.generated.ts +6 -0
  315. package/src/modules/product-management/command/updateProductAttribute.test.ts +101 -0
  316. package/src/modules/product-management/command/updateProductAttribute.ts +68 -0
  317. package/src/modules/product-management/command/updateProductAttributeValue.generated.ts +6 -0
  318. package/src/modules/product-management/command/updateProductAttributeValue.test.ts +80 -0
  319. package/src/modules/product-management/command/updateProductAttributeValue.ts +58 -0
  320. package/src/modules/product-management/command/updateProductCategory.generated.ts +6 -0
  321. package/src/modules/product-management/command/updateProductCategory.test.ts +80 -0
  322. package/src/modules/product-management/command/updateProductCategory.ts +66 -0
  323. package/src/modules/product-management/db/product.ts +47 -0
  324. package/src/modules/product-management/db/productAttribute.ts +26 -0
  325. package/src/modules/product-management/db/productAttributeAssignment.ts +58 -0
  326. package/src/modules/product-management/db/productAttributeValue.ts +39 -0
  327. package/src/modules/product-management/db/productCategory.ts +34 -0
  328. package/src/modules/product-management/db/productCategoryAssignment.ts +49 -0
  329. package/src/modules/product-management/db/productVariant.ts +52 -0
  330. package/src/modules/product-management/docs/commands/ActivateProduct.md +39 -0
  331. package/src/modules/product-management/docs/commands/AssignProductToCategory.md +43 -0
  332. package/src/modules/product-management/docs/commands/CreateProduct.md +48 -0
  333. package/src/modules/product-management/docs/commands/CreateProductAttribute.md +39 -0
  334. package/src/modules/product-management/docs/commands/CreateProductAttributeValue.md +42 -0
  335. package/src/modules/product-management/docs/commands/CreateProductCategory.md +54 -0
  336. package/src/modules/product-management/docs/commands/DeactivateProduct.md +39 -0
  337. package/src/modules/product-management/docs/commands/DeleteProduct.md +42 -0
  338. package/src/modules/product-management/docs/commands/DeleteProductAttribute.md +39 -0
  339. package/src/modules/product-management/docs/commands/DeleteProductAttributeValue.md +42 -0
  340. package/src/modules/product-management/docs/commands/DeleteProductCategory.md +43 -0
  341. package/src/modules/product-management/docs/commands/GenerateVariants.md +68 -0
  342. package/src/modules/product-management/docs/commands/MoveProductCategory.md +54 -0
  343. package/src/modules/product-management/docs/commands/ReactivateProduct.md +38 -0
  344. package/src/modules/product-management/docs/commands/RemoveProductFromCategory.md +34 -0
  345. package/src/modules/product-management/docs/commands/SetProductAttributeAssignment.md +62 -0
  346. package/src/modules/product-management/docs/commands/UpdateProduct.md +61 -0
  347. package/src/modules/product-management/docs/commands/UpdateProductAttribute.md +46 -0
  348. package/src/modules/product-management/docs/commands/UpdateProductAttributeValue.md +47 -0
  349. package/src/modules/product-management/docs/commands/UpdateProductCategory.md +46 -0
  350. package/src/modules/product-management/docs/features/attribute-management.md +48 -0
  351. package/src/modules/product-management/docs/features/product-category.md +71 -0
  352. package/src/modules/product-management/docs/features/product-lifecycle.md +66 -0
  353. package/src/modules/product-management/docs/features/variant-generation.md +77 -0
  354. package/src/modules/product-management/docs/models/Product.md +58 -0
  355. package/src/modules/product-management/docs/models/ProductAttribute.md +37 -0
  356. package/src/modules/product-management/docs/models/ProductAttributeAssignment.md +41 -0
  357. package/src/modules/product-management/docs/models/ProductAttributeValue.md +40 -0
  358. package/src/modules/product-management/docs/models/ProductCategory.md +46 -0
  359. package/src/modules/product-management/docs/models/ProductCategoryAssignment.md +37 -0
  360. package/src/modules/product-management/docs/models/ProductVariant.md +41 -0
  361. package/src/modules/product-management/docs/queries/CalculateCategoryDepth.md +47 -0
  362. package/src/modules/product-management/docs/queries/DetectCategoryCircularReference.md +51 -0
  363. package/src/modules/product-management/docs/queries/GetProduct.md +42 -0
  364. package/src/modules/product-management/docs/queries/GetProductAttribute.md +42 -0
  365. package/src/modules/product-management/docs/queries/GetProductAttributeAssignment.md +34 -0
  366. package/src/modules/product-management/docs/queries/GetProductAttributeValue.md +40 -0
  367. package/src/modules/product-management/docs/queries/GetProductCategory.md +42 -0
  368. package/src/modules/product-management/docs/queries/GetProductCategoryAssignment.md +34 -0
  369. package/src/modules/product-management/docs/queries/GetProductVariant.md +41 -0
  370. package/src/modules/product-management/docs/queries/ListAttributeAssignmentsByAttribute.md +34 -0
  371. package/src/modules/product-management/docs/queries/ListCategoryAssignmentsByProduct.md +35 -0
  372. package/src/modules/product-management/docs/queries/ListProductAttributeAssignments.md +34 -0
  373. package/src/modules/product-management/docs/queries/ListProductAttributeValues.md +36 -0
  374. package/src/modules/product-management/docs/queries/ListProductCategoryAssignments.md +34 -0
  375. package/src/modules/product-management/docs/queries/ListProductCategoryChildren.md +34 -0
  376. package/src/modules/product-management/docs/queries/ListProductVariants.md +34 -0
  377. package/src/modules/product-management/generated/enums.ts +9 -0
  378. package/src/modules/product-management/generated/kysely-tailordb.ts +100 -0
  379. package/src/modules/product-management/index.ts +2 -0
  380. package/src/modules/product-management/lib/_db_deps.ts +17 -0
  381. package/src/modules/product-management/lib/errors.generated.ts +152 -0
  382. package/src/modules/product-management/lib/permissions.generated.ts +25 -0
  383. package/src/modules/product-management/lib/types.ts +51 -0
  384. package/src/modules/product-management/module.ts +201 -0
  385. package/src/modules/product-management/query/calculateCategoryDepth.generated.ts +5 -0
  386. package/src/modules/product-management/query/calculateCategoryDepth.test.ts +72 -0
  387. package/src/modules/product-management/query/calculateCategoryDepth.ts +37 -0
  388. package/src/modules/product-management/query/detectCategoryCircularReference.generated.ts +5 -0
  389. package/src/modules/product-management/query/detectCategoryCircularReference.test.ts +72 -0
  390. package/src/modules/product-management/query/detectCategoryCircularReference.ts +44 -0
  391. package/src/modules/product-management/query/getProduct.generated.ts +5 -0
  392. package/src/modules/product-management/query/getProduct.test.ts +59 -0
  393. package/src/modules/product-management/query/getProduct.ts +18 -0
  394. package/src/modules/product-management/query/getProductAttribute.generated.ts +5 -0
  395. package/src/modules/product-management/query/getProductAttribute.test.ts +59 -0
  396. package/src/modules/product-management/query/getProductAttribute.ts +18 -0
  397. package/src/modules/product-management/query/getProductAttributeAssignment.generated.ts +5 -0
  398. package/src/modules/product-management/query/getProductAttributeAssignment.test.ts +37 -0
  399. package/src/modules/product-management/query/getProductAttributeAssignment.ts +18 -0
  400. package/src/modules/product-management/query/getProductAttributeValue.generated.ts +5 -0
  401. package/src/modules/product-management/query/getProductAttributeValue.test.ts +31 -0
  402. package/src/modules/product-management/query/getProductAttributeValue.ts +16 -0
  403. package/src/modules/product-management/query/getProductCategory.generated.ts +5 -0
  404. package/src/modules/product-management/query/getProductCategory.test.ts +59 -0
  405. package/src/modules/product-management/query/getProductCategory.ts +18 -0
  406. package/src/modules/product-management/query/getProductCategoryAssignment.generated.ts +5 -0
  407. package/src/modules/product-management/query/getProductCategoryAssignment.test.ts +37 -0
  408. package/src/modules/product-management/query/getProductCategoryAssignment.ts +18 -0
  409. package/src/modules/product-management/query/getProductVariant.generated.ts +5 -0
  410. package/src/modules/product-management/query/getProductVariant.test.ts +43 -0
  411. package/src/modules/product-management/query/getProductVariant.ts +20 -0
  412. package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.generated.ts +5 -0
  413. package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.test.ts +31 -0
  414. package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.ts +16 -0
  415. package/src/modules/product-management/query/listCategoryAssignmentsByProduct.generated.ts +5 -0
  416. package/src/modules/product-management/query/listCategoryAssignmentsByProduct.test.ts +31 -0
  417. package/src/modules/product-management/query/listCategoryAssignmentsByProduct.ts +16 -0
  418. package/src/modules/product-management/query/listProductAttributeAssignments.generated.ts +5 -0
  419. package/src/modules/product-management/query/listProductAttributeAssignments.test.ts +31 -0
  420. package/src/modules/product-management/query/listProductAttributeAssignments.ts +16 -0
  421. package/src/modules/product-management/query/listProductAttributeValues.generated.ts +5 -0
  422. package/src/modules/product-management/query/listProductAttributeValues.test.ts +31 -0
  423. package/src/modules/product-management/query/listProductAttributeValues.ts +17 -0
  424. package/src/modules/product-management/query/listProductCategoryAssignments.generated.ts +5 -0
  425. package/src/modules/product-management/query/listProductCategoryAssignments.test.ts +31 -0
  426. package/src/modules/product-management/query/listProductCategoryAssignments.ts +16 -0
  427. package/src/modules/product-management/query/listProductCategoryChildren.generated.ts +5 -0
  428. package/src/modules/product-management/query/listProductCategoryChildren.test.ts +31 -0
  429. package/src/modules/product-management/query/listProductCategoryChildren.ts +16 -0
  430. package/src/modules/product-management/query/listProductVariants.generated.ts +5 -0
  431. package/src/modules/product-management/query/listProductVariants.test.ts +31 -0
  432. package/src/modules/product-management/query/listProductVariants.ts +16 -0
  433. package/src/modules/product-management/tailor.config.ts +13 -0
  434. package/src/modules/product-management/tailor.d.ts +13 -0
  435. package/src/modules/product-management/testing/fixtures.ts +151 -0
  436. package/src/modules/user-management/README.md +9 -3
  437. package/src/modules/user-management/command/activateUser.generated.ts +1 -1
  438. package/src/modules/user-management/command/activateUser.test.ts +12 -65
  439. package/src/modules/user-management/command/activateUser.ts +5 -20
  440. package/src/modules/user-management/command/assignPermissionToRole.generated.ts +1 -1
  441. package/src/modules/user-management/command/assignPermissionToRole.test.ts +25 -60
  442. package/src/modules/user-management/command/assignPermissionToRole.ts +5 -24
  443. package/src/modules/user-management/command/assignRoleToUser.generated.ts +1 -1
  444. package/src/modules/user-management/command/assignRoleToUser.test.ts +35 -87
  445. package/src/modules/user-management/command/assignRoleToUser.ts +5 -24
  446. package/src/modules/user-management/command/createPermission.generated.ts +1 -1
  447. package/src/modules/user-management/command/createPermission.test.ts +23 -33
  448. package/src/modules/user-management/command/createPermission.ts +4 -5
  449. package/src/modules/user-management/command/createRole.generated.ts +1 -1
  450. package/src/modules/user-management/command/createRole.test.ts +17 -27
  451. package/src/modules/user-management/command/createRole.ts +4 -5
  452. package/src/modules/user-management/command/createUser.generated.ts +1 -1
  453. package/src/modules/user-management/command/createUser.test.ts +31 -118
  454. package/src/modules/user-management/command/createUser.ts +7 -25
  455. package/src/modules/user-management/command/deactivateUser.generated.ts +1 -1
  456. package/src/modules/user-management/command/deactivateUser.test.ts +12 -65
  457. package/src/modules/user-management/command/deactivateUser.ts +6 -21
  458. package/src/modules/user-management/command/reactivateUser.generated.ts +1 -1
  459. package/src/modules/user-management/command/reactivateUser.test.ts +13 -66
  460. package/src/modules/user-management/command/reactivateUser.ts +5 -20
  461. package/src/modules/user-management/command/revokePermissionFromRole.generated.ts +1 -1
  462. package/src/modules/user-management/command/revokePermissionFromRole.test.ts +24 -62
  463. package/src/modules/user-management/command/revokePermissionFromRole.ts +5 -24
  464. package/src/modules/user-management/command/revokeRoleFromUser.generated.ts +1 -1
  465. package/src/modules/user-management/command/revokeRoleFromUser.test.ts +24 -60
  466. package/src/modules/user-management/command/revokeRoleFromUser.ts +5 -24
  467. package/src/modules/user-management/docs/commands/ActivateUser.md +7 -0
  468. package/src/modules/user-management/docs/commands/AssignPermissionToRole.md +7 -0
  469. package/src/modules/user-management/docs/commands/AssignRoleToUser.md +9 -0
  470. package/src/modules/user-management/docs/commands/CreatePermission.md +12 -0
  471. package/src/modules/user-management/docs/commands/CreateRole.md +9 -0
  472. package/src/modules/user-management/docs/commands/CreateUser.md +11 -0
  473. package/src/modules/user-management/docs/commands/DeactivateUser.md +7 -0
  474. package/src/modules/user-management/docs/commands/ReactivateUser.md +7 -0
  475. package/src/modules/user-management/docs/commands/RevokePermissionFromRole.md +7 -0
  476. package/src/modules/user-management/docs/commands/RevokeRoleFromUser.md +7 -0
  477. package/src/modules/user-management/index.ts +0 -30
  478. package/src/modules/user-management/lib/errors.generated.ts +14 -14
  479. package/src/modules/user-management/lib/permissions.generated.ts +1 -2
  480. package/src/modules/user-management/lib/recomputeUserPermissions.ts +4 -3
  481. package/src/modules/user-management/lib/types.ts +1 -1
  482. package/src/modules/user-management/module.ts +2 -7
  483. package/src/modules/user-management/tailor.config.ts +6 -4
  484. package/src/modules/user-management/tailor.d.ts +13 -0
  485. package/src/modules/user-management/testing/fixtures.ts +1 -20
  486. package/src/schemas.ts +1 -1
  487. package/src/{modules/shared → shared}/defineCommand.test.ts +23 -7
  488. package/src/{modules/shared → shared}/defineCommand.ts +19 -10
  489. package/src/{modules/shared/internal.ts → shared/index.ts} +9 -1
  490. package/src/shared/pagination.test.ts +43 -0
  491. package/src/shared/pagination.ts +22 -0
  492. package/src/{modules/shared → shared}/types.ts +13 -0
  493. package/src/{modules/testing → testing}/index.ts +14 -7
  494. package/src/testing.ts +1 -1
  495. package/src/util.ts +8 -0
  496. package/templates/config/license.config.json +4 -0
  497. package/templates/scaffold/app/backend/.env.example +1 -0
  498. package/templates/scaffold/app/backend/__dot__gitignore +4 -0
  499. package/templates/scaffold/app/backend/eslint.config.js +32 -0
  500. package/templates/scaffold/app/backend/package.json +31 -0
  501. package/templates/scaffold/app/backend/seed/data/AuditEvent.jsonl +0 -0
  502. package/templates/scaffold/app/backend/seed/data/Permission.jsonl +0 -0
  503. package/templates/scaffold/app/backend/seed/data/Permission.schema.ts +20 -0
  504. package/templates/scaffold/app/backend/seed/data/Role.jsonl +0 -0
  505. package/templates/scaffold/app/backend/seed/data/Role.schema.ts +20 -0
  506. package/templates/scaffold/app/backend/seed/data/RolePermission.jsonl +0 -0
  507. package/templates/scaffold/app/backend/seed/data/RolePermission.schema.ts +24 -0
  508. package/templates/scaffold/app/backend/seed/data/User.jsonl +1 -0
  509. package/templates/scaffold/app/backend/seed/data/User.schema.ts +20 -0
  510. package/templates/scaffold/app/backend/seed/data/UserRole.jsonl +0 -0
  511. package/templates/scaffold/app/backend/seed/data/UserRole.schema.ts +24 -0
  512. package/templates/scaffold/app/backend/seed/data/_User.jsonl +1 -0
  513. package/templates/scaffold/app/backend/seed/data/_User.schema.ts +30 -0
  514. package/templates/scaffold/app/backend/seed/exec.mjs +659 -0
  515. package/templates/scaffold/app/backend/src/executors/permissionCreated.ts +3 -0
  516. package/templates/scaffold/app/backend/src/executors/permissionDeleted.ts +3 -0
  517. package/templates/scaffold/app/backend/src/generated/kysely-tailordb.ts +83 -0
  518. package/templates/scaffold/app/backend/src/modules.ts +9 -0
  519. package/templates/scaffold/app/backend/src/resolvers/createUser.ts +46 -0
  520. package/templates/scaffold/app/backend/tailor.config.ts +68 -0
  521. package/templates/scaffold/app/backend/tailor.d.ts +15 -0
  522. package/templates/scaffold/app/backend/tsconfig.json +19 -0
  523. package/templates/scaffold/app/docs/actors/.gitkeep +0 -0
  524. package/templates/scaffold/app/docs/business-flow/.gitkeep +0 -0
  525. package/templates/scaffold/app/docs/resolver/.gitkeep +0 -0
  526. package/templates/scaffold/app/docs/screen/.gitkeep +0 -0
  527. package/templates/scaffold/app/frontend/.env.example +2 -0
  528. package/templates/scaffold/app/frontend/__dot__gitignore +3 -0
  529. package/templates/scaffold/app/frontend/components.json +23 -0
  530. package/templates/scaffold/app/frontend/eslint.config.js +48 -0
  531. package/templates/scaffold/app/frontend/index.html +13 -0
  532. package/templates/scaffold/app/frontend/package.json +53 -0
  533. package/templates/scaffold/app/frontend/scripts/generate-graphql.mjs +6 -0
  534. package/templates/scaffold/app/frontend/src/App.tsx +58 -0
  535. package/templates/scaffold/app/frontend/src/components/composed/empty-state.tsx +26 -0
  536. package/templates/scaffold/app/frontend/src/components/composed/error-fallback.tsx +28 -0
  537. package/templates/scaffold/app/frontend/src/components/composed/loading.tsx +13 -0
  538. package/templates/scaffold/app/frontend/src/components/ui/badge.tsx +39 -0
  539. package/templates/scaffold/app/frontend/src/components/ui/button.tsx +60 -0
  540. package/templates/scaffold/app/frontend/src/components/ui/card.tsx +75 -0
  541. package/templates/scaffold/app/frontend/src/components/ui/form.tsx +152 -0
  542. package/templates/scaffold/app/frontend/src/components/ui/input.tsx +21 -0
  543. package/templates/scaffold/app/frontend/src/components/ui/label.tsx +21 -0
  544. package/templates/scaffold/app/frontend/src/components/ui/spinner.tsx +16 -0
  545. package/templates/scaffold/app/frontend/src/components/ui/table.tsx +90 -0
  546. package/templates/scaffold/app/frontend/src/graphql/generated/graphql-env.d.ts +103 -0
  547. package/templates/scaffold/app/frontend/src/graphql/generated/schema.graphql +1235 -0
  548. package/templates/scaffold/app/frontend/src/graphql/index.ts +15 -0
  549. package/templates/scaffold/app/frontend/src/index.css +5 -0
  550. package/templates/scaffold/app/frontend/src/lib/auth-client.ts +17 -0
  551. package/templates/scaffold/app/frontend/src/lib/utils.ts +6 -0
  552. package/templates/scaffold/app/frontend/src/main.tsx +10 -0
  553. package/templates/scaffold/app/frontend/src/pages/page.tsx +20 -0
  554. package/templates/scaffold/app/frontend/src/pages/user-management/page.tsx +19 -0
  555. package/templates/scaffold/app/frontend/src/pages/user-management/profile/page.tsx +97 -0
  556. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/components/user-detail.tsx +58 -0
  557. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/page.tsx +51 -0
  558. package/templates/scaffold/app/frontend/src/pages/user-management/user/components/users-table.tsx +101 -0
  559. package/templates/scaffold/app/frontend/src/pages/user-management/user/create/components/create-user-form.tsx +99 -0
  560. package/templates/scaffold/app/frontend/src/pages/user-management/user/create/page.tsx +19 -0
  561. package/templates/scaffold/app/frontend/src/pages/user-management/user/page.tsx +61 -0
  562. package/templates/scaffold/app/frontend/src/providers/graphql-provider.tsx +21 -0
  563. package/templates/scaffold/app/frontend/tsconfig.app.json +35 -0
  564. package/templates/scaffold/app/frontend/tsconfig.json +16 -0
  565. package/templates/scaffold/app/frontend/tsconfig.node.json +23 -0
  566. package/templates/scaffold/app/frontend/vite.config.ts +23 -0
  567. package/templates/scaffold/module/command/.gitkeep +0 -0
  568. package/templates/scaffold/module/db/.gitkeep +0 -0
  569. package/templates/scaffold/module/executor/.gitkeep +0 -0
  570. package/templates/scaffold/module/generated/.gitkeep +0 -0
  571. package/templates/scaffold/module/index.ts +2 -0
  572. package/templates/scaffold/module/lib/errors.ts +1 -0
  573. package/templates/scaffold/module/lib/types.ts +4 -0
  574. package/templates/scaffold/module/module.ts +7 -0
  575. package/templates/scaffold/module/permissions.ts +3 -0
  576. package/templates/scaffold/module/query/.gitkeep +0 -0
  577. package/templates/scaffold/module/tailor.config.ts +13 -0
  578. package/templates/scaffold/module/testing/fixtures.ts +1 -0
  579. package/templates/workflows/erp-kit-check.yml +37 -0
  580. package/dist/cli.js +0 -1654
  581. package/skills/erp-kit-app-2-breakdown/SKILL.md +0 -88
  582. package/skills/erp-kit-app-3-doc-review/SKILL.md +0 -112
  583. package/skills/erp-kit-app-4-impl-spec/SKILL.md +0 -116
  584. package/skills/erp-kit-app-5-implementation/references/backend.md +0 -232
  585. package/skills/erp-kit-module-1-docs/SKILL.md +0 -111
  586. package/skills/erp-kit-module-2-feature-breakdown/SKILL.md +0 -76
  587. package/skills/erp-kit-module-3-doc-review/SKILL.md +0 -294
  588. package/skills/erp-kit-module-4-tdd/SKILL.md +0 -94
  589. package/skills/erp-kit-module-4-tdd/references/exports.md +0 -8
  590. package/skills/erp-kit-module-5-impl-review/SKILL.md +0 -410
  591. package/src/commands/scaffold-templates.ts +0 -65
  592. package/src/modules/shared/index.ts +0 -1
  593. package/src/modules/user-management/command/logAuditEvent.generated.ts +0 -6
  594. package/src/modules/user-management/command/logAuditEvent.test.ts +0 -187
  595. package/src/modules/user-management/command/logAuditEvent.ts +0 -56
  596. package/src/modules/user-management/db/auditEvent.ts +0 -47
  597. package/src/modules/user-management/docs/commands/LogAuditEvent.md +0 -37
  598. package/src/modules/user-management/docs/features/audit-trail.md +0 -80
  599. package/src/modules/user-management/docs/models/AuditEvent.md +0 -36
  600. /package/skills/{erp-kit-module-2-feature-breakdown → erp-kit-module-3-plan}/references/naming.md +0 -0
  601. /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/cross-module-dependency.md +0 -0
  602. /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/db-relations.md +0 -0
  603. /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/generated-code.md +0 -0
  604. /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/models.md +0 -0
  605. /package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/commands.md +0 -0
  606. /package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/testing.md +0 -0
  607. /package/src/modules/{product-management → audit}/.gitkeep +0 -0
  608. /package/src/{modules/shared → shared}/createContext.test.ts +0 -0
  609. /package/src/{modules/shared → shared}/createContext.ts +0 -0
  610. /package/src/{modules/shared → shared}/definePermissions.test.ts +0 -0
  611. /package/src/{modules/shared → shared}/definePermissions.ts +0 -0
  612. /package/src/{modules/shared → shared}/defineQuery.test.ts +0 -0
  613. /package/src/{modules/shared → shared}/defineQuery.ts +0 -0
  614. /package/src/{modules/shared → shared}/entityTypes.ts +0 -0
  615. /package/src/{modules/shared → shared}/errors.ts +0 -0
  616. /package/src/{modules/shared → shared}/requirePermission.test.ts +0 -0
  617. /package/src/{modules/shared → shared}/requirePermission.ts +0 -0
  618. /package/src/{modules/shared → shared}/result.ts +0 -0
@@ -1,410 +0,0 @@
1
- ---
2
- name: erp-kit-module-5-impl-review
3
- description: Review implementation parity between documentation and code. Use when validating that TDD implementation (step 4) matches model docs, command docs, and test coverage requirements.
4
- ---
5
-
6
- # Implementation Parity Review Workflow
7
-
8
- Review **implementation consistency** between documentation and actual code.
9
-
10
- ## Purpose
11
-
12
- Verify that TDD implementation (models, commands, tests) properly implements what's documented in model docs and command docs.
13
-
14
- ```
15
- Model Docs (Schema) →db/*.ts (Implementation)
16
- ↓ ↓
17
- Fields createEntityType()
18
- Relationships Foreign keys
19
- State Transitions Status enums
20
-
21
- Command Docs (Spec) →command/*.ts (Implementation)
22
- ↓ ↓
23
- Business Rules Validation logic
24
- Error Scenarios Error classes
25
- Process Flows Branching logic
26
-
27
- Command Docs (Spec) →command/*.test.ts (Tests)
28
- ↓ ↓
29
- Process Flow branches Test cases
30
- Error scenarios Error assertions
31
- Idempotent paths Return existing tests
32
- ```
33
-
34
- ## When to Use
35
-
36
- - After TDD implementation (step 4), verify it matches documentation
37
- - Before merging feature branches
38
- - Quality check during code review
39
-
40
- ## Workflow
41
-
42
- ```
43
- MODEL DOCS → MODEL CODE → COMMAND DOCS → COMMAND CODE → TESTS → COMPARE → REPORT
44
- ```
45
-
46
- ## Step-by-Step
47
-
48
- ### 1. Read Model Documentation
49
-
50
- Read ALL model docs:
51
-
52
- ```
53
- modules/<module-name>/docs/models/*.md
54
- ```
55
-
56
- Extract for each model:
57
-
58
- - Field names and types
59
- - Required vs optional fields
60
- - Relationships (foreign keys)
61
- - State transitions (if stateful)
62
- - Constraints
63
-
64
- ### 2. Read Model Implementation
65
-
66
- Read ALL model files:
67
-
68
- ```
69
- modules/<module-name>/db/*.ts
70
- ```
71
-
72
- Extract for each model:
73
-
74
- - Fields in `createEntityType()`
75
- - Status enums (base + additional)
76
- - Foreign key references
77
- - Field descriptions
78
-
79
- ### 3. Read Command Documentation
80
-
81
- Read ALL command docs:
82
-
83
- ```
84
- modules/<module-name>/docs/commands/*.md
85
- ```
86
-
87
- Extract for each command:
88
-
89
- - Business rules
90
- - Error scenarios (with codes)
91
- - Process flow branches
92
- - Input/output types
93
-
94
- ### 4. Read Command Implementation
95
-
96
- Read ALL command files:
97
-
98
- ```
99
- modules/<module-name>/command/*.ts
100
- ```
101
-
102
- Extract for each command:
103
-
104
- - Validation logic implemented
105
- - Error classes returned via Result
106
- - Branching paths (if/else, early returns)
107
- - Input interface fields
108
- - Return type structure
109
-
110
- ### 5. Read Error Implementation
111
-
112
- Read generated error definitions:
113
-
114
- ```
115
- modules/<module-name>/lib/errors.generated.ts
116
- ```
117
-
118
- Extract:
119
-
120
- - Error class names (generated from doc error codes)
121
- - Error codes
122
- - Error message patterns
123
-
124
- ### 6. Read Test Implementation
125
-
126
- Read ALL test files:
127
-
128
- ```
129
- modules/<module-name>/command/*.test.ts
130
- ```
131
-
132
- Extract for each command:
133
-
134
- - Test case descriptions
135
- - Error assertions
136
- - Happy path coverage
137
- - Edge case coverage
138
-
139
- ### 7. Model Doc → Model Code Parity Check
140
-
141
- | Check Item | Question |
142
- | ------------------ | ---------------------------------------------------------------- |
143
- | Field coverage | Does code include all fields from model doc? |
144
- | Type accuracy | Do field types match doc specification? |
145
- | Required fields | Are required fields enforced (no default, not nullable)? |
146
- | Relationship impl | Are foreign key fields implemented for documented relationships? |
147
- | State transitions | Does status enum include all documented states? |
148
- | Field descriptions | Do `.description()` calls match doc field descriptions? |
149
-
150
- ### 8. Command Doc → Command Code Parity Check
151
-
152
- | Check Item | Question |
153
- | ----------------------- | ----------------------------------------------------------- |
154
- | Business rule impl | Is each documented business rule implemented in code? |
155
- | Error scenario coverage | Does code return errors for all documented error scenarios? |
156
- | Error code accuracy | Do error codes in code match documented codes? |
157
- | Process flow alignment | Do code branches match documented process flow? |
158
- | Input type coverage | Does input interface include all documented inputs? |
159
- | Return type accuracy | Does return type match documented output? |
160
- | Generated shell pattern | Does command export `run` with a `.generated.ts` shell? |
161
-
162
- ### 9. Command Doc → Test Coverage Check
163
-
164
- | Check Item | Question |
165
- | --------------------- | ---------------------------------------------------------- |
166
- | Process flow coverage | Does each branch in process flow have a test case? |
167
- | Error scenario tests | Does each documented error scenario have a test assertion? |
168
- | Happy path tests | Are success paths tested? |
169
- | Idempotent path tests | If doc shows "already exists → return", is this tested? |
170
-
171
- ### 10. Report Findings
172
-
173
- ```markdown
174
- ## Implementation Parity Review Report
175
-
176
- **Module:** <module-name>
177
-
178
- ---
179
-
180
- ### 1. Model Doc → Model Code Coverage
181
-
182
- | Model Doc | Fields Documented | Fields Implemented | Gap |
183
- | --------- | ----------------- | ------------------ | ------------------- |
184
- | <Model-A> | N fields | N fields | ✅ |
185
- | <Model-B> | N fields | N-1 fields | ❌ `fieldX` missing |
186
-
187
- ---
188
-
189
- ### 2. Model State Transitions
190
-
191
- | Model | Documented States | Implemented States | Gap |
192
- | --------- | ------------------------ | ------------------ | ------------------ |
193
- | <Model-A> | PENDING, ACTIVE, REMOVED | PENDING, ACTIVE | ❌ REMOVED missing |
194
- | <Model-B> | ACTIVE, INACTIVE | ACTIVE, INACTIVE | ✅ |
195
-
196
- ---
197
-
198
- ### 3. Command Doc → Command Code Coverage
199
-
200
- | Command Doc | Business Rules | Implemented | Gap |
201
- | ----------- | -------------- | ----------- | -------------------------------- |
202
- | <cmd-a> | 3 rules | 3 rules | ✅ |
203
- | <cmd-b> | 4 rules | 3 rules | ❌ "rule X validation" not found |
204
-
205
- ---
206
-
207
- ### 4. Error Scenario Implementation
208
-
209
- | Command Doc | Error Code | Generated in errors.generated.ts | Returned in command | Test assertion |
210
- | ----------- | ---------------- | -------------------------------- | ------------------- | -------------- |
211
- | <cmd-a> | ENTITY_NOT_FOUND | ✅ EntityNotFoundError | ✅ | ✅ |
212
- | <cmd-a> | INVALID_STATE | ❌ Not defined | ❌ | ❌ |
213
- | <cmd-b> | DUPLICATE_ENTRY | ✅ DuplicateEntryError | ✅ | ❌ No test |
214
-
215
- ---
216
-
217
- ### 5. Process Flow → Test Coverage
218
-
219
- | Command Doc | Process Flow Branches | Test Cases | Gap |
220
- | ----------- | --------------------- | ---------- | -------------------------------- |
221
- | <cmd-a> | 3 branches | 3 tests | ✅ |
222
- | <cmd-b> | 4 branches | 2 tests | ❌ Missing "already exists" test |
223
-
224
- ---
225
-
226
- ### 6. Implementation Pattern Compliance
227
-
228
- | Command | Generated Shell | Input Interface Exported | JSDoc Present |
229
- | ------- | ------------------------- | ------------------------ | ------------- |
230
- | <cmd-a> | ✅ `.generated.ts` exists | ✅ | ✅ |
231
- | <cmd-b> | ❌ Missing shell | ✅ | ❌ |
232
-
233
- ---
234
-
235
- ### 7. Missing Implementation
236
-
237
- #### Missing in Model Code
238
-
239
- | Model Doc | Missing Item | Type | Doc Reference |
240
- | --------- | ------------ | ------ | --------------------------- |
241
- | <Model-A> | `fieldX` | Field | "fieldX: uuid, required" |
242
- | <Model-A> | `REMOVED` | Status | State diagram shows REMOVED |
243
-
244
- #### Missing in Command Code
245
-
246
- | Command Doc | Missing Item | Type | Doc Reference |
247
- | ----------- | ---------------- | ------------- | ------------------------ |
248
- | <cmd-b> | validation for X | Business rule | "Rule: X must be unique" |
249
-
250
- #### Missing Error Classes
251
-
252
- | Command Doc | Error Code | Expected Class |
253
- | ----------- | ------------- | ----------------- |
254
- | <cmd-a> | INVALID_STATE | InvalidStateError |
255
-
256
- #### Missing Tests
257
-
258
- | Command Doc | Missing Test Case | Doc Reference |
259
- | ----------- | -------------------------------- | --------------------- |
260
- | <cmd-b> | "entity already exists → return" | Process flow branch 2 |
261
- | <cmd-b> | "returns DUPLICATE_ENTRY" | Error scenario 3 |
262
-
263
- ---
264
-
265
- ### 8. Inconsistencies
266
-
267
- | Type | Location | Issue |
268
- | ------------------- | -------------- | ------------------------------------------- |
269
- | Type mismatch | Model-A.fieldX | Doc: string, Code: number |
270
- | Error code mismatch | cmd-a | Doc: USER_NOT_FOUND, Code: ENTITY_NOT_FOUND |
271
- | Missing description | Model-B.fieldY | No `.description()` but doc has description |
272
-
273
- ---
274
-
275
- ### 9. Summary
276
-
277
- | Aspect | Status | Details |
278
- | ----------------------------- | ------ | --------------------------------- |
279
- | Model Doc → Code Coverage | ⚠️ | X/Y models fully implemented |
280
- | Command Doc → Code Coverage | ⚠️ | X/Y commands fully implemented |
281
- | Error Scenario Implementation | ❌ | X/Y errors defined and returned |
282
- | Test Coverage | ⚠️ | X/Y process branches have tests |
283
- | Pattern Compliance | ✅ | All commands use generated shells |
284
-
285
- ### 10. Recommendations
286
-
287
- 1. **Add missing model fields:**
288
- - Model-A: add `fieldX` field
289
-
290
- 2. **Add missing status values:**
291
- - Model-A: add `REMOVED` to status enum
292
-
293
- 3. **Implement missing business rules:**
294
- - cmd-b: add validation for "X must be unique"
295
-
296
- 4. **Define missing error classes:**
297
- - Add `INVALID_STATE` error scenario to command doc + re-run `erp-kit module generate code`
298
-
299
- 5. **Add missing test cases:**
300
- - cmd-b: test "entity already exists → return existing"
301
- - cmd-b: test "throws DUPLICATE_ENTRY on duplicate"
302
-
303
- 6. **Fix inconsistencies:**
304
- - Model-A.fieldX: change type to string per doc
305
- ```
306
-
307
- ## Common Gaps
308
-
309
- ### Model Doc → Model Code
310
-
311
- - **Missing fields**: Doc specifies field but not in code
312
- - **Type mismatches**: Doc says string, code uses number
313
- - **Missing status values**: State diagram shows state not in enum
314
- - **Missing relationships**: Doc shows FK but not implemented
315
- - **Missing descriptions**: Doc has field description but no `.description()`
316
-
317
- ### Command Doc → Command Code
318
-
319
- - **Unimplemented business rules**: Rule in doc but no validation code
320
- - **Missing error returns**: Error scenario documented but not returned
321
- - **Wrong error codes**: Code and doc use different error codes
322
- - **Missing process branches**: Flowchart branch not in code logic
323
- - **Missing generated shell**: No `.generated.ts` file for command
324
-
325
- ### Command Doc → Tests
326
-
327
- - **Uncovered process branches**: Flowchart branch has no test
328
- - **Missing error tests**: Error scenario has no assertion
329
- - **Missing idempotent tests**: "Return existing" path untested
330
- - **Missing edge cases**: Boundary conditions not tested
331
-
332
- ## Quick Reference: Extraction Patterns
333
-
334
- ### From Model Docs
335
-
336
- ```markdown
337
- ## Fields
338
-
339
- | Field | Type | Required |
340
- | -------- | ------ | -------- | ---------------------------------------- |
341
- | id | uuid | yes | → Check: field exists, type matches |
342
- | name | string | yes | → Check: not nullable |
343
- | status | enum | yes | → Check: enum values match state diagram |
344
- | parentId | uuid | yes | → Check: foreign key implemented |
345
-
346
- ## State Diagram
347
-
348
- PENDING → ACTIVE → REMOVED
349
- → Check: all states in enum
350
- ```
351
-
352
- ### From Command Docs
353
-
354
- ```markdown
355
- ## Business Rules
356
-
357
- 1. Entity must exist → Check: validation in code
358
- 2. Status must be ACTIVE → Check: status check in code
359
-
360
- ## Error Scenarios
361
-
362
- | Code | Condition |
363
- | -------------- | -------------- | ------------------------------------------ |
364
- | NOT_FOUND | Entity missing | → Check: error class + return err() + test |
365
- | INVALID_STATUS | Wrong status | → Check: error class + return err() + test |
366
-
367
- ## Process Flow (mermaid)
368
-
369
- graph TD
370
- A[Start] --> B{Exists?}
371
- B -->|Yes| C[Return] → Check: test for "already exists"
372
- B -->|No| D[Create] → Check: test for "create new"
373
- ```
374
-
375
- ### From Implementation
376
-
377
- ```typescript
378
- // Model: check fields match doc
379
- export function createEntityType(params) {
380
- return {
381
- fields: {
382
- /* verify each field */
383
- },
384
- };
385
- }
386
-
387
- // Command: check business rules (run function pattern)
388
- export async function run(db, input, ctx) {
389
- // Check: validation for each business rule
390
- if (!entity) return err(new EntityNotFoundError()); // Check: matches doc error
391
- // Check: each branch matches process flow
392
- }
393
-
394
- // Generated shell: check it exists
395
- // myCommand.generated.ts
396
- export const myCommand = defineCommand(permissions.myCommand, run);
397
-
398
- // Test: check coverage
399
- describe("myCommand", () => {
400
- it("creates entity when valid"); // Check: happy path
401
- it("returns existing if found"); // Check: idempotent path
402
- it("returns NOT_FOUND when missing"); // Check: error scenario
403
- });
404
- ```
405
-
406
- ## References
407
-
408
- - [Command patterns](references/commands.md)
409
- - [Error patterns](references/errors.md)
410
- - [Testing patterns](references/testing.md)
@@ -1,65 +0,0 @@
1
- export type TemplateEntry =
2
- | { type: "dir"; path: string }
3
- | { type: "file"; path: string; content: (moduleName: string) => string };
4
-
5
- export function getModuleSrcTemplates(): TemplateEntry[] {
6
- return [
7
- { type: "dir", path: "db" },
8
- { type: "dir", path: "command" },
9
- { type: "dir", path: "executor" },
10
- { type: "dir", path: "generated" },
11
- { type: "dir", path: "query" },
12
- { type: "file", path: "module.ts", content: () => MODULE_TEMPLATE },
13
- { type: "file", path: "index.ts", content: () => INDEX_TEMPLATE },
14
- { type: "file", path: "permissions.ts", content: (n) => permissionsTemplate(n) },
15
- { type: "file", path: "tailor.config.ts", content: (n) => tailorConfigTemplate(n) },
16
- { type: "file", path: "lib/errors.ts", content: () => ERRORS_TEMPLATE },
17
- { type: "file", path: "lib/types.ts", content: () => TYPES_TEMPLATE },
18
- { type: "file", path: "testing/fixtures.ts", content: () => FIXTURES_TEMPLATE },
19
- ];
20
- }
21
-
22
- const MODULE_TEMPLATE = `export const defineModule = () => {
23
- return {
24
- db: {},
25
- commands: {},
26
- queries: {},
27
- };
28
- };
29
- `;
30
-
31
- const INDEX_TEMPLATE = `export { defineModule } from "./module";
32
- export { permissions, own, all } from "./permissions";
33
- `;
34
-
35
- const ERRORS_TEMPLATE = `import { createDomainError } from "../../shared/internal";\n`;
36
-
37
- const TYPES_TEMPLATE = `import type { InferSchema, Selectable, Insertable, Updateable } from "../../shared/internal";
38
- import type { DB } from "../generated/kysely-tailordb";
39
-
40
- export type Schema = InferSchema<DB>;
41
- `;
42
-
43
- const FIXTURES_TEMPLATE = `// Add test fixtures here\n`;
44
-
45
- function permissionsTemplate(moduleName: string): string {
46
- return `import { definePermissions } from "../shared/internal";
47
-
48
- export const { permissions, own, all } = definePermissions("${moduleName}", [] as const);
49
- `;
50
- }
51
-
52
- function tailorConfigTemplate(moduleName: string): string {
53
- return `import { defineConfig, defineGenerators } from "@tailor-platform/sdk";
54
-
55
- export default defineConfig({
56
- name: "${moduleName}",
57
- db: { "main-db": { files: [\`./db/*.ts\`] } },
58
- });
59
-
60
- export const generators = defineGenerators(
61
- ["@tailor-platform/kysely-type", { distPath: \`./generated/kysely-tailordb.ts\` }],
62
- ["@tailor-platform/enum-constants", { distPath: "./generated/enums.ts" }],
63
- );
64
- `;
65
- }
@@ -1 +0,0 @@
1
- export { createContext } from "./createContext";
@@ -1,6 +0,0 @@
1
- // @generated — do not edit
2
- import { defineCommand } from "../../shared/internal";
3
- import { permissions } from "../lib/permissions.generated";
4
- import { run } from "./logAuditEvent";
5
-
6
- export const logAuditEvent = defineCommand(permissions.logAuditEvent, run);
@@ -1,187 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { type CommandContext } from "../../shared/internal";
3
- import { createMockDb } from "../../testing/index";
4
- import { DB } from "../generated/kysely-tailordb";
5
- import { InvalidEventTypeError, MissingRequiredFieldError } from "../lib/errors.generated";
6
- import { baseAuditEvent } from "../testing/fixtures";
7
- import { run } from "./logAuditEvent";
8
-
9
- describe("logAuditEvent", () => {
10
- const ctx: CommandContext = {
11
- actorId: "test-actor",
12
- permissions: ["user-management:logAuditEvent"],
13
- };
14
-
15
- it("throws when actorId is empty", async () => {
16
- const { db } = createMockDb<DB>();
17
-
18
- const result = await run(
19
- db,
20
- {
21
- eventType: "USER_CREATED",
22
- actorId: "",
23
- },
24
- ctx,
25
- );
26
- expect(result.ok).toBe(false);
27
- if (!result.ok) {
28
- expect(result.error).toBeInstanceOf(MissingRequiredFieldError);
29
- }
30
- });
31
-
32
- it("throws when eventType is invalid", async () => {
33
- const { db } = createMockDb<DB>();
34
-
35
- const result = await run(
36
- db,
37
- {
38
- eventType: "INVALID_EVENT" as "USER_CREATED",
39
- actorId: "user-1",
40
- },
41
- ctx,
42
- );
43
- expect(result.ok).toBe(false);
44
- if (!result.ok) {
45
- expect(result.error).toBeInstanceOf(InvalidEventTypeError);
46
- }
47
- });
48
-
49
- it("creates audit event with minimal fields", async () => {
50
- const { db, spies } = createMockDb<DB>();
51
- const createdEvent = {
52
- ...baseAuditEvent,
53
- id: "new-event-id",
54
- eventType: "USER_CREATED" as const,
55
- actorId: "user-1",
56
- targetId: null,
57
- targetType: null,
58
- payload: null,
59
- };
60
-
61
- spies.insert.mockReturnValue(createdEvent);
62
-
63
- const result = await run(
64
- db,
65
- {
66
- eventType: "USER_CREATED",
67
- actorId: "user-1",
68
- },
69
- ctx,
70
- );
71
-
72
- expect(result.ok).toBe(true);
73
- if (result.ok) {
74
- expect(result.value.auditEvent.eventType).toBe("USER_CREATED");
75
- expect(result.value.auditEvent.actorId).toBe("user-1");
76
- }
77
- expect(spies.insert).toHaveBeenCalled();
78
- });
79
-
80
- it("creates audit event with target info", async () => {
81
- const { db, spies } = createMockDb<DB>();
82
- const createdEvent = {
83
- ...baseAuditEvent,
84
- id: "new-event-id",
85
- eventType: "ROLE_ASSIGNED" as const,
86
- actorId: "user-1",
87
- targetId: "user-2",
88
- targetType: "User",
89
- payload: null,
90
- };
91
-
92
- spies.insert.mockReturnValue(createdEvent);
93
-
94
- const result = await run(
95
- db,
96
- {
97
- eventType: "ROLE_ASSIGNED",
98
- actorId: "user-1",
99
- targetId: "user-2",
100
- targetType: "User",
101
- },
102
- ctx,
103
- );
104
-
105
- expect(result.ok).toBe(true);
106
- if (result.ok) {
107
- expect(result.value.auditEvent.eventType).toBe("ROLE_ASSIGNED");
108
- expect(result.value.auditEvent.targetId).toBe("user-2");
109
- expect(result.value.auditEvent.targetType).toBe("User");
110
- }
111
- });
112
-
113
- it("creates audit event with payload", async () => {
114
- const { db, spies } = createMockDb<DB>();
115
- const payload = JSON.stringify({ roleId: "role-1", userId: "user-2" });
116
- const createdEvent = {
117
- ...baseAuditEvent,
118
- id: "new-event-id",
119
- eventType: "ROLE_ASSIGNED" as const,
120
- actorId: "user-1",
121
- targetId: "user-2",
122
- targetType: "User",
123
- payload,
124
- };
125
-
126
- spies.insert.mockReturnValue(createdEvent);
127
-
128
- const result = await run(
129
- db,
130
- {
131
- eventType: "ROLE_ASSIGNED",
132
- actorId: "user-1",
133
- targetId: "user-2",
134
- targetType: "User",
135
- payload,
136
- },
137
- ctx,
138
- );
139
-
140
- expect(result.ok).toBe(true);
141
- if (result.ok) {
142
- expect(result.value.auditEvent.payload).toBe(payload);
143
- }
144
- });
145
-
146
- it("creates audit event for each valid event type", async () => {
147
- const eventTypes = [
148
- "USER_CREATED",
149
- "USER_ACTIVATED",
150
- "USER_DEACTIVATED",
151
- "USER_REACTIVATED",
152
- "ROLE_ASSIGNED",
153
- "ROLE_REVOKED",
154
- "PERMISSION_ASSIGNED",
155
- "PERMISSION_REVOKED",
156
- ] as const;
157
-
158
- for (const eventType of eventTypes) {
159
- const { db, spies } = createMockDb<DB>();
160
- const createdEvent = {
161
- ...baseAuditEvent,
162
- id: "new-event-id",
163
- eventType,
164
- actorId: "user-1",
165
- targetId: null,
166
- targetType: null,
167
- payload: null,
168
- };
169
-
170
- spies.insert.mockReturnValue(createdEvent);
171
-
172
- const result = await run(
173
- db,
174
- {
175
- eventType,
176
- actorId: "user-1",
177
- },
178
- ctx,
179
- );
180
-
181
- expect(result.ok).toBe(true);
182
- if (result.ok) {
183
- expect(result.value.auditEvent.eventType).toBe(eventType);
184
- }
185
- }
186
- });
187
- });