@tailor-platform/erp-kit 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (633) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +154 -80
  3. package/dist/cli.mjs +1742 -0
  4. package/package.json +16 -14
  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 +22 -11
  10. package/skills/erp-kit-app-2-requirements-review/SKILL.md +103 -0
  11. package/skills/erp-kit-app-2-requirements-review/references/best-practices-check.md +71 -0
  12. package/skills/erp-kit-app-2-requirements-review/references/boundary-consistency-check.md +74 -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 +154 -0
  15. package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +89 -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 +168 -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-impl-backend/SKILL.md +98 -0
  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-app-shared/SKILL.md +15 -0
  37. package/skills/erp-kit-app-shared/references/link-format-reference.md +13 -0
  38. package/skills/erp-kit-app-shared/references/naming-conventions.md +21 -0
  39. package/skills/erp-kit-app-shared/references/resolver-classification.md +23 -0
  40. package/skills/erp-kit-app-shared/references/schema-constraints.md +25 -0
  41. package/skills/erp-kit-module-1-requirements/SKILL.md +126 -0
  42. package/skills/erp-kit-module-1-requirements/references/boundary-analysis.md +51 -0
  43. package/skills/erp-kit-module-1-requirements/references/erp-research.md +57 -0
  44. package/skills/erp-kit-module-1-requirements/references/feature-doc.md +61 -0
  45. package/skills/erp-kit-module-2-requirements-review/SKILL.md +112 -0
  46. package/skills/erp-kit-module-2-requirements-review/references/best-practices-check.md +79 -0
  47. package/skills/erp-kit-module-2-requirements-review/references/boundary-consistency-check.md +70 -0
  48. package/skills/erp-kit-module-2-requirements-review/references/requirements-report-format.md +25 -0
  49. package/skills/erp-kit-module-3-plan/SKILL.md +107 -0
  50. package/skills/erp-kit-module-3-plan/references/command-extraction.md +87 -0
  51. package/skills/erp-kit-module-3-plan/references/model-extraction.md +72 -0
  52. package/skills/{erp-kit-module-2-feature-breakdown → erp-kit-module-3-plan}/references/naming.md +15 -1
  53. package/skills/erp-kit-module-3-plan/references/query-extraction.md +59 -0
  54. package/skills/erp-kit-module-4-plan-review/SKILL.md +158 -0
  55. package/skills/erp-kit-module-4-plan-review/references/command-model-consistency.md +46 -0
  56. package/skills/erp-kit-module-4-plan-review/references/feature-command-parity.md +97 -0
  57. package/skills/erp-kit-module-4-plan-review/references/feature-model-parity.md +47 -0
  58. package/skills/erp-kit-module-4-plan-review/references/feature-query-parity.md +70 -0
  59. package/skills/erp-kit-module-4-plan-review/references/parity-report-format.md +52 -0
  60. package/skills/erp-kit-module-5-impl/SKILL.md +120 -0
  61. package/skills/erp-kit-module-5-impl/references/command-impl.md +68 -0
  62. package/skills/erp-kit-module-5-impl/references/exports.md +10 -0
  63. package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/generated-code.md +2 -2
  64. package/skills/erp-kit-module-5-impl/references/model-impl.md +45 -0
  65. package/skills/erp-kit-module-5-impl/references/query-impl.md +53 -0
  66. package/skills/erp-kit-module-6-impl-review/SKILL.md +187 -0
  67. package/skills/erp-kit-module-6-impl-review/references/command-doc-code-parity.md +92 -0
  68. package/skills/erp-kit-module-6-impl-review/references/command-doc-test-parity.md +93 -0
  69. package/skills/erp-kit-module-6-impl-review/references/error-implementation-parity.md +95 -0
  70. package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/errors.md +2 -2
  71. package/skills/erp-kit-module-6-impl-review/references/impl-parity-report-format.md +52 -0
  72. package/skills/erp-kit-module-6-impl-review/references/model-doc-code-parity.md +80 -0
  73. package/skills/erp-kit-module-shared/SKILL.md +1 -1
  74. package/skills/erp-kit-module-shared/references/commands.md +1 -1
  75. package/skills/erp-kit-module-shared/references/errors.md +13 -10
  76. package/skills/erp-kit-module-shared/references/queries.md +110 -37
  77. package/skills/erp-kit-module-shared/references/structure.md +1 -1
  78. package/skills/erp-kit-module-shared/references/testing.md +10 -0
  79. package/skills/erp-kit-update/SKILL.md +4 -4
  80. package/src/app.ts +1 -1
  81. package/src/commands/app/index.ts +57 -24
  82. package/src/commands/check.ts +1 -1
  83. package/src/commands/generate-doc.test.ts +63 -0
  84. package/src/commands/generate-doc.ts +98 -0
  85. package/src/commands/index.ts +16 -5
  86. package/src/commands/init-module.test.ts +43 -0
  87. package/src/commands/init-module.ts +74 -0
  88. package/src/commands/init.test.ts +22 -69
  89. package/src/commands/init.ts +28 -115
  90. package/src/commands/lib/distribute.test.ts +126 -0
  91. package/src/commands/lib/distribute.ts +129 -0
  92. package/src/commands/module/generate.ts +33 -13
  93. package/src/commands/module/index.ts +18 -28
  94. package/src/commands/parse-doc-test-cases.ts +55 -0
  95. package/src/commands/sync-check.test.ts +173 -0
  96. package/src/commands/sync-check.ts +103 -2
  97. package/src/commands/update.test.ts +87 -0
  98. package/src/commands/update.ts +41 -0
  99. package/src/generator/generate-code-boilerplate.test.ts +142 -0
  100. package/src/generator/generate-code.test.ts +47 -12
  101. package/src/generator/generate-code.ts +123 -20
  102. package/src/integration.test.ts +3 -3
  103. package/src/module.ts +14 -97
  104. package/src/modules/item-management/README.md +8 -0
  105. package/src/modules/item-management/command/activateItem.generated.ts +1 -1
  106. package/src/modules/item-management/command/activateItem.test.ts +12 -18
  107. package/src/modules/item-management/command/activateItem.ts +9 -5
  108. package/src/modules/item-management/command/assignItemToTaxonomy.generated.ts +1 -1
  109. package/src/modules/item-management/command/assignItemToTaxonomy.test.ts +10 -24
  110. package/src/modules/item-management/command/assignItemToTaxonomy.ts +19 -16
  111. package/src/modules/item-management/command/createItem.generated.ts +1 -1
  112. package/src/modules/item-management/command/createItem.test.ts +11 -11
  113. package/src/modules/item-management/command/createItem.ts +16 -7
  114. package/src/modules/item-management/command/createTaxonomyNode.generated.ts +1 -1
  115. package/src/modules/item-management/command/createTaxonomyNode.test.ts +9 -9
  116. package/src/modules/item-management/command/createTaxonomyNode.ts +33 -14
  117. package/src/modules/item-management/command/deactivateItem.generated.ts +1 -1
  118. package/src/modules/item-management/command/deactivateItem.test.ts +12 -18
  119. package/src/modules/item-management/command/deactivateItem.ts +9 -5
  120. package/src/modules/item-management/command/deleteItem.generated.ts +1 -1
  121. package/src/modules/item-management/command/deleteItem.test.ts +10 -16
  122. package/src/modules/item-management/command/deleteItem.ts +9 -5
  123. package/src/modules/item-management/command/deleteTaxonomyNode.generated.ts +1 -1
  124. package/src/modules/item-management/command/deleteTaxonomyNode.test.ts +10 -16
  125. package/src/modules/item-management/command/deleteTaxonomyNode.ts +22 -12
  126. package/src/modules/item-management/command/moveTaxonomyNode.generated.ts +1 -1
  127. package/src/modules/item-management/command/moveTaxonomyNode.test.ts +10 -10
  128. package/src/modules/item-management/command/moveTaxonomyNode.ts +63 -19
  129. package/src/modules/item-management/command/reactivateItem.generated.ts +1 -1
  130. package/src/modules/item-management/command/reactivateItem.test.ts +12 -18
  131. package/src/modules/item-management/command/reactivateItem.ts +9 -5
  132. package/src/modules/item-management/command/removeItemFromTaxonomy.generated.ts +1 -1
  133. package/src/modules/item-management/command/removeItemFromTaxonomy.test.ts +9 -16
  134. package/src/modules/item-management/command/removeItemFromTaxonomy.ts +11 -6
  135. package/src/modules/item-management/command/updateItem.generated.ts +1 -1
  136. package/src/modules/item-management/command/updateItem.test.ts +16 -16
  137. package/src/modules/item-management/command/updateItem.ts +11 -6
  138. package/src/modules/item-management/command/updateTaxonomyNode.generated.ts +1 -1
  139. package/src/modules/item-management/command/updateTaxonomyNode.test.ts +14 -20
  140. package/src/modules/item-management/command/updateTaxonomyNode.ts +9 -6
  141. package/src/modules/item-management/docs/commands/ActivateItem.md +8 -0
  142. package/src/modules/item-management/docs/commands/AssignItemToTaxonomy.md +7 -0
  143. package/src/modules/item-management/docs/commands/CreateItem.md +10 -0
  144. package/src/modules/item-management/docs/commands/CreateTaxonomyNode.md +9 -0
  145. package/src/modules/item-management/docs/commands/DeactivateItem.md +8 -0
  146. package/src/modules/item-management/docs/commands/DeleteItem.md +7 -0
  147. package/src/modules/item-management/docs/commands/DeleteTaxonomyNode.md +7 -0
  148. package/src/modules/item-management/docs/commands/MoveTaxonomyNode.md +10 -0
  149. package/src/modules/item-management/docs/commands/ReactivateItem.md +8 -0
  150. package/src/modules/item-management/docs/commands/RemoveItemFromTaxonomy.md +5 -0
  151. package/src/modules/item-management/docs/commands/UpdateItem.md +15 -0
  152. package/src/modules/item-management/docs/commands/UpdateTaxonomyNode.md +9 -0
  153. package/src/modules/item-management/docs/queries/CalculateNodeDepth.md +8 -0
  154. package/src/modules/item-management/docs/queries/CalculateSubtreeDepth.md +7 -0
  155. package/src/modules/item-management/docs/queries/DetectCircularReference.md +9 -0
  156. package/src/modules/item-management/docs/queries/GetItem.md +9 -0
  157. package/src/modules/item-management/docs/queries/GetItemTaxonomyAssignment.md +5 -0
  158. package/src/modules/item-management/docs/queries/GetTaxonomyNode.md +7 -0
  159. package/src/modules/item-management/docs/queries/GetTaxonomyNodeAssignments.md +5 -0
  160. package/src/modules/item-management/docs/queries/GetTaxonomyNodeChildren.md +6 -0
  161. package/src/modules/item-management/index.ts +0 -51
  162. package/src/modules/item-management/lib/errors.generated.ts +24 -24
  163. package/src/modules/item-management/lib/permissions.generated.ts +1 -1
  164. package/src/modules/item-management/lib/types.ts +1 -1
  165. package/src/modules/item-management/module.ts +1 -1
  166. package/src/modules/item-management/query/calculateNodeDepth.generated.ts +1 -1
  167. package/src/modules/item-management/query/calculateNodeDepth.test.ts +21 -6
  168. package/src/modules/item-management/query/calculateNodeDepth.ts +2 -2
  169. package/src/modules/item-management/query/calculateSubtreeDepth.generated.ts +1 -1
  170. package/src/modules/item-management/query/calculateSubtreeDepth.test.ts +17 -5
  171. package/src/modules/item-management/query/calculateSubtreeDepth.ts +2 -2
  172. package/src/modules/item-management/query/detectCircularReference.generated.ts +1 -1
  173. package/src/modules/item-management/query/detectCircularReference.test.ts +25 -7
  174. package/src/modules/item-management/query/detectCircularReference.ts +4 -4
  175. package/src/modules/item-management/query/getItem.generated.ts +1 -1
  176. package/src/modules/item-management/query/getItem.test.ts +25 -7
  177. package/src/modules/item-management/query/getItem.ts +2 -2
  178. package/src/modules/item-management/query/getItemTaxonomyAssignment.generated.ts +1 -1
  179. package/src/modules/item-management/query/getItemTaxonomyAssignment.test.ts +9 -3
  180. package/src/modules/item-management/query/getItemTaxonomyAssignment.ts +2 -2
  181. package/src/modules/item-management/query/getTaxonomyNode.generated.ts +1 -1
  182. package/src/modules/item-management/query/getTaxonomyNode.test.ts +17 -5
  183. package/src/modules/item-management/query/getTaxonomyNode.ts +2 -2
  184. package/src/modules/item-management/query/getTaxonomyNodeAssignments.generated.ts +1 -1
  185. package/src/modules/item-management/query/getTaxonomyNodeAssignments.test.ts +9 -3
  186. package/src/modules/item-management/query/getTaxonomyNodeAssignments.ts +2 -2
  187. package/src/modules/item-management/query/getTaxonomyNodeChildren.generated.ts +1 -1
  188. package/src/modules/item-management/query/getTaxonomyNodeChildren.test.ts +13 -4
  189. package/src/modules/item-management/query/getTaxonomyNodeChildren.ts +2 -2
  190. package/src/modules/item-management/tailor.config.ts +6 -4
  191. package/src/modules/item-management/tailor.d.ts +13 -0
  192. package/src/modules/primitives/README.md +8 -0
  193. package/src/modules/primitives/command/activateCategory.generated.ts +1 -1
  194. package/src/modules/primitives/command/activateCategory.test.ts +8 -18
  195. package/src/modules/primitives/command/activateCategory.ts +9 -5
  196. package/src/modules/primitives/command/activateCurrency.generated.ts +1 -1
  197. package/src/modules/primitives/command/activateCurrency.test.ts +8 -18
  198. package/src/modules/primitives/command/activateCurrency.ts +9 -5
  199. package/src/modules/primitives/command/activateUnit.generated.ts +1 -1
  200. package/src/modules/primitives/command/activateUnit.test.ts +8 -15
  201. package/src/modules/primitives/command/activateUnit.ts +9 -5
  202. package/src/modules/primitives/command/createCategory.generated.ts +1 -1
  203. package/src/modules/primitives/command/createCategory.test.ts +29 -44
  204. package/src/modules/primitives/command/createCategory.ts +9 -5
  205. package/src/modules/primitives/command/createCurrency.generated.ts +1 -1
  206. package/src/modules/primitives/command/createCurrency.test.ts +53 -78
  207. package/src/modules/primitives/command/createCurrency.ts +9 -6
  208. package/src/modules/primitives/command/createExchangeRate.generated.ts +1 -1
  209. package/src/modules/primitives/command/createExchangeRate.test.ts +59 -97
  210. package/src/modules/primitives/command/createExchangeRate.ts +13 -7
  211. package/src/modules/primitives/command/createUnit.generated.ts +1 -1
  212. package/src/modules/primitives/command/createUnit.test.ts +59 -90
  213. package/src/modules/primitives/command/createUnit.ts +9 -6
  214. package/src/modules/primitives/command/deactivateCategory.generated.ts +1 -1
  215. package/src/modules/primitives/command/deactivateCategory.test.ts +15 -33
  216. package/src/modules/primitives/command/deactivateCategory.ts +9 -5
  217. package/src/modules/primitives/command/deactivateCurrency.generated.ts +1 -1
  218. package/src/modules/primitives/command/deactivateCurrency.test.ts +12 -26
  219. package/src/modules/primitives/command/deactivateCurrency.ts +9 -5
  220. package/src/modules/primitives/command/deactivateUnit.generated.ts +1 -1
  221. package/src/modules/primitives/command/deactivateUnit.test.ts +15 -30
  222. package/src/modules/primitives/command/deactivateUnit.ts +14 -7
  223. package/src/modules/primitives/command/setBaseCurrency.generated.ts +1 -1
  224. package/src/modules/primitives/command/setBaseCurrency.test.ts +18 -40
  225. package/src/modules/primitives/command/setBaseCurrency.ts +15 -7
  226. package/src/modules/primitives/command/setReferenceUnit.generated.ts +1 -1
  227. package/src/modules/primitives/command/setReferenceUnit.test.ts +22 -44
  228. package/src/modules/primitives/command/setReferenceUnit.ts +21 -9
  229. package/src/modules/primitives/docs/commands/ActivateCategory.md +6 -0
  230. package/src/modules/primitives/docs/commands/ActivateCurrency.md +6 -0
  231. package/src/modules/primitives/docs/commands/ActivateUnit.md +6 -0
  232. package/src/modules/primitives/docs/commands/CreateCategory.md +6 -0
  233. package/src/modules/primitives/docs/commands/CreateCurrency.md +10 -0
  234. package/src/modules/primitives/docs/commands/CreateExchangeRate.md +11 -0
  235. package/src/modules/primitives/docs/commands/CreateUnit.md +10 -0
  236. package/src/modules/primitives/docs/commands/DeactivateCategory.md +7 -0
  237. package/src/modules/primitives/docs/commands/DeactivateCurrency.md +7 -0
  238. package/src/modules/primitives/docs/commands/DeactivateUnit.md +7 -0
  239. package/src/modules/primitives/docs/commands/SetBaseCurrency.md +7 -0
  240. package/src/modules/primitives/docs/commands/SetReferenceUnit.md +7 -0
  241. package/src/modules/primitives/docs/queries/ConvertAmount.md +14 -0
  242. package/src/modules/primitives/docs/queries/ConvertQuantity.md +13 -0
  243. package/src/modules/primitives/docs/queries/GetBaseCurrency.md +5 -0
  244. package/src/modules/primitives/docs/queries/GetCurrency.md +7 -0
  245. package/src/modules/primitives/docs/queries/GetUnit.md +7 -0
  246. package/src/modules/primitives/docs/queries/GetUoMCategory.md +7 -0
  247. package/src/modules/primitives/docs/queries/ListUnitsByCategory.md +15 -5
  248. package/src/modules/primitives/index.ts +0 -49
  249. package/src/modules/primitives/lib/errors.generated.ts +23 -23
  250. package/src/modules/primitives/lib/permissions.generated.ts +1 -1
  251. package/src/modules/primitives/lib/types.ts +1 -1
  252. package/src/modules/primitives/module.ts +1 -1
  253. package/src/modules/primitives/query/convertAmount.generated.ts +1 -1
  254. package/src/modules/primitives/query/convertAmount.test.ts +110 -77
  255. package/src/modules/primitives/query/convertAmount.ts +61 -47
  256. package/src/modules/primitives/query/convertQuantity.generated.ts +1 -1
  257. package/src/modules/primitives/query/convertQuantity.test.ts +99 -69
  258. package/src/modules/primitives/query/convertQuantity.ts +12 -10
  259. package/src/modules/primitives/query/getBaseCurrency.generated.ts +1 -1
  260. package/src/modules/primitives/query/getBaseCurrency.test.ts +10 -4
  261. package/src/modules/primitives/query/getBaseCurrency.ts +2 -2
  262. package/src/modules/primitives/query/getCurrency.generated.ts +1 -1
  263. package/src/modules/primitives/query/getCurrency.test.ts +17 -5
  264. package/src/modules/primitives/query/getCurrency.ts +2 -2
  265. package/src/modules/primitives/query/getUnit.generated.ts +1 -1
  266. package/src/modules/primitives/query/getUnit.test.ts +17 -5
  267. package/src/modules/primitives/query/getUnit.ts +2 -2
  268. package/src/modules/primitives/query/getUoMCategory.generated.ts +1 -1
  269. package/src/modules/primitives/query/getUoMCategory.test.ts +17 -5
  270. package/src/modules/primitives/query/getUoMCategory.ts +2 -2
  271. package/src/modules/primitives/query/listUnitsByCategory.generated.ts +1 -1
  272. package/src/modules/primitives/query/listUnitsByCategory.test.ts +80 -0
  273. package/src/modules/primitives/query/listUnitsByCategory.ts +19 -3
  274. package/src/modules/primitives/tailor.config.ts +6 -4
  275. package/src/modules/primitives/tailor.d.ts +13 -0
  276. package/src/modules/product-management/README.md +52 -0
  277. package/src/modules/product-management/command/activateProduct.generated.ts +6 -0
  278. package/src/modules/product-management/command/activateProduct.test.ts +40 -0
  279. package/src/modules/product-management/command/activateProduct.ts +42 -0
  280. package/src/modules/product-management/command/assignProductToCategory.generated.ts +6 -0
  281. package/src/modules/product-management/command/assignProductToCategory.test.ts +90 -0
  282. package/src/modules/product-management/command/assignProductToCategory.ts +62 -0
  283. package/src/modules/product-management/command/createProduct.generated.ts +6 -0
  284. package/src/modules/product-management/command/createProduct.test.ts +149 -0
  285. package/src/modules/product-management/command/createProduct.ts +73 -0
  286. package/src/modules/product-management/command/createProductAttribute.generated.ts +6 -0
  287. package/src/modules/product-management/command/createProductAttribute.test.ts +70 -0
  288. package/src/modules/product-management/command/createProductAttribute.ts +53 -0
  289. package/src/modules/product-management/command/createProductAttributeValue.generated.ts +6 -0
  290. package/src/modules/product-management/command/createProductAttributeValue.test.ts +68 -0
  291. package/src/modules/product-management/command/createProductAttributeValue.ts +63 -0
  292. package/src/modules/product-management/command/createProductCategory.generated.ts +6 -0
  293. package/src/modules/product-management/command/createProductCategory.test.ts +135 -0
  294. package/src/modules/product-management/command/createProductCategory.ts +82 -0
  295. package/src/modules/product-management/command/deactivateProduct.generated.ts +6 -0
  296. package/src/modules/product-management/command/deactivateProduct.test.ts +40 -0
  297. package/src/modules/product-management/command/deactivateProduct.ts +42 -0
  298. package/src/modules/product-management/command/deleteProduct.generated.ts +6 -0
  299. package/src/modules/product-management/command/deleteProduct.test.ts +42 -0
  300. package/src/modules/product-management/command/deleteProduct.ts +42 -0
  301. package/src/modules/product-management/command/deleteProductAttribute.generated.ts +6 -0
  302. package/src/modules/product-management/command/deleteProductAttribute.test.ts +49 -0
  303. package/src/modules/product-management/command/deleteProductAttribute.ts +45 -0
  304. package/src/modules/product-management/command/deleteProductAttributeValue.generated.ts +6 -0
  305. package/src/modules/product-management/command/deleteProductAttributeValue.test.ts +71 -0
  306. package/src/modules/product-management/command/deleteProductAttributeValue.ts +68 -0
  307. package/src/modules/product-management/command/deleteProductCategory.generated.ts +6 -0
  308. package/src/modules/product-management/command/deleteProductCategory.test.ts +74 -0
  309. package/src/modules/product-management/command/deleteProductCategory.ts +53 -0
  310. package/src/modules/product-management/command/generateVariants.generated.ts +6 -0
  311. package/src/modules/product-management/command/generateVariants.test.ts +365 -0
  312. package/src/modules/product-management/command/generateVariants.ts +168 -0
  313. package/src/modules/product-management/command/moveProductCategory.generated.ts +6 -0
  314. package/src/modules/product-management/command/moveProductCategory.test.ts +170 -0
  315. package/src/modules/product-management/command/moveProductCategory.ts +124 -0
  316. package/src/modules/product-management/command/reactivateProduct.generated.ts +6 -0
  317. package/src/modules/product-management/command/reactivateProduct.test.ts +40 -0
  318. package/src/modules/product-management/command/reactivateProduct.ts +42 -0
  319. package/src/modules/product-management/command/removeProductFromCategory.generated.ts +6 -0
  320. package/src/modules/product-management/command/removeProductFromCategory.test.ts +42 -0
  321. package/src/modules/product-management/command/removeProductFromCategory.ts +32 -0
  322. package/src/modules/product-management/command/setProductAttributeAssignment.generated.ts +6 -0
  323. package/src/modules/product-management/command/setProductAttributeAssignment.test.ts +206 -0
  324. package/src/modules/product-management/command/setProductAttributeAssignment.ts +102 -0
  325. package/src/modules/product-management/command/updateProduct.generated.ts +6 -0
  326. package/src/modules/product-management/command/updateProduct.test.ts +168 -0
  327. package/src/modules/product-management/command/updateProduct.ts +95 -0
  328. package/src/modules/product-management/command/updateProductAttribute.generated.ts +6 -0
  329. package/src/modules/product-management/command/updateProductAttribute.test.ts +101 -0
  330. package/src/modules/product-management/command/updateProductAttribute.ts +68 -0
  331. package/src/modules/product-management/command/updateProductAttributeValue.generated.ts +6 -0
  332. package/src/modules/product-management/command/updateProductAttributeValue.test.ts +80 -0
  333. package/src/modules/product-management/command/updateProductAttributeValue.ts +58 -0
  334. package/src/modules/product-management/command/updateProductCategory.generated.ts +6 -0
  335. package/src/modules/product-management/command/updateProductCategory.test.ts +80 -0
  336. package/src/modules/product-management/command/updateProductCategory.ts +66 -0
  337. package/src/modules/product-management/db/product.ts +47 -0
  338. package/src/modules/product-management/db/productAttribute.ts +26 -0
  339. package/src/modules/product-management/db/productAttributeAssignment.ts +58 -0
  340. package/src/modules/product-management/db/productAttributeValue.ts +39 -0
  341. package/src/modules/product-management/db/productCategory.ts +34 -0
  342. package/src/modules/product-management/db/productCategoryAssignment.ts +49 -0
  343. package/src/modules/product-management/db/productVariant.ts +52 -0
  344. package/src/modules/product-management/docs/commands/ActivateProduct.md +39 -0
  345. package/src/modules/product-management/docs/commands/AssignProductToCategory.md +43 -0
  346. package/src/modules/product-management/docs/commands/CreateProduct.md +48 -0
  347. package/src/modules/product-management/docs/commands/CreateProductAttribute.md +39 -0
  348. package/src/modules/product-management/docs/commands/CreateProductAttributeValue.md +42 -0
  349. package/src/modules/product-management/docs/commands/CreateProductCategory.md +54 -0
  350. package/src/modules/product-management/docs/commands/DeactivateProduct.md +39 -0
  351. package/src/modules/product-management/docs/commands/DeleteProduct.md +42 -0
  352. package/src/modules/product-management/docs/commands/DeleteProductAttribute.md +39 -0
  353. package/src/modules/product-management/docs/commands/DeleteProductAttributeValue.md +42 -0
  354. package/src/modules/product-management/docs/commands/DeleteProductCategory.md +43 -0
  355. package/src/modules/product-management/docs/commands/GenerateVariants.md +68 -0
  356. package/src/modules/product-management/docs/commands/MoveProductCategory.md +54 -0
  357. package/src/modules/product-management/docs/commands/ReactivateProduct.md +38 -0
  358. package/src/modules/product-management/docs/commands/RemoveProductFromCategory.md +34 -0
  359. package/src/modules/product-management/docs/commands/SetProductAttributeAssignment.md +62 -0
  360. package/src/modules/product-management/docs/commands/UpdateProduct.md +61 -0
  361. package/src/modules/product-management/docs/commands/UpdateProductAttribute.md +46 -0
  362. package/src/modules/product-management/docs/commands/UpdateProductAttributeValue.md +47 -0
  363. package/src/modules/product-management/docs/commands/UpdateProductCategory.md +46 -0
  364. package/src/modules/product-management/docs/features/attribute-management.md +48 -0
  365. package/src/modules/product-management/docs/features/product-category.md +71 -0
  366. package/src/modules/product-management/docs/features/product-lifecycle.md +66 -0
  367. package/src/modules/product-management/docs/features/variant-generation.md +77 -0
  368. package/src/modules/product-management/docs/models/Product.md +58 -0
  369. package/src/modules/product-management/docs/models/ProductAttribute.md +37 -0
  370. package/src/modules/product-management/docs/models/ProductAttributeAssignment.md +41 -0
  371. package/src/modules/product-management/docs/models/ProductAttributeValue.md +40 -0
  372. package/src/modules/product-management/docs/models/ProductCategory.md +46 -0
  373. package/src/modules/product-management/docs/models/ProductCategoryAssignment.md +37 -0
  374. package/src/modules/product-management/docs/models/ProductVariant.md +41 -0
  375. package/src/modules/product-management/docs/queries/CalculateCategoryDepth.md +47 -0
  376. package/src/modules/product-management/docs/queries/DetectCategoryCircularReference.md +51 -0
  377. package/src/modules/product-management/docs/queries/GetProduct.md +42 -0
  378. package/src/modules/product-management/docs/queries/GetProductAttribute.md +42 -0
  379. package/src/modules/product-management/docs/queries/GetProductAttributeAssignment.md +34 -0
  380. package/src/modules/product-management/docs/queries/GetProductAttributeValue.md +40 -0
  381. package/src/modules/product-management/docs/queries/GetProductCategory.md +42 -0
  382. package/src/modules/product-management/docs/queries/GetProductCategoryAssignment.md +34 -0
  383. package/src/modules/product-management/docs/queries/GetProductVariant.md +41 -0
  384. package/src/modules/product-management/docs/queries/ListAttributeAssignmentsByAttribute.md +34 -0
  385. package/src/modules/product-management/docs/queries/ListCategoryAssignmentsByProduct.md +35 -0
  386. package/src/modules/product-management/docs/queries/ListProductAttributeAssignments.md +34 -0
  387. package/src/modules/product-management/docs/queries/ListProductAttributeValues.md +36 -0
  388. package/src/modules/product-management/docs/queries/ListProductCategoryAssignments.md +34 -0
  389. package/src/modules/product-management/docs/queries/ListProductCategoryChildren.md +34 -0
  390. package/src/modules/product-management/docs/queries/ListProductVariants.md +34 -0
  391. package/src/modules/product-management/generated/enums.ts +9 -0
  392. package/src/modules/product-management/generated/kysely-tailordb.ts +100 -0
  393. package/src/modules/product-management/index.ts +2 -0
  394. package/src/modules/product-management/lib/_db_deps.ts +17 -0
  395. package/src/modules/product-management/lib/errors.generated.ts +152 -0
  396. package/src/modules/product-management/lib/permissions.generated.ts +25 -0
  397. package/src/modules/product-management/lib/types.ts +51 -0
  398. package/src/modules/product-management/module.ts +201 -0
  399. package/src/modules/product-management/query/calculateCategoryDepth.generated.ts +5 -0
  400. package/src/modules/product-management/query/calculateCategoryDepth.test.ts +72 -0
  401. package/src/modules/product-management/query/calculateCategoryDepth.ts +37 -0
  402. package/src/modules/product-management/query/detectCategoryCircularReference.generated.ts +5 -0
  403. package/src/modules/product-management/query/detectCategoryCircularReference.test.ts +72 -0
  404. package/src/modules/product-management/query/detectCategoryCircularReference.ts +44 -0
  405. package/src/modules/product-management/query/getProduct.generated.ts +5 -0
  406. package/src/modules/product-management/query/getProduct.test.ts +59 -0
  407. package/src/modules/product-management/query/getProduct.ts +18 -0
  408. package/src/modules/product-management/query/getProductAttribute.generated.ts +5 -0
  409. package/src/modules/product-management/query/getProductAttribute.test.ts +59 -0
  410. package/src/modules/product-management/query/getProductAttribute.ts +18 -0
  411. package/src/modules/product-management/query/getProductAttributeAssignment.generated.ts +5 -0
  412. package/src/modules/product-management/query/getProductAttributeAssignment.test.ts +37 -0
  413. package/src/modules/product-management/query/getProductAttributeAssignment.ts +18 -0
  414. package/src/modules/product-management/query/getProductAttributeValue.generated.ts +5 -0
  415. package/src/modules/product-management/query/getProductAttributeValue.test.ts +31 -0
  416. package/src/modules/product-management/query/getProductAttributeValue.ts +16 -0
  417. package/src/modules/product-management/query/getProductCategory.generated.ts +5 -0
  418. package/src/modules/product-management/query/getProductCategory.test.ts +59 -0
  419. package/src/modules/product-management/query/getProductCategory.ts +18 -0
  420. package/src/modules/product-management/query/getProductCategoryAssignment.generated.ts +5 -0
  421. package/src/modules/product-management/query/getProductCategoryAssignment.test.ts +37 -0
  422. package/src/modules/product-management/query/getProductCategoryAssignment.ts +18 -0
  423. package/src/modules/product-management/query/getProductVariant.generated.ts +5 -0
  424. package/src/modules/product-management/query/getProductVariant.test.ts +43 -0
  425. package/src/modules/product-management/query/getProductVariant.ts +20 -0
  426. package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.generated.ts +5 -0
  427. package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.test.ts +31 -0
  428. package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.ts +16 -0
  429. package/src/modules/product-management/query/listCategoryAssignmentsByProduct.generated.ts +5 -0
  430. package/src/modules/product-management/query/listCategoryAssignmentsByProduct.test.ts +31 -0
  431. package/src/modules/product-management/query/listCategoryAssignmentsByProduct.ts +16 -0
  432. package/src/modules/product-management/query/listProductAttributeAssignments.generated.ts +5 -0
  433. package/src/modules/product-management/query/listProductAttributeAssignments.test.ts +31 -0
  434. package/src/modules/product-management/query/listProductAttributeAssignments.ts +16 -0
  435. package/src/modules/product-management/query/listProductAttributeValues.generated.ts +5 -0
  436. package/src/modules/product-management/query/listProductAttributeValues.test.ts +31 -0
  437. package/src/modules/product-management/query/listProductAttributeValues.ts +17 -0
  438. package/src/modules/product-management/query/listProductCategoryAssignments.generated.ts +5 -0
  439. package/src/modules/product-management/query/listProductCategoryAssignments.test.ts +31 -0
  440. package/src/modules/product-management/query/listProductCategoryAssignments.ts +16 -0
  441. package/src/modules/product-management/query/listProductCategoryChildren.generated.ts +5 -0
  442. package/src/modules/product-management/query/listProductCategoryChildren.test.ts +31 -0
  443. package/src/modules/product-management/query/listProductCategoryChildren.ts +16 -0
  444. package/src/modules/product-management/query/listProductVariants.generated.ts +5 -0
  445. package/src/modules/product-management/query/listProductVariants.test.ts +31 -0
  446. package/src/modules/product-management/query/listProductVariants.ts +16 -0
  447. package/src/modules/product-management/tailor.config.ts +13 -0
  448. package/src/modules/product-management/tailor.d.ts +13 -0
  449. package/src/modules/product-management/testing/fixtures.ts +151 -0
  450. package/src/modules/user-management/README.md +9 -3
  451. package/src/modules/user-management/command/activateUser.generated.ts +1 -1
  452. package/src/modules/user-management/command/activateUser.test.ts +12 -65
  453. package/src/modules/user-management/command/activateUser.ts +5 -20
  454. package/src/modules/user-management/command/assignPermissionToRole.generated.ts +1 -1
  455. package/src/modules/user-management/command/assignPermissionToRole.test.ts +25 -60
  456. package/src/modules/user-management/command/assignPermissionToRole.ts +5 -24
  457. package/src/modules/user-management/command/assignRoleToUser.generated.ts +1 -1
  458. package/src/modules/user-management/command/assignRoleToUser.test.ts +35 -87
  459. package/src/modules/user-management/command/assignRoleToUser.ts +5 -24
  460. package/src/modules/user-management/command/createPermission.generated.ts +1 -1
  461. package/src/modules/user-management/command/createPermission.test.ts +23 -33
  462. package/src/modules/user-management/command/createPermission.ts +4 -5
  463. package/src/modules/user-management/command/createRole.generated.ts +1 -1
  464. package/src/modules/user-management/command/createRole.test.ts +17 -27
  465. package/src/modules/user-management/command/createRole.ts +4 -5
  466. package/src/modules/user-management/command/createUser.generated.ts +1 -1
  467. package/src/modules/user-management/command/createUser.test.ts +31 -118
  468. package/src/modules/user-management/command/createUser.ts +7 -25
  469. package/src/modules/user-management/command/deactivateUser.generated.ts +1 -1
  470. package/src/modules/user-management/command/deactivateUser.test.ts +12 -65
  471. package/src/modules/user-management/command/deactivateUser.ts +6 -21
  472. package/src/modules/user-management/command/reactivateUser.generated.ts +1 -1
  473. package/src/modules/user-management/command/reactivateUser.test.ts +13 -66
  474. package/src/modules/user-management/command/reactivateUser.ts +5 -20
  475. package/src/modules/user-management/command/revokePermissionFromRole.generated.ts +1 -1
  476. package/src/modules/user-management/command/revokePermissionFromRole.test.ts +24 -62
  477. package/src/modules/user-management/command/revokePermissionFromRole.ts +5 -24
  478. package/src/modules/user-management/command/revokeRoleFromUser.generated.ts +1 -1
  479. package/src/modules/user-management/command/revokeRoleFromUser.test.ts +24 -60
  480. package/src/modules/user-management/command/revokeRoleFromUser.ts +5 -24
  481. package/src/modules/user-management/docs/commands/ActivateUser.md +7 -0
  482. package/src/modules/user-management/docs/commands/AssignPermissionToRole.md +7 -0
  483. package/src/modules/user-management/docs/commands/AssignRoleToUser.md +9 -0
  484. package/src/modules/user-management/docs/commands/CreatePermission.md +12 -0
  485. package/src/modules/user-management/docs/commands/CreateRole.md +9 -0
  486. package/src/modules/user-management/docs/commands/CreateUser.md +11 -0
  487. package/src/modules/user-management/docs/commands/DeactivateUser.md +7 -0
  488. package/src/modules/user-management/docs/commands/ReactivateUser.md +7 -0
  489. package/src/modules/user-management/docs/commands/RevokePermissionFromRole.md +7 -0
  490. package/src/modules/user-management/docs/commands/RevokeRoleFromUser.md +7 -0
  491. package/src/modules/user-management/index.ts +0 -30
  492. package/src/modules/user-management/lib/errors.generated.ts +14 -14
  493. package/src/modules/user-management/lib/permissions.generated.ts +1 -2
  494. package/src/modules/user-management/lib/recomputeUserPermissions.ts +4 -3
  495. package/src/modules/user-management/lib/types.ts +1 -1
  496. package/src/modules/user-management/module.ts +2 -7
  497. package/src/modules/user-management/tailor.config.ts +6 -4
  498. package/src/modules/user-management/tailor.d.ts +13 -0
  499. package/src/modules/user-management/testing/fixtures.ts +1 -20
  500. package/src/schemas.ts +1 -1
  501. package/src/{modules/shared → shared}/defineCommand.test.ts +23 -7
  502. package/src/{modules/shared → shared}/defineCommand.ts +19 -10
  503. package/src/{modules/shared/internal.ts → shared/index.ts} +9 -1
  504. package/src/shared/pagination.test.ts +43 -0
  505. package/src/shared/pagination.ts +22 -0
  506. package/src/{modules/shared → shared}/types.ts +13 -0
  507. package/src/{modules/testing → testing}/index.ts +14 -7
  508. package/src/testing.ts +1 -1
  509. package/src/util.ts +8 -0
  510. package/templates/config/license.config.json +4 -0
  511. package/templates/scaffold/app/backend/.env.example +1 -0
  512. package/templates/scaffold/app/backend/__dot__gitignore +4 -0
  513. package/templates/scaffold/app/backend/eslint.config.js +32 -0
  514. package/templates/scaffold/app/backend/package.json +31 -0
  515. package/templates/scaffold/app/backend/seed/data/AuditEvent.jsonl +0 -0
  516. package/templates/scaffold/app/backend/seed/data/Permission.jsonl +0 -0
  517. package/templates/scaffold/app/backend/seed/data/Permission.schema.ts +20 -0
  518. package/templates/scaffold/app/backend/seed/data/Role.jsonl +0 -0
  519. package/templates/scaffold/app/backend/seed/data/Role.schema.ts +20 -0
  520. package/templates/scaffold/app/backend/seed/data/RolePermission.jsonl +0 -0
  521. package/templates/scaffold/app/backend/seed/data/RolePermission.schema.ts +24 -0
  522. package/templates/scaffold/app/backend/seed/data/User.jsonl +1 -0
  523. package/templates/scaffold/app/backend/seed/data/User.schema.ts +20 -0
  524. package/templates/scaffold/app/backend/seed/data/UserRole.jsonl +0 -0
  525. package/templates/scaffold/app/backend/seed/data/UserRole.schema.ts +24 -0
  526. package/templates/scaffold/app/backend/seed/data/_User.jsonl +1 -0
  527. package/templates/scaffold/app/backend/seed/data/_User.schema.ts +30 -0
  528. package/templates/scaffold/app/backend/seed/exec.mjs +659 -0
  529. package/templates/scaffold/app/backend/src/executors/permissionCreated.ts +3 -0
  530. package/templates/scaffold/app/backend/src/executors/permissionDeleted.ts +3 -0
  531. package/templates/scaffold/app/backend/src/generated/kysely-tailordb.ts +83 -0
  532. package/templates/scaffold/app/backend/src/modules.ts +9 -0
  533. package/templates/scaffold/app/backend/src/resolvers/createUser.ts +46 -0
  534. package/templates/scaffold/app/backend/tailor.config.ts +68 -0
  535. package/templates/scaffold/app/backend/tailor.d.ts +15 -0
  536. package/templates/scaffold/app/backend/tsconfig.json +19 -0
  537. package/templates/scaffold/app/docs/actors/.gitkeep +0 -0
  538. package/templates/scaffold/app/docs/business-flow/.gitkeep +0 -0
  539. package/templates/scaffold/app/docs/resolver/.gitkeep +0 -0
  540. package/templates/scaffold/app/docs/screen/.gitkeep +0 -0
  541. package/templates/scaffold/app/frontend/.env.example +2 -0
  542. package/templates/scaffold/app/frontend/__dot__gitignore +3 -0
  543. package/templates/scaffold/app/frontend/components.json +23 -0
  544. package/templates/scaffold/app/frontend/eslint.config.js +48 -0
  545. package/templates/scaffold/app/frontend/index.html +13 -0
  546. package/templates/scaffold/app/frontend/package.json +53 -0
  547. package/templates/scaffold/app/frontend/scripts/generate-graphql.mjs +6 -0
  548. package/templates/scaffold/app/frontend/src/App.tsx +58 -0
  549. package/templates/scaffold/app/frontend/src/components/composed/empty-state.tsx +26 -0
  550. package/templates/scaffold/app/frontend/src/components/composed/error-fallback.tsx +28 -0
  551. package/templates/scaffold/app/frontend/src/components/composed/loading.tsx +13 -0
  552. package/templates/scaffold/app/frontend/src/components/ui/badge.tsx +39 -0
  553. package/templates/scaffold/app/frontend/src/components/ui/button.tsx +60 -0
  554. package/templates/scaffold/app/frontend/src/components/ui/card.tsx +75 -0
  555. package/templates/scaffold/app/frontend/src/components/ui/form.tsx +152 -0
  556. package/templates/scaffold/app/frontend/src/components/ui/input.tsx +21 -0
  557. package/templates/scaffold/app/frontend/src/components/ui/label.tsx +21 -0
  558. package/templates/scaffold/app/frontend/src/components/ui/spinner.tsx +16 -0
  559. package/templates/scaffold/app/frontend/src/components/ui/table.tsx +90 -0
  560. package/templates/scaffold/app/frontend/src/graphql/generated/graphql-env.d.ts +103 -0
  561. package/templates/scaffold/app/frontend/src/graphql/generated/schema.graphql +1235 -0
  562. package/templates/scaffold/app/frontend/src/graphql/index.ts +15 -0
  563. package/templates/scaffold/app/frontend/src/index.css +5 -0
  564. package/templates/scaffold/app/frontend/src/lib/auth-client.ts +17 -0
  565. package/templates/scaffold/app/frontend/src/lib/utils.ts +6 -0
  566. package/templates/scaffold/app/frontend/src/main.tsx +10 -0
  567. package/templates/scaffold/app/frontend/src/pages/page.tsx +20 -0
  568. package/templates/scaffold/app/frontend/src/pages/user-management/page.tsx +19 -0
  569. package/templates/scaffold/app/frontend/src/pages/user-management/profile/page.tsx +97 -0
  570. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/components/user-detail.tsx +58 -0
  571. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/page.tsx +51 -0
  572. package/templates/scaffold/app/frontend/src/pages/user-management/user/components/users-table.tsx +101 -0
  573. package/templates/scaffold/app/frontend/src/pages/user-management/user/create/components/create-user-form.tsx +99 -0
  574. package/templates/scaffold/app/frontend/src/pages/user-management/user/create/page.tsx +19 -0
  575. package/templates/scaffold/app/frontend/src/pages/user-management/user/page.tsx +61 -0
  576. package/templates/scaffold/app/frontend/src/providers/graphql-provider.tsx +21 -0
  577. package/templates/scaffold/app/frontend/tsconfig.app.json +35 -0
  578. package/templates/scaffold/app/frontend/tsconfig.json +16 -0
  579. package/templates/scaffold/app/frontend/tsconfig.node.json +23 -0
  580. package/templates/scaffold/app/frontend/vite.config.ts +23 -0
  581. package/templates/scaffold/module/command/.gitkeep +0 -0
  582. package/templates/scaffold/module/db/.gitkeep +0 -0
  583. package/templates/scaffold/module/executor/.gitkeep +0 -0
  584. package/templates/scaffold/module/generated/.gitkeep +0 -0
  585. package/templates/scaffold/module/index.ts +2 -0
  586. package/templates/scaffold/module/lib/errors.ts +1 -0
  587. package/templates/scaffold/module/lib/types.ts +4 -0
  588. package/templates/scaffold/module/module.ts +7 -0
  589. package/templates/scaffold/module/permissions.ts +3 -0
  590. package/templates/scaffold/module/query/.gitkeep +0 -0
  591. package/templates/scaffold/module/tailor.config.ts +13 -0
  592. package/templates/scaffold/module/testing/fixtures.ts +1 -0
  593. package/templates/workflows/erp-kit-check.yml +37 -0
  594. package/dist/cli.js +0 -1654
  595. package/skills/erp-kit-app-2-breakdown/SKILL.md +0 -88
  596. package/skills/erp-kit-app-3-doc-review/SKILL.md +0 -112
  597. package/skills/erp-kit-app-4-impl-spec/SKILL.md +0 -116
  598. package/skills/erp-kit-app-5-implementation/SKILL.md +0 -149
  599. package/skills/erp-kit-app-5-implementation/references/backend.md +0 -232
  600. package/skills/erp-kit-module-1-docs/SKILL.md +0 -111
  601. package/skills/erp-kit-module-2-feature-breakdown/SKILL.md +0 -76
  602. package/skills/erp-kit-module-3-doc-review/SKILL.md +0 -294
  603. package/skills/erp-kit-module-4-tdd/SKILL.md +0 -94
  604. package/skills/erp-kit-module-4-tdd/references/exports.md +0 -8
  605. package/skills/erp-kit-module-5-impl-review/SKILL.md +0 -410
  606. package/src/commands/scaffold-templates.ts +0 -65
  607. package/src/commands/scaffold.test.ts +0 -171
  608. package/src/commands/scaffold.ts +0 -140
  609. package/src/modules/shared/index.ts +0 -1
  610. package/src/modules/user-management/command/logAuditEvent.generated.ts +0 -6
  611. package/src/modules/user-management/command/logAuditEvent.test.ts +0 -187
  612. package/src/modules/user-management/command/logAuditEvent.ts +0 -56
  613. package/src/modules/user-management/db/auditEvent.ts +0 -47
  614. package/src/modules/user-management/docs/commands/LogAuditEvent.md +0 -37
  615. package/src/modules/user-management/docs/features/audit-trail.md +0 -80
  616. package/src/modules/user-management/docs/models/AuditEvent.md +0 -36
  617. /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/cross-module-dependency.md +0 -0
  618. /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/db-relations.md +0 -0
  619. /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/models.md +0 -0
  620. /package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/commands.md +0 -0
  621. /package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/testing.md +0 -0
  622. /package/src/modules/{product-management → audit}/.gitkeep +0 -0
  623. /package/src/{modules/shared → shared}/createContext.test.ts +0 -0
  624. /package/src/{modules/shared → shared}/createContext.ts +0 -0
  625. /package/src/{modules/shared → shared}/definePermissions.test.ts +0 -0
  626. /package/src/{modules/shared → shared}/definePermissions.ts +0 -0
  627. /package/src/{modules/shared → shared}/defineQuery.test.ts +0 -0
  628. /package/src/{modules/shared → shared}/defineQuery.ts +0 -0
  629. /package/src/{modules/shared → shared}/entityTypes.ts +0 -0
  630. /package/src/{modules/shared → shared}/errors.ts +0 -0
  631. /package/src/{modules/shared → shared}/requirePermission.test.ts +0 -0
  632. /package/src/{modules/shared → shared}/requirePermission.ts +0 -0
  633. /package/src/{modules/shared → shared}/result.ts +0 -0
@@ -1,34 +1,23 @@
1
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";
2
+ import { createMockDb } from "../../../testing/index";
3
+ import { Transaction } from "../generated/kysely-tailordb";
5
4
  import {
6
5
  AssignmentNotFoundError,
7
6
  RoleNotFoundError,
8
7
  UserNotFoundError,
9
8
  } from "../lib/errors.generated";
10
- import { activeUser, baseAuditEvent, baseRole, baseUserRole } from "../testing/fixtures";
9
+ import { activeUser, baseRole, baseUserRole } from "../testing/fixtures";
11
10
  import { run } from "./revokeRoleFromUser";
12
11
 
13
12
  describe("revokeRoleFromUser", () => {
14
- const ctx: CommandContext = {
15
- actorId: "test-actor",
16
- permissions: ["user-management:revokeRoleFromUser"],
17
- };
18
-
19
13
  it("throws when user does not exist", async () => {
20
- const { db, spies } = createMockDb<DB>();
14
+ const { db, spies } = createMockDb<Transaction>();
21
15
  spies.select.mockReturnValue(undefined);
22
16
 
23
- const result = await run(
24
- db,
25
- {
26
- userId: "nonexistent-user",
27
- roleId: baseRole.id,
28
- actorId: "actor-1",
29
- },
30
- ctx,
31
- );
17
+ const result = await run(db, {
18
+ userId: "nonexistent-user",
19
+ roleId: baseRole.id,
20
+ });
32
21
  expect(result.ok).toBe(false);
33
22
  if (!result.ok) {
34
23
  expect(result.error).toBeInstanceOf(UserNotFoundError);
@@ -36,18 +25,13 @@ describe("revokeRoleFromUser", () => {
36
25
  });
37
26
 
38
27
  it("throws when role does not exist", async () => {
39
- const { db, spies } = createMockDb<DB>();
28
+ const { db, spies } = createMockDb<Transaction>();
40
29
  spies.select.mockReturnValueOnce(activeUser).mockReturnValueOnce(undefined);
41
30
 
42
- const result = await run(
43
- db,
44
- {
45
- userId: activeUser.id,
46
- roleId: "nonexistent-role",
47
- actorId: "actor-1",
48
- },
49
- ctx,
50
- );
31
+ const result = await run(db, {
32
+ userId: activeUser.id,
33
+ roleId: "nonexistent-role",
34
+ });
51
35
  expect(result.ok).toBe(false);
52
36
  if (!result.ok) {
53
37
  expect(result.error).toBeInstanceOf(RoleNotFoundError);
@@ -55,36 +39,24 @@ describe("revokeRoleFromUser", () => {
55
39
  });
56
40
 
57
41
  it("throws when assignment does not exist", async () => {
58
- const { db, spies } = createMockDb<DB>();
42
+ const { db, spies } = createMockDb<Transaction>();
59
43
  spies.select
60
44
  .mockReturnValueOnce(activeUser)
61
45
  .mockReturnValueOnce(baseRole)
62
46
  .mockReturnValueOnce(undefined);
63
47
 
64
- const result = await run(
65
- db,
66
- {
67
- userId: activeUser.id,
68
- roleId: baseRole.id,
69
- actorId: "actor-1",
70
- },
71
- ctx,
72
- );
48
+ const result = await run(db, {
49
+ userId: activeUser.id,
50
+ roleId: baseRole.id,
51
+ });
73
52
  expect(result.ok).toBe(false);
74
53
  if (!result.ok) {
75
54
  expect(result.error).toBeInstanceOf(AssignmentNotFoundError);
76
55
  }
77
56
  });
78
57
 
79
- it("deletes UserRole and logs ROLE_REVOKED event", async () => {
80
- const { db, spies } = createMockDb<DB>();
81
- const createdAuditEvent = {
82
- ...baseAuditEvent,
83
- eventType: "ROLE_REVOKED" as const,
84
- actorId: "actor-1",
85
- targetId: activeUser.id,
86
- targetType: "User",
87
- };
58
+ it("deletes UserRole and recomputes permissions", async () => {
59
+ const { db, spies } = createMockDb<Transaction>();
88
60
  const updatedUser = { ...activeUser, permissions: [] };
89
61
 
90
62
  spies.select
@@ -93,23 +65,15 @@ describe("revokeRoleFromUser", () => {
93
65
  .mockReturnValueOnce(baseUserRole)
94
66
  .mockReturnValueOnce([]); // Permission keys from recompute (empty after revoke)
95
67
  spies.delete.mockReturnValue(baseUserRole);
96
- spies.insert.mockReturnValue(createdAuditEvent);
97
68
  spies.update.mockReturnValue(updatedUser);
98
69
 
99
- const result = await run(
100
- db,
101
- {
102
- userId: activeUser.id,
103
- roleId: baseRole.id,
104
- actorId: "actor-1",
105
- },
106
- ctx,
107
- );
70
+ const result = await run(db, {
71
+ userId: activeUser.id,
72
+ roleId: baseRole.id,
73
+ });
108
74
 
109
75
  expect(result.ok).toBe(true);
110
76
  if (result.ok) {
111
- expect(result.value.auditEvent.eventType).toBe("ROLE_REVOKED");
112
- expect(result.value.auditEvent.targetId).toBe(activeUser.id);
113
77
  expect(result.value.user.permissions).toEqual([]);
114
78
  }
115
79
  expect(spies.delete).toHaveBeenCalled();
@@ -1,5 +1,5 @@
1
- import { ok, err, type CommandContext } from "../../shared/internal";
2
- import { DB } from "../generated/kysely-tailordb";
1
+ import { ok, err } from "../../../shared";
2
+ import { Transaction } from "../generated/kysely-tailordb";
3
3
  import {
4
4
  AssignmentNotFoundError,
5
5
  RoleNotFoundError,
@@ -10,7 +10,6 @@ import { recomputeUserPermissions } from "../lib/recomputeUserPermissions";
10
10
  export interface RevokeRoleFromUserInput {
11
11
  userId: string;
12
12
  roleId: string;
13
- actorId: string;
14
13
  }
15
14
 
16
15
  /**
@@ -19,8 +18,7 @@ export interface RevokeRoleFromUserInput {
19
18
  * Removes a role from a user.
20
19
  * Throws an error if the assignment does not exist.
21
20
  */
22
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
23
- export async function run(db: DB, input: RevokeRoleFromUserInput, _ctx: CommandContext) {
21
+ export async function run(db: Transaction, input: RevokeRoleFromUserInput) {
24
22
  const user = await db
25
23
  .selectFrom("User")
26
24
  .selectAll()
@@ -46,6 +44,7 @@ export async function run(db: DB, input: RevokeRoleFromUserInput, _ctx: CommandC
46
44
  .selectAll()
47
45
  .where("userId", "=", input.userId)
48
46
  .where("roleId", "=", input.roleId)
47
+ .forUpdate()
49
48
  .executeTakeFirst();
50
49
 
51
50
  if (!existingAssignment) {
@@ -58,25 +57,7 @@ export async function run(db: DB, input: RevokeRoleFromUserInput, _ctx: CommandC
58
57
  .returningAll()
59
58
  .executeTakeFirst();
60
59
 
61
- const auditEvent = await db
62
- .insertInto("AuditEvent")
63
- .values({
64
- eventType: "ROLE_REVOKED",
65
- actorId: input.actorId,
66
- targetId: input.userId,
67
- targetType: "User",
68
- payload: JSON.stringify({
69
- userId: input.userId,
70
- roleId: input.roleId,
71
- roleName: role.name,
72
- }),
73
- createdAt: new Date(),
74
- updatedAt: null,
75
- })
76
- .returningAll()
77
- .executeTakeFirst();
78
-
79
60
  const updatedUser = await recomputeUserPermissions(db, input.userId);
80
61
 
81
- return ok({ user: updatedUser, auditEvent: auditEvent! });
62
+ return ok({ user: updatedUser });
82
63
  }
@@ -34,3 +34,10 @@ flowchart TD
34
34
 
35
35
  - **USER_NOT_FOUND**: User ID does not exist in the system - return not found error with the provided ID
36
36
  - **INVALID_STATUS_TRANSITION**: User is not in PENDING status (already ACTIVE or INACTIVE) - return error with current status and valid transitions
37
+
38
+ ## Test Cases
39
+
40
+ - throws when user does not exist
41
+ - throws when user is already ACTIVE
42
+ - throws when user is INACTIVE (use reactivateUser instead)
43
+ - activates PENDING user to ACTIVE
@@ -37,3 +37,10 @@ flowchart TD
37
37
 
38
38
  - **ROLE_NOT_FOUND**: Role ID does not exist in the system - return not found error with the provided role ID
39
39
  - **PERMISSION_NOT_FOUND**: Permission ID does not exist in the system - return not found error with the provided permission ID
40
+
41
+ ## Test Cases
42
+
43
+ - throws when role does not exist
44
+ - throws when permission does not exist
45
+ - returns success when assignment already exists (idempotent)
46
+ - creates RolePermission
@@ -41,3 +41,12 @@ flowchart TD
41
41
  - **USER_NOT_FOUND**: User ID does not exist in the system - return not found error with the provided user ID
42
42
  - **ROLE_NOT_FOUND**: Role ID does not exist in the system - return not found error with the provided role ID
43
43
  - **USER_NOT_ACTIVE**: User is in PENDING or INACTIVE status - return error indicating only ACTIVE users can receive role assignments
44
+
45
+ ## Test Cases
46
+
47
+ - throws when user does not exist
48
+ - throws when role does not exist
49
+ - throws when user is PENDING
50
+ - throws when user is INACTIVE
51
+ - returns success when assignment already exists (idempotent)
52
+ - creates UserRole and recomputes permissions
@@ -33,3 +33,15 @@ flowchart TD
33
33
 
34
34
  - **INVALID_PERMISSION_KEY_FORMAT**: Key does not match `resource:action` pattern
35
35
  - **DUPLICATE_PERMISSION_KEY**: Permission with the same key already exists
36
+
37
+ ## Test Cases
38
+
39
+ - throws when key is empty
40
+ - throws when key format is invalid (no colon)
41
+ - throws when key format is invalid (multiple colons)
42
+ - throws when key format is invalid (empty resource)
43
+ - throws when key format is invalid (empty action)
44
+ - throws when permission key already exists
45
+ - creates permission with valid key
46
+ - creates permission with description
47
+ - passes custom fields through to insert
@@ -33,3 +33,12 @@ flowchart TD
33
33
 
34
34
  - **MISSING_REQUIRED_FIELD**: Role name not provided - return validation error indicating name is required
35
35
  - **DUPLICATE_ROLE_NAME**: Role with the same name already exists
36
+
37
+ ## Test Cases
38
+
39
+ - throws when name is empty
40
+ - throws when name is whitespace only
41
+ - throws when role name already exists
42
+ - creates role with valid name
43
+ - creates role with description
44
+ - passes custom fields through to insert
@@ -39,3 +39,14 @@ flowchart TD
39
39
  - **USER_ALREADY_EXISTS**: Email address is already registered in the system - return conflict error with message indicating email is taken
40
40
  - **INVALID_EMAIL**: Email does not follow valid email format - return validation error with format requirements
41
41
  - **MISSING_REQUIRED_FIELD**: Name or email not provided - return validation error listing missing fields
42
+
43
+ ## Test Cases
44
+
45
+ - throws when email is empty
46
+ - throws when name is empty
47
+ - throws when name is whitespace only
48
+ - throws when email format is invalid (no @)
49
+ - throws when email format is invalid (no domain)
50
+ - throws when email already exists
51
+ - creates user with PENDING status
52
+ - passes custom fields through to insert
@@ -36,3 +36,10 @@ flowchart TD
36
36
 
37
37
  - **USER_NOT_FOUND**: User ID does not exist in the system - return not found error with the provided ID
38
38
  - **INVALID_STATUS_TRANSITION**: User is not in ACTIVE status (PENDING or already INACTIVE) - return error with current status and valid transitions
39
+
40
+ ## Test Cases
41
+
42
+ - throws when user does not exist
43
+ - throws when user is PENDING
44
+ - throws when user is already INACTIVE
45
+ - deactivates ACTIVE user to INACTIVE
@@ -35,3 +35,10 @@ flowchart TD
35
35
 
36
36
  - **USER_NOT_FOUND**: User ID does not exist in the system - return not found error with the provided ID
37
37
  - **INVALID_STATUS_TRANSITION**: User is not in INACTIVE status (PENDING or already ACTIVE) - return error with current status and valid transitions
38
+
39
+ ## Test Cases
40
+
41
+ - throws when user does not exist
42
+ - throws when user is PENDING
43
+ - throws when user is already ACTIVE
44
+ - reactivates INACTIVE user to ACTIVE
@@ -38,3 +38,10 @@ flowchart TD
38
38
  - **ROLE_NOT_FOUND**: Role ID does not exist in the system - return not found error with the provided role ID
39
39
  - **PERMISSION_NOT_FOUND**: Permission ID does not exist in the system - return not found error with the provided permission ID
40
40
  - **ASSIGNMENT_NOT_FOUND**: Role does not have this permission assigned - return not found error indicating the association does not exist
41
+
42
+ ## Test Cases
43
+
44
+ - throws when role does not exist
45
+ - throws when permission does not exist
46
+ - throws when assignment does not exist
47
+ - deletes RolePermission
@@ -38,3 +38,10 @@ flowchart TD
38
38
  - **USER_NOT_FOUND**: User ID does not exist in the system - return not found error with the provided user ID
39
39
  - **ROLE_NOT_FOUND**: Role ID does not exist in the system - return not found error with the provided role ID
40
40
  - **ASSIGNMENT_NOT_FOUND**: User does not have this role assigned - return not found error indicating the association does not exist
41
+
42
+ ## Test Cases
43
+
44
+ - throws when user does not exist
45
+ - throws when role does not exist
46
+ - throws when assignment does not exist
47
+ - deletes UserRole and recomputes permissions
@@ -1,32 +1,2 @@
1
1
  export { defineModule } from "./module";
2
2
  export { permissions, own, all } from "./lib/permissions.generated";
3
-
4
- // generated types
5
- export { AuditEventEventType, UserStatus } from "./generated/enums";
6
-
7
- // errors
8
- export {
9
- UserNotFoundError,
10
- UserAlreadyExistsError,
11
- UserNotActiveError,
12
- InvalidEmailError,
13
- MissingRequiredFieldError,
14
- InvalidStatusTransitionError,
15
- PermissionNotFoundError,
16
- DuplicatePermissionKeyError,
17
- InvalidPermissionKeyFormatError,
18
- RoleNotFoundError,
19
- DuplicateRoleNameError,
20
- AssignmentNotFoundError,
21
- InvalidEventTypeError,
22
- } from "./lib/errors.generated";
23
-
24
- // input types
25
- export { type ActivateUserInput } from "./command/activateUser";
26
- export { type DeactivateUserInput } from "./command/deactivateUser";
27
- export { type ReactivateUserInput } from "./command/reactivateUser";
28
- export { type AssignPermissionToRoleInput } from "./command/assignPermissionToRole";
29
- export { type RevokePermissionFromRoleInput } from "./command/revokePermissionFromRole";
30
- export { type AssignRoleToUserInput } from "./command/assignRoleToUser";
31
- export { type RevokeRoleFromUserInput } from "./command/revokeRoleFromUser";
32
- export { type LogAuditEventInput } from "./command/logAuditEvent";
@@ -1,67 +1,67 @@
1
1
  // @generated — do not edit
2
- import { createDomainError } from "../../shared/internal";
2
+ import { createDomainError } from "../../../shared";
3
3
 
4
4
  export const UserNotFoundError = createDomainError(
5
- "UserNotFoundError", "USER_NOT_FOUND",
5
+ "UserNotFoundError", "USER_MANAGEMENT_USER_NOT_FOUND",
6
6
  (identifier: string) => `User ID does not exist in the system - return not found error with the provided ID: ${identifier}`,
7
7
  );
8
8
 
9
9
  export const InvalidStatusTransitionError = createDomainError(
10
- "InvalidStatusTransitionError", "INVALID_STATUS_TRANSITION",
10
+ "InvalidStatusTransitionError", "USER_MANAGEMENT_INVALID_STATUS_TRANSITION",
11
11
  (identifier: string) => `User is not in PENDING status (already ACTIVE or INACTIVE) - return error with current status and valid transitions: ${identifier}`,
12
12
  );
13
13
 
14
14
  export const RoleNotFoundError = createDomainError(
15
- "RoleNotFoundError", "ROLE_NOT_FOUND",
15
+ "RoleNotFoundError", "USER_MANAGEMENT_ROLE_NOT_FOUND",
16
16
  (identifier: string) => `Role ID does not exist in the system - return not found error with the provided role ID: ${identifier}`,
17
17
  );
18
18
 
19
19
  export const PermissionNotFoundError = createDomainError(
20
- "PermissionNotFoundError", "PERMISSION_NOT_FOUND",
20
+ "PermissionNotFoundError", "USER_MANAGEMENT_PERMISSION_NOT_FOUND",
21
21
  (identifier: string) => `Permission ID does not exist in the system - return not found error with the provided permission ID: ${identifier}`,
22
22
  );
23
23
 
24
24
  export const UserNotActiveError = createDomainError(
25
- "UserNotActiveError", "USER_NOT_ACTIVE",
25
+ "UserNotActiveError", "USER_MANAGEMENT_USER_NOT_ACTIVE",
26
26
  (identifier: string) => `User is in PENDING or INACTIVE status - return error indicating only ACTIVE users can receive role assignments: ${identifier}`,
27
27
  );
28
28
 
29
29
  export const InvalidPermissionKeyFormatError = createDomainError(
30
- "InvalidPermissionKeyFormatError", "INVALID_PERMISSION_KEY_FORMAT",
30
+ "InvalidPermissionKeyFormatError", "USER_MANAGEMENT_INVALID_PERMISSION_KEY_FORMAT",
31
31
  (identifier: string) => `Key does not match resource:action pattern: ${identifier}`,
32
32
  );
33
33
 
34
34
  export const DuplicatePermissionKeyError = createDomainError(
35
- "DuplicatePermissionKeyError", "DUPLICATE_PERMISSION_KEY",
35
+ "DuplicatePermissionKeyError", "USER_MANAGEMENT_DUPLICATE_PERMISSION_KEY",
36
36
  (identifier: string) => `Permission with the same key already exists: ${identifier}`,
37
37
  );
38
38
 
39
39
  export const MissingRequiredFieldError = createDomainError(
40
- "MissingRequiredFieldError", "MISSING_REQUIRED_FIELD",
40
+ "MissingRequiredFieldError", "USER_MANAGEMENT_MISSING_REQUIRED_FIELD",
41
41
  (identifier: string) => `Role name not provided - return validation error indicating name is required: ${identifier}`,
42
42
  );
43
43
 
44
44
  export const DuplicateRoleNameError = createDomainError(
45
- "DuplicateRoleNameError", "DUPLICATE_ROLE_NAME",
45
+ "DuplicateRoleNameError", "USER_MANAGEMENT_DUPLICATE_ROLE_NAME",
46
46
  (identifier: string) => `Role with the same name already exists: ${identifier}`,
47
47
  );
48
48
 
49
49
  export const UserAlreadyExistsError = createDomainError(
50
- "UserAlreadyExistsError", "USER_ALREADY_EXISTS",
50
+ "UserAlreadyExistsError", "USER_MANAGEMENT_USER_ALREADY_EXISTS",
51
51
  (identifier: string) => `Email address is already registered in the system - return conflict error with message indicating email is taken: ${identifier}`,
52
52
  );
53
53
 
54
54
  export const InvalidEmailError = createDomainError(
55
- "InvalidEmailError", "INVALID_EMAIL",
55
+ "InvalidEmailError", "USER_MANAGEMENT_INVALID_EMAIL",
56
56
  (identifier: string) => `Email does not follow valid email format - return validation error with format requirements: ${identifier}`,
57
57
  );
58
58
 
59
59
  export const InvalidEventTypeError = createDomainError(
60
- "InvalidEventTypeError", "INVALID_EVENT_TYPE",
60
+ "InvalidEventTypeError", "USER_MANAGEMENT_INVALID_EVENT_TYPE",
61
61
  (identifier: string) => `Event type is not one of the recognized types - return validation error with list of valid event types: ${identifier}`,
62
62
  );
63
63
 
64
64
  export const AssignmentNotFoundError = createDomainError(
65
- "AssignmentNotFoundError", "ASSIGNMENT_NOT_FOUND",
65
+ "AssignmentNotFoundError", "USER_MANAGEMENT_ASSIGNMENT_NOT_FOUND",
66
66
  (identifier: string) => `Role does not have this permission assigned - return not found error indicating the association does not exist: ${identifier}`,
67
67
  );
@@ -1,5 +1,5 @@
1
1
  // @generated — do not edit
2
- import { definePermissions } from "../../shared/internal";
2
+ import { definePermissions } from "../../../shared";
3
3
 
4
4
  export const { permissions, own, all } = definePermissions("user-management", [
5
5
  "activateUser",
@@ -9,7 +9,6 @@ export const { permissions, own, all } = definePermissions("user-management", [
9
9
  "createRole",
10
10
  "createUser",
11
11
  "deactivateUser",
12
- "logAuditEvent",
13
12
  "reactivateUser",
14
13
  "revokePermissionFromRole",
15
14
  "revokeRoleFromUser",
@@ -1,11 +1,12 @@
1
- import { Kysely } from "kysely";
1
+ import { type TailordbKysely } from "@tailor-platform/sdk/kysely";
2
+ import type { Transaction as KyselyTransaction } from "kysely";
2
3
  import { DB } from "../generated/kysely-tailordb";
3
4
  import { User } from "./types";
4
5
 
5
6
  export const recomputeUserPermissions = async <
6
7
  T extends { User: object; UserRole: object; RolePermission: object; Permission: object },
7
8
  >(
8
- db: Kysely<T>,
9
+ db: TailordbKysely<T> | KyselyTransaction<T>,
9
10
  userId: string,
10
11
  ): Promise<User<T>> => {
11
12
  const _db = db as unknown as DB;
@@ -33,7 +34,7 @@ export const recomputeUserPermissions = async <
33
34
  export const recomputePermissionsForUsersWithRole = async <
34
35
  T extends { User: object; UserRole: object; RolePermission: object; Permission: object },
35
36
  >(
36
- db: Kysely<T>,
37
+ db: TailordbKysely<T> | KyselyTransaction<T>,
37
38
  roleId: string,
38
39
  ): Promise<User<T>[]> => {
39
40
  const _db = db as unknown as DB;
@@ -1,4 +1,4 @@
1
- import type { InferSchema, Selectable, Insertable, Updateable } from "../../shared/internal";
1
+ import type { InferSchema, Selectable, Insertable, Updateable } from "../../../shared";
2
2
  import type { DB } from "../generated/kysely-tailordb";
3
3
 
4
4
  export type Schema = InferSchema<DB>;
@@ -1,5 +1,5 @@
1
1
  import { type TailorAnyDBField } from "@tailor-platform/sdk";
2
- import { type EmptyFields, type FieldsToInsertable } from "../shared/internal";
2
+ import { type EmptyFields, type FieldsToInsertable } from "../../shared";
3
3
  import { createUser } from "./command/createUser.generated";
4
4
  import { createRole } from "./command/createRole.generated";
5
5
  import { createPermission } from "./command/createPermission.generated";
@@ -10,8 +10,6 @@ import { assignPermissionToRole } from "./command/assignPermissionToRole.generat
10
10
  import { revokePermissionFromRole } from "./command/revokePermissionFromRole.generated";
11
11
  import { assignRoleToUser } from "./command/assignRoleToUser.generated";
12
12
  import { revokeRoleFromUser } from "./command/revokeRoleFromUser.generated";
13
- import { logAuditEvent } from "./command/logAuditEvent.generated";
14
- import { createAuditEventType, CreateAuditEventTypeParams } from "./db/auditEvent";
15
13
  import { createPermissionType, CreatePermissionTypeParams } from "./db/permission";
16
14
  import { createRoleType, CreateRoleTypeParams } from "./db/role";
17
15
  import { createRolePermissionType, CreateRolePermissionTypeParams } from "./db/rolePermission";
@@ -33,7 +31,6 @@ export interface DefineModuleParams<
33
31
  role?: CreateRoleTypeParams<RF>;
34
32
  userRole?: CreateUserRoleTypeParams;
35
33
  rolePermission?: CreateRolePermissionTypeParams;
36
- auditEvent?: CreateAuditEventTypeParams;
37
34
  }
38
35
 
39
36
  export const defineModule = <
@@ -48,7 +45,6 @@ export const defineModule = <
48
45
  const role = createRoleType(params.role ?? {});
49
46
  const userRole = createUserRoleType(params.userRole ?? {});
50
47
  const rolePermission = createRolePermissionType(params.rolePermission ?? {});
51
- const auditEvent = createAuditEventType(params.auditEvent ?? {});
52
48
 
53
49
  const rolePermissionCreated = recomputeOnRolePermissionCreated({
54
50
  namespace: params.dbNamespace,
@@ -58,7 +54,7 @@ export const defineModule = <
58
54
  });
59
55
 
60
56
  return {
61
- db: { user, permission, role, userRole, rolePermission, auditEvent },
57
+ db: { user, permission, role, userRole, rolePermission },
62
58
  executors: { rolePermissionCreated, rolePermissionDeleted },
63
59
  commands: {
64
60
  createUser: createUser<FieldsToInsertable<UF>>(),
@@ -71,7 +67,6 @@ export const defineModule = <
71
67
  revokePermissionFromRole: revokePermissionFromRole(),
72
68
  assignRoleToUser: assignRoleToUser(),
73
69
  revokeRoleFromUser: revokeRoleFromUser(),
74
- logAuditEvent: logAuditEvent(),
75
70
  },
76
71
  };
77
72
  };
@@ -1,11 +1,13 @@
1
- import { defineConfig, defineGenerators } from "@tailor-platform/sdk";
1
+ import { defineConfig, definePlugins } from "@tailor-platform/sdk";
2
+ import { kyselyTypePlugin } from "@tailor-platform/sdk/plugin/kysely-type";
3
+ import { enumConstantsPlugin } from "@tailor-platform/sdk/plugin/enum-constants";
2
4
 
3
5
  export default defineConfig({
4
6
  name: "user-management",
5
7
  db: { "main-db": { files: [`./db/*.ts`] } },
6
8
  });
7
9
 
8
- export const generators = defineGenerators(
9
- ["@tailor-platform/kysely-type", { distPath: `./generated/kysely-tailordb.ts` }],
10
- ["@tailor-platform/enum-constants", { distPath: "./generated/enums.ts" }],
10
+ export const plugins = definePlugins(
11
+ kyselyTypePlugin({ distPath: `./generated/kysely-tailordb.ts` }),
12
+ enumConstantsPlugin({ distPath: "./generated/enums.ts" }),
11
13
  );
@@ -0,0 +1,13 @@
1
+ // This file is auto-generated by @tailor-platform/sdk
2
+ // Do not edit this file manually
3
+ // Regenerated automatically when running 'tailor-sdk apply' or 'tailor-sdk generate'
4
+
5
+ declare module "@tailor-platform/sdk" {
6
+ interface AttributeMap {}
7
+ interface AttributeList {
8
+ __tuple?: [];
9
+ }
10
+ interface Env {}
11
+ }
12
+
13
+ export {};
@@ -1,12 +1,4 @@
1
- import type {
2
- AuditEvent,
3
- Permission,
4
- Role,
5
- RolePermission,
6
- Schema,
7
- User,
8
- UserRole,
9
- } from "../lib/types";
1
+ import type { Permission, Role, RolePermission, Schema, User, UserRole } from "../lib/types";
10
2
 
11
3
  export const pendingUser = {
12
4
  id: "user-pending-1",
@@ -85,14 +77,3 @@ export const baseRolePermission = {
85
77
  createdAt: new Date("2024-01-01T00:00:00.000Z"),
86
78
  updatedAt: null,
87
79
  } as const satisfies RolePermission<Schema>;
88
-
89
- export const baseAuditEvent = {
90
- id: "audit-event-1",
91
- eventType: "USER_CREATED",
92
- actorId: "user-active-1",
93
- targetId: "user-pending-1",
94
- targetType: "User",
95
- payload: JSON.stringify({ email: "pending@example.com" }),
96
- createdAt: new Date("2024-01-01T00:00:00.000Z"),
97
- updatedAt: null,
98
- } as const satisfies AuditEvent<Schema>;
package/src/schemas.ts CHANGED
@@ -12,7 +12,7 @@ export const MODULE_SCHEMAS = {
12
12
  } as const;
13
13
 
14
14
  export const APP_COMPOSE_SCHEMAS = {
15
- requirements: path.join(SCHEMAS_ROOT, "app-compose", "requirements.yml"),
15
+ app: path.join(SCHEMAS_ROOT, "app-compose", "requirements.yml"),
16
16
  actors: path.join(SCHEMAS_ROOT, "app-compose", "actors.yml"),
17
17
  "business-flow": path.join(SCHEMAS_ROOT, "app-compose", "business-flow.yml"),
18
18
  story: path.join(SCHEMAS_ROOT, "app-compose", "story.yml"),