@endora-commerce/mod-organizations 0.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +62 -0
  3. package/dist/admin/components/OrganizationSalesRepsTab.d.ts +27 -0
  4. package/dist/admin/components/OrganizationSalesRepsTab.d.ts.map +1 -0
  5. package/dist/admin/components/OrganizationSalesRepsTab.js +170 -0
  6. package/dist/admin/components/OrganizationSalesRepsTab.js.map +1 -0
  7. package/dist/admin/index.d.ts +30 -0
  8. package/dist/admin/index.d.ts.map +1 -0
  9. package/dist/admin/index.js +59 -0
  10. package/dist/admin/index.js.map +1 -0
  11. package/dist/admin/pages/OrganizationDetail.d.ts +9 -0
  12. package/dist/admin/pages/OrganizationDetail.d.ts.map +1 -0
  13. package/dist/admin/pages/OrganizationDetail.js +247 -0
  14. package/dist/admin/pages/OrganizationDetail.js.map +1 -0
  15. package/dist/admin/pages/OrganizationsList.d.ts +9 -0
  16. package/dist/admin/pages/OrganizationsList.d.ts.map +1 -0
  17. package/dist/admin/pages/OrganizationsList.js +73 -0
  18. package/dist/admin/pages/OrganizationsList.js.map +1 -0
  19. package/dist/admin/panels/ApplicablePriceListsPanel.d.ts +12 -0
  20. package/dist/admin/panels/ApplicablePriceListsPanel.d.ts.map +1 -0
  21. package/dist/admin/panels/ApplicablePriceListsPanel.js +49 -0
  22. package/dist/admin/panels/ApplicablePriceListsPanel.js.map +1 -0
  23. package/dist/admin/panels/FulfilmentStrategyPanel.d.ts +16 -0
  24. package/dist/admin/panels/FulfilmentStrategyPanel.d.ts.map +1 -0
  25. package/dist/admin/panels/FulfilmentStrategyPanel.js +29 -0
  26. package/dist/admin/panels/FulfilmentStrategyPanel.js.map +1 -0
  27. package/dist/admin/panels/HierarchyPanel.d.ts +15 -0
  28. package/dist/admin/panels/HierarchyPanel.d.ts.map +1 -0
  29. package/dist/admin/panels/HierarchyPanel.js +65 -0
  30. package/dist/admin/panels/HierarchyPanel.js.map +1 -0
  31. package/dist/admin/panels/ModerationActionsPanel.d.ts +28 -0
  32. package/dist/admin/panels/ModerationActionsPanel.d.ts.map +1 -0
  33. package/dist/admin/panels/ModerationActionsPanel.js +111 -0
  34. package/dist/admin/panels/ModerationActionsPanel.js.map +1 -0
  35. package/dist/admin/panels/RestrictionsPanel.d.ts +24 -0
  36. package/dist/admin/panels/RestrictionsPanel.d.ts.map +1 -0
  37. package/dist/admin/panels/RestrictionsPanel.js +121 -0
  38. package/dist/admin/panels/RestrictionsPanel.js.map +1 -0
  39. package/dist/admin/panels/VatValidationPanel.d.ts +28 -0
  40. package/dist/admin/panels/VatValidationPanel.d.ts.map +1 -0
  41. package/dist/admin/panels/VatValidationPanel.js +79 -0
  42. package/dist/admin/panels/VatValidationPanel.js.map +1 -0
  43. package/dist/backend/commands/move.command.d.ts +11 -0
  44. package/dist/backend/commands/move.command.d.ts.map +1 -0
  45. package/dist/backend/commands/move.command.js +11 -0
  46. package/dist/backend/commands/move.command.js.map +1 -0
  47. package/dist/backend/commands/set-cart-approval-policy.command.d.ts +31 -0
  48. package/dist/backend/commands/set-cart-approval-policy.command.d.ts.map +1 -0
  49. package/dist/backend/commands/set-cart-approval-policy.command.js +56 -0
  50. package/dist/backend/commands/set-cart-approval-policy.command.js.map +1 -0
  51. package/dist/backend/commands/set-credit-mode.command.d.ts +16 -0
  52. package/dist/backend/commands/set-credit-mode.command.d.ts.map +1 -0
  53. package/dist/backend/commands/set-credit-mode.command.js +25 -0
  54. package/dist/backend/commands/set-credit-mode.command.js.map +1 -0
  55. package/dist/backend/commands/set-parent.command.d.ts +26 -0
  56. package/dist/backend/commands/set-parent.command.d.ts.map +1 -0
  57. package/dist/backend/commands/set-parent.command.js +51 -0
  58. package/dist/backend/commands/set-parent.command.js.map +1 -0
  59. package/dist/backend/demo/reset.d.ts +20 -0
  60. package/dist/backend/demo/reset.d.ts.map +1 -0
  61. package/dist/backend/demo/reset.js +11 -0
  62. package/dist/backend/demo/reset.js.map +1 -0
  63. package/dist/backend/demo/rows.d.ts +44 -0
  64. package/dist/backend/demo/rows.d.ts.map +1 -0
  65. package/dist/backend/demo/rows.js +44 -0
  66. package/dist/backend/demo/rows.js.map +1 -0
  67. package/dist/backend/demo/seed.d.ts +20 -0
  68. package/dist/backend/demo/seed.d.ts.map +1 -0
  69. package/dist/backend/demo/seed.js +28 -0
  70. package/dist/backend/demo/seed.js.map +1 -0
  71. package/dist/backend/email-templates/invitation.d.ts +23 -0
  72. package/dist/backend/email-templates/invitation.d.ts.map +1 -0
  73. package/dist/backend/email-templates/invitation.js +35 -0
  74. package/dist/backend/email-templates/invitation.js.map +1 -0
  75. package/dist/backend/email-templates/transactional-defaults.d.ts +54 -0
  76. package/dist/backend/email-templates/transactional-defaults.d.ts.map +1 -0
  77. package/dist/backend/email-templates/transactional-defaults.js +242 -0
  78. package/dist/backend/email-templates/transactional-defaults.js.map +1 -0
  79. package/dist/backend/email-templates/verification.d.ts +14 -0
  80. package/dist/backend/email-templates/verification.d.ts.map +1 -0
  81. package/dist/backend/email-templates/verification.js +34 -0
  82. package/dist/backend/email-templates/verification.js.map +1 -0
  83. package/dist/backend/entities/email-verification-token.entity.d.ts +17 -0
  84. package/dist/backend/entities/email-verification-token.entity.d.ts.map +1 -0
  85. package/dist/backend/entities/email-verification-token.entity.js +60 -0
  86. package/dist/backend/entities/email-verification-token.entity.js.map +1 -0
  87. package/dist/backend/entities/organization-delivery-method-link.entity.d.ts +14 -0
  88. package/dist/backend/entities/organization-delivery-method-link.entity.d.ts.map +1 -0
  89. package/dist/backend/entities/organization-delivery-method-link.entity.js +41 -0
  90. package/dist/backend/entities/organization-delivery-method-link.entity.js.map +1 -0
  91. package/dist/backend/entities/organization-invitation.entity.d.ts +21 -0
  92. package/dist/backend/entities/organization-invitation.entity.d.ts.map +1 -0
  93. package/dist/backend/entities/organization-invitation.entity.js +85 -0
  94. package/dist/backend/entities/organization-invitation.entity.js.map +1 -0
  95. package/dist/backend/entities/organization-payment-method-link.entity.d.ts +14 -0
  96. package/dist/backend/entities/organization-payment-method-link.entity.d.ts.map +1 -0
  97. package/dist/backend/entities/organization-payment-method-link.entity.js +41 -0
  98. package/dist/backend/entities/organization-payment-method-link.entity.js.map +1 -0
  99. package/dist/backend/entities/organization-sales-rep-assignment.entity.d.ts +17 -0
  100. package/dist/backend/entities/organization-sales-rep-assignment.entity.d.ts.map +1 -0
  101. package/dist/backend/entities/organization-sales-rep-assignment.entity.js +56 -0
  102. package/dist/backend/entities/organization-sales-rep-assignment.entity.js.map +1 -0
  103. package/dist/backend/entities/organization-tax-id-validation.entity.d.ts +29 -0
  104. package/dist/backend/entities/organization-tax-id-validation.entity.d.ts.map +1 -0
  105. package/dist/backend/entities/organization-tax-id-validation.entity.js +78 -0
  106. package/dist/backend/entities/organization-tax-id-validation.entity.js.map +1 -0
  107. package/dist/backend/entities/organization-warehouse-link.entity.d.ts +15 -0
  108. package/dist/backend/entities/organization-warehouse-link.entity.d.ts.map +1 -0
  109. package/dist/backend/entities/organization-warehouse-link.entity.js +42 -0
  110. package/dist/backend/entities/organization-warehouse-link.entity.js.map +1 -0
  111. package/dist/backend/entities/organization.entity.d.ts +125 -0
  112. package/dist/backend/entities/organization.entity.d.ts.map +1 -0
  113. package/dist/backend/entities/organization.entity.js +282 -0
  114. package/dist/backend/entities/organization.entity.js.map +1 -0
  115. package/dist/backend/index.d.ts +250 -0
  116. package/dist/backend/index.d.ts.map +1 -0
  117. package/dist/backend/index.js +506 -0
  118. package/dist/backend/index.js.map +1 -0
  119. package/dist/backend/integrations/ministerstwo-finansow-client.d.ts +22 -0
  120. package/dist/backend/integrations/ministerstwo-finansow-client.d.ts.map +1 -0
  121. package/dist/backend/integrations/ministerstwo-finansow-client.js +172 -0
  122. package/dist/backend/integrations/ministerstwo-finansow-client.js.map +1 -0
  123. package/dist/backend/integrations/vies-client.d.ts +18 -0
  124. package/dist/backend/integrations/vies-client.d.ts.map +1 -0
  125. package/dist/backend/integrations/vies-client.js +133 -0
  126. package/dist/backend/integrations/vies-client.js.map +1 -0
  127. package/dist/backend/plugin.d.ts +126 -0
  128. package/dist/backend/plugin.d.ts.map +1 -0
  129. package/dist/backend/plugin.js +139 -0
  130. package/dist/backend/plugin.js.map +1 -0
  131. package/dist/backend/routes.admin.d.ts +66 -0
  132. package/dist/backend/routes.admin.d.ts.map +1 -0
  133. package/dist/backend/routes.admin.js +711 -0
  134. package/dist/backend/routes.admin.js.map +1 -0
  135. package/dist/backend/routes.customer.d.ts +33 -0
  136. package/dist/backend/routes.customer.d.ts.map +1 -0
  137. package/dist/backend/routes.customer.js +139 -0
  138. package/dist/backend/routes.customer.js.map +1 -0
  139. package/dist/backend/routes.members.d.ts +31 -0
  140. package/dist/backend/routes.members.d.ts.map +1 -0
  141. package/dist/backend/routes.members.js +109 -0
  142. package/dist/backend/routes.members.js.map +1 -0
  143. package/dist/backend/routes.public.d.ts +49 -0
  144. package/dist/backend/routes.public.d.ts.map +1 -0
  145. package/dist/backend/routes.public.js +220 -0
  146. package/dist/backend/routes.public.js.map +1 -0
  147. package/dist/backend/routes.sales-reps.d.ts +46 -0
  148. package/dist/backend/routes.sales-reps.d.ts.map +1 -0
  149. package/dist/backend/routes.sales-reps.js +114 -0
  150. package/dist/backend/routes.sales-reps.js.map +1 -0
  151. package/dist/backend/routes.storefront.d.ts +25 -0
  152. package/dist/backend/routes.storefront.d.ts.map +1 -0
  153. package/dist/backend/routes.storefront.js +65 -0
  154. package/dist/backend/routes.storefront.js.map +1 -0
  155. package/dist/backend/schemas/organization.d.ts +59 -0
  156. package/dist/backend/schemas/organization.d.ts.map +1 -0
  157. package/dist/backend/schemas/organization.js +55 -0
  158. package/dist/backend/schemas/organization.js.map +1 -0
  159. package/dist/backend/schemas/settings.d.ts +30 -0
  160. package/dist/backend/schemas/settings.d.ts.map +1 -0
  161. package/dist/backend/schemas/settings.js +35 -0
  162. package/dist/backend/schemas/settings.js.map +1 -0
  163. package/dist/backend/services/email-verification-service.d.ts +45 -0
  164. package/dist/backend/services/email-verification-service.d.ts.map +1 -0
  165. package/dist/backend/services/email-verification-service.js +95 -0
  166. package/dist/backend/services/email-verification-service.js.map +1 -0
  167. package/dist/backend/services/invitation-service.d.ts +85 -0
  168. package/dist/backend/services/invitation-service.d.ts.map +1 -0
  169. package/dist/backend/services/invitation-service.js +266 -0
  170. package/dist/backend/services/invitation-service.js.map +1 -0
  171. package/dist/backend/services/normalize-name.d.ts +14 -0
  172. package/dist/backend/services/normalize-name.d.ts.map +1 -0
  173. package/dist/backend/services/normalize-name.js +14 -0
  174. package/dist/backend/services/normalize-name.js.map +1 -0
  175. package/dist/backend/services/org-registration-notifier.d.ts +36 -0
  176. package/dist/backend/services/org-registration-notifier.d.ts.map +1 -0
  177. package/dist/backend/services/org-registration-notifier.js +109 -0
  178. package/dist/backend/services/org-registration-notifier.js.map +1 -0
  179. package/dist/backend/services/org-template-email.d.ts +18 -0
  180. package/dist/backend/services/org-template-email.d.ts.map +1 -0
  181. package/dist/backend/services/org-template-email.js +16 -0
  182. package/dist/backend/services/org-template-email.js.map +1 -0
  183. package/dist/backend/services/organization-context-service.d.ts +52 -0
  184. package/dist/backend/services/organization-context-service.d.ts.map +1 -0
  185. package/dist/backend/services/organization-context-service.js +70 -0
  186. package/dist/backend/services/organization-context-service.js.map +1 -0
  187. package/dist/backend/services/organization-country-reference.d.ts +11 -0
  188. package/dist/backend/services/organization-country-reference.d.ts.map +1 -0
  189. package/dist/backend/services/organization-country-reference.js +24 -0
  190. package/dist/backend/services/organization-country-reference.js.map +1 -0
  191. package/dist/backend/services/organization-details-port.d.ts +33 -0
  192. package/dist/backend/services/organization-details-port.d.ts.map +1 -0
  193. package/dist/backend/services/organization-details-port.js +95 -0
  194. package/dist/backend/services/organization-details-port.js.map +1 -0
  195. package/dist/backend/services/organization-effective-pricelists-service.d.ts +50 -0
  196. package/dist/backend/services/organization-effective-pricelists-service.d.ts.map +1 -0
  197. package/dist/backend/services/organization-effective-pricelists-service.js +68 -0
  198. package/dist/backend/services/organization-effective-pricelists-service.js.map +1 -0
  199. package/dist/backend/services/organization-inheritance-service.d.ts +73 -0
  200. package/dist/backend/services/organization-inheritance-service.d.ts.map +1 -0
  201. package/dist/backend/services/organization-inheritance-service.js +63 -0
  202. package/dist/backend/services/organization-inheritance-service.js.map +1 -0
  203. package/dist/backend/services/organization-moderation-service.d.ts +124 -0
  204. package/dist/backend/services/organization-moderation-service.d.ts.map +1 -0
  205. package/dist/backend/services/organization-moderation-service.js +337 -0
  206. package/dist/backend/services/organization-moderation-service.js.map +1 -0
  207. package/dist/backend/services/organization-restriction-service.d.ts +70 -0
  208. package/dist/backend/services/organization-restriction-service.d.ts.map +1 -0
  209. package/dist/backend/services/organization-restriction-service.js +210 -0
  210. package/dist/backend/services/organization-restriction-service.js.map +1 -0
  211. package/dist/backend/services/organization-tax-id-validation-service.d.ts +59 -0
  212. package/dist/backend/services/organization-tax-id-validation-service.d.ts.map +1 -0
  213. package/dist/backend/services/organization-tax-id-validation-service.js +115 -0
  214. package/dist/backend/services/organization-tax-id-validation-service.js.map +1 -0
  215. package/dist/backend/services/organization-tree-service.d.ts +102 -0
  216. package/dist/backend/services/organization-tree-service.d.ts.map +1 -0
  217. package/dist/backend/services/organization-tree-service.js +184 -0
  218. package/dist/backend/services/organization-tree-service.js.map +1 -0
  219. package/dist/backend/services/personal-organization-service.d.ts +130 -0
  220. package/dist/backend/services/personal-organization-service.d.ts.map +1 -0
  221. package/dist/backend/services/personal-organization-service.js +207 -0
  222. package/dist/backend/services/personal-organization-service.js.map +1 -0
  223. package/dist/backend/services/registration-service.d.ts +80 -0
  224. package/dist/backend/services/registration-service.d.ts.map +1 -0
  225. package/dist/backend/services/registration-service.js +126 -0
  226. package/dist/backend/services/registration-service.js.map +1 -0
  227. package/dist/backend/services/sales-rep-assignment-service.d.ts +89 -0
  228. package/dist/backend/services/sales-rep-assignment-service.d.ts.map +1 -0
  229. package/dist/backend/services/sales-rep-assignment-service.js +176 -0
  230. package/dist/backend/services/sales-rep-assignment-service.js.map +1 -0
  231. package/dist/backend/services/vat-validator-port.d.ts +20 -0
  232. package/dist/backend/services/vat-validator-port.d.ts.map +1 -0
  233. package/dist/backend/services/vat-validator-port.js +2 -0
  234. package/dist/backend/services/vat-validator-port.js.map +1 -0
  235. package/dist/manifest.d.ts +176 -0
  236. package/dist/manifest.d.ts.map +1 -0
  237. package/dist/manifest.js +503 -0
  238. package/dist/manifest.js.map +1 -0
  239. package/dist/migrations/20260424T205317_organizations_init.d.ts +13 -0
  240. package/dist/migrations/20260424T205317_organizations_init.d.ts.map +1 -0
  241. package/dist/migrations/20260424T205317_organizations_init.js +100 -0
  242. package/dist/migrations/20260424T205317_organizations_init.js.map +1 -0
  243. package/dist/migrations/20260425T051700_organizations_invitations_init.d.ts +13 -0
  244. package/dist/migrations/20260425T051700_organizations_invitations_init.d.ts.map +1 -0
  245. package/dist/migrations/20260425T051700_organizations_invitations_init.js +39 -0
  246. package/dist/migrations/20260425T051700_organizations_invitations_init.js.map +1 -0
  247. package/dist/migrations/20260611T140349_organizations_consolidation.d.ts +35 -0
  248. package/dist/migrations/20260611T140349_organizations_consolidation.d.ts.map +1 -0
  249. package/dist/migrations/20260611T140349_organizations_consolidation.js +180 -0
  250. package/dist/migrations/20260611T140349_organizations_consolidation.js.map +1 -0
  251. package/dist/migrations/20260611T140358_organizations_org_order_confirmation_emails.d.ts +10 -0
  252. package/dist/migrations/20260611T140358_organizations_org_order_confirmation_emails.d.ts.map +1 -0
  253. package/dist/migrations/20260611T140358_organizations_org_order_confirmation_emails.js +14 -0
  254. package/dist/migrations/20260611T140358_organizations_org_order_confirmation_emails.js.map +1 -0
  255. package/dist/migrations/20260611T140402_organizations_org_fulfilment_strategy.d.ts +14 -0
  256. package/dist/migrations/20260611T140402_organizations_org_fulfilment_strategy.d.ts.map +1 -0
  257. package/dist/migrations/20260611T140402_organizations_org_fulfilment_strategy.js +20 -0
  258. package/dist/migrations/20260611T140402_organizations_org_fulfilment_strategy.js.map +1 -0
  259. package/dist/migrations/20260717T151403_organizations_personal_organizations.d.ts +24 -0
  260. package/dist/migrations/20260717T151403_organizations_personal_organizations.d.ts.map +1 -0
  261. package/dist/migrations/20260717T151403_organizations_personal_organizations.js +63 -0
  262. package/dist/migrations/20260717T151403_organizations_personal_organizations.js.map +1 -0
  263. package/dist/migrations/20260718T200340_organizations_organization_custom_field_values.d.ts +12 -0
  264. package/dist/migrations/20260718T200340_organizations_organization_custom_field_values.d.ts.map +1 -0
  265. package/dist/migrations/20260718T200340_organizations_organization_custom_field_values.js +16 -0
  266. package/dist/migrations/20260718T200340_organizations_organization_custom_field_values.js.map +1 -0
  267. package/dist/migrations/20260720T044254_organizations_org_hierarchy.d.ts +23 -0
  268. package/dist/migrations/20260720T044254_organizations_org_hierarchy.d.ts.map +1 -0
  269. package/dist/migrations/20260720T044254_organizations_org_hierarchy.js +37 -0
  270. package/dist/migrations/20260720T044254_organizations_org_hierarchy.js.map +1 -0
  271. package/dist/migrations/20260912T094646_organizations_sales_channel_organizations.d.ts +27 -0
  272. package/dist/migrations/20260912T094646_organizations_sales_channel_organizations.d.ts.map +1 -0
  273. package/dist/migrations/20260912T094646_organizations_sales_channel_organizations.js +44 -0
  274. package/dist/migrations/20260912T094646_organizations_sales_channel_organizations.js.map +1 -0
  275. package/dist/migrations/index.d.ts +35 -0
  276. package/dist/migrations/index.d.ts.map +1 -0
  277. package/dist/migrations/index.js +45 -0
  278. package/dist/migrations/index.js.map +1 -0
  279. package/dist/ports/index.d.ts +53 -0
  280. package/dist/ports/index.d.ts.map +1 -0
  281. package/dist/ports/index.js +2 -0
  282. package/dist/ports/index.js.map +1 -0
  283. package/docs/organization-hierarchy.md +117 -0
  284. package/docs/organizations.md +312 -0
  285. package/i18n/en.json +17 -0
  286. package/i18n/pl.json +17 -0
  287. package/package.json +107 -0
  288. package/tailwind.css +14 -0
@@ -0,0 +1,13 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Organization invitations — Phase 5 (T172). Used by US3's invite/accept flow.
4
+ *
5
+ * The (organization_id, email) tuple is unique while consumed_at is null AND
6
+ * revoked_at is null — at most one pending invitation per email per org.
7
+ * This avoids stacking duplicate invitations for the same address.
8
+ */
9
+ export declare class Migration20260425T051700OrganizationsInvitationsInit extends Migration {
10
+ up(): Promise<void>;
11
+ down(): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=20260425T051700_organizations_invitations_init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260425T051700_organizations_invitations_init.d.ts","sourceRoot":"","sources":["../../src/migrations/20260425T051700_organizations_invitations_init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;GAMG;AACH,qBAAa,oDAAqD,SAAQ,SAAS;IAClE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAGrC"}
@@ -0,0 +1,39 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Organization invitations — Phase 5 (T172). Used by US3's invite/accept flow.
4
+ *
5
+ * The (organization_id, email) tuple is unique while consumed_at is null AND
6
+ * revoked_at is null — at most one pending invitation per email per org.
7
+ * This avoids stacking duplicate invitations for the same address.
8
+ */
9
+ export class Migration20260425T051700OrganizationsInvitationsInit extends Migration {
10
+ async up() {
11
+ this.addSql(`
12
+ create table "organization_invitations" (
13
+ "id" uuid not null,
14
+ "organization_id" uuid not null,
15
+ "invited_by_customer_account_id" uuid null,
16
+ "email" varchar(320) not null,
17
+ "role" varchar(32) not null default 'regular_user',
18
+ "token_hash" varchar(128) not null,
19
+ "expires_at" timestamptz not null,
20
+ "consumed_at" timestamptz null,
21
+ "revoked_at" timestamptz null,
22
+ "created_at" timestamptz not null,
23
+ "updated_at" timestamptz not null,
24
+ constraint "organization_invitations_pkey" primary key ("id"),
25
+ constraint "organization_invitations_token_hash_unique" unique ("token_hash"),
26
+ constraint "organization_invitations_org_fk" foreign key ("organization_id")
27
+ references "organizations" ("id") on delete restrict
28
+ );
29
+ `);
30
+ this.addSql('create index "organization_invitations_organization_id_index" on "organization_invitations" ("organization_id");');
31
+ this.addSql('create index "organization_invitations_email_index" on "organization_invitations" ("email");');
32
+ this.addSql('create index "organization_invitations_expires_at_index" on "organization_invitations" ("expires_at");');
33
+ this.addSql(`create unique index "organization_invitations_one_pending_per_email" on "organization_invitations" ("organization_id", "email") where "consumed_at" is null and "revoked_at" is null;`);
34
+ }
35
+ async down() {
36
+ this.addSql('drop table if exists "organization_invitations" cascade;');
37
+ }
38
+ }
39
+ //# sourceMappingURL=20260425T051700_organizations_invitations_init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260425T051700_organizations_invitations_init.js","sourceRoot":"","sources":["../../src/migrations/20260425T051700_organizations_invitations_init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,OAAO,oDAAqD,SAAQ,SAAS;IACxE,KAAK,CAAC,EAAE;QACf,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;KAkBX,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,kHAAkH,CAAC,CAAC;QAChI,IAAI,CAAC,MAAM,CAAC,8FAA8F,CAAC,CAAC;QAC5G,IAAI,CAAC,MAAM,CAAC,wGAAwG,CAAC,CAAC;QACtH,IAAI,CAAC,MAAM,CACT,uLAAuL,CACxL,CAAC;IACJ,CAAC;IAEQ,KAAK,CAAC,IAAI;QACjB,IAAI,CAAC,MAAM,CAAC,0DAA0D,CAAC,CAAC;IAC1E,CAAC;CACF"}
@@ -0,0 +1,35 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Organizations consolidation (feature 026).
4
+ *
5
+ * Extends the existing `organizations` table with the columns required by
6
+ * the moderation lifecycle (approve/reject/block), VAT-validation tracking,
7
+ * optimistic locking, and a denormalized `name_search` column used by the
8
+ * admin OrganizationPicker (diacritic-insensitive prefix search without
9
+ * needing the pg_trgm/unaccent extensions).
10
+ *
11
+ * Data migration: legacy `status='suspended'` rows are remapped to
12
+ * `status='blocked'` with an explanatory `blocked_reason` so the audit trail
13
+ * carries the breadcrumb.
14
+ *
15
+ * Introduces three new tables:
16
+ * - organization_tax_id_validations — one row per validation attempt.
17
+ * - organization_payment_methods — per-org allow-list bridge.
18
+ * - organization_delivery_methods — per-org allow-list bridge.
19
+ *
20
+ * It introduced a fourth, `organization_warehouses`, until
21
+ * `specs/120-migration-closure-bridge-ownership/` Phase 3. Its second foreign
22
+ * key names `warehouses`, which is `inventory`'s table and is in neither this
23
+ * module's ownership nor its `dependencies` closure — and could not be, since
24
+ * `inventory` declares `organizations`. That is D-226's bridge rule one
25
+ * namespace over: a bridge between an always-present near side and a
26
+ * switchable far side belongs to the far side, so the table is
27
+ * `Migration20260912T125716InventoryOrganizationWarehouses`' now, verbatim and
28
+ * `if not exists`. A hard uninstall of `inventory` takes it with it, which is
29
+ * the behaviour an operator would expect.
30
+ */
31
+ export declare class Migration20260611T140349OrganizationsConsolidation extends Migration {
32
+ up(): Promise<void>;
33
+ down(): Promise<void>;
34
+ }
35
+ //# sourceMappingURL=20260611T140349_organizations_consolidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260611T140349_organizations_consolidation.d.ts","sourceRoot":"","sources":["../../src/migrations/20260611T140349_organizations_consolidation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,kDAAmD,SAAQ,SAAS;IAChE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;IAkInB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CA8BrC"}
@@ -0,0 +1,180 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Organizations consolidation (feature 026).
4
+ *
5
+ * Extends the existing `organizations` table with the columns required by
6
+ * the moderation lifecycle (approve/reject/block), VAT-validation tracking,
7
+ * optimistic locking, and a denormalized `name_search` column used by the
8
+ * admin OrganizationPicker (diacritic-insensitive prefix search without
9
+ * needing the pg_trgm/unaccent extensions).
10
+ *
11
+ * Data migration: legacy `status='suspended'` rows are remapped to
12
+ * `status='blocked'` with an explanatory `blocked_reason` so the audit trail
13
+ * carries the breadcrumb.
14
+ *
15
+ * Introduces three new tables:
16
+ * - organization_tax_id_validations — one row per validation attempt.
17
+ * - organization_payment_methods — per-org allow-list bridge.
18
+ * - organization_delivery_methods — per-org allow-list bridge.
19
+ *
20
+ * It introduced a fourth, `organization_warehouses`, until
21
+ * `specs/120-migration-closure-bridge-ownership/` Phase 3. Its second foreign
22
+ * key names `warehouses`, which is `inventory`'s table and is in neither this
23
+ * module's ownership nor its `dependencies` closure — and could not be, since
24
+ * `inventory` declares `organizations`. That is D-226's bridge rule one
25
+ * namespace over: a bridge between an always-present near side and a
26
+ * switchable far side belongs to the far side, so the table is
27
+ * `Migration20260912T125716InventoryOrganizationWarehouses`' now, verbatim and
28
+ * `if not exists`. A hard uninstall of `inventory` takes it with it, which is
29
+ * the behaviour an operator would expect.
30
+ */
31
+ export class Migration20260611T140349OrganizationsConsolidation extends Migration {
32
+ async up() {
33
+ // 1) New columns on `organizations`.
34
+ this.addSql(`
35
+ alter table "organizations"
36
+ add column "legal_name" varchar(255) null,
37
+ add column "vat_validated_at" timestamptz null,
38
+ add column "vat_validation_provider" varchar(32) null,
39
+ add column "vat_validation_outcome" varchar(16) null,
40
+ add column "blocked_reason" text null,
41
+ add column "blocked_at" timestamptz null,
42
+ add column "rejected_reason" text null,
43
+ add column "rejected_at" timestamptz null,
44
+ add column "approved_at" timestamptz null,
45
+ add column "approved_by_admin_user_id" uuid null,
46
+ add column "name_search" varchar(255) not null default '',
47
+ add column "version" int not null default 0;
48
+ `);
49
+ this.addSql(`
50
+ alter table "organizations"
51
+ add constraint "organizations_vat_validation_outcome_check"
52
+ check ("vat_validation_outcome" is null
53
+ or "vat_validation_outcome" in ('validated', 'failed', 'deferred', 'unverified'));
54
+ `);
55
+ this.addSql(`
56
+ alter table "organizations"
57
+ add constraint "organizations_approved_by_admin_user_fk"
58
+ foreign key ("approved_by_admin_user_id")
59
+ references "admin_users" ("id")
60
+ on delete set null;
61
+ `);
62
+ // 2) Backfill `name_search` from existing `name` rows.
63
+ // Strips combining marks via PostgreSQL's `translate` for the most
64
+ // common diacritics present in the seed data. Subsequent writes go
65
+ // through the application's stripDiacritics() helper which handles
66
+ // every Unicode combining mark uniformly.
67
+ this.addSql(`
68
+ update "organizations"
69
+ set "name_search" = lower(
70
+ translate(
71
+ "name",
72
+ 'ąĄćĆęĘłŁńŃóÓśŚźŹżŻáÁàÀâÂäÄãÃåÅæÆçÇéÉèÈêÊëËíÍìÌîÎïÏñÑóÓòÒôÔöÖõÕøØúÚùÙûÛüÜýÝÿŸ',
73
+ 'aAcCeElLnNoOsSzZzZaAaAaAaAaAaAaAcCeEeEeEeEiIiIiIiInNoOoOoOoOoOoOuUuUuUuUyYyY'
74
+ )
75
+ );
76
+ `);
77
+ // 3) Remap legacy `suspended` rows to `blocked` and emit a breadcrumb.
78
+ this.addSql(`
79
+ update "organizations"
80
+ set "status" = 'blocked',
81
+ "blocked_at" = coalesce("blocked_at", "updated_at"),
82
+ "blocked_reason" = coalesce(
83
+ "blocked_reason",
84
+ 'Auto-migrated from legacy ''suspended'' status (feature 026 consolidation).'
85
+ )
86
+ where "status" = 'suspended';
87
+ `);
88
+ // 4) Index on the denormalized search column.
89
+ // `text_pattern_ops` enables fast prefix ILIKE on the lowercased,
90
+ // diacritic-stripped name. Lookup at 10k rows is sub-millisecond.
91
+ this.addSql(`
92
+ create index "organizations_name_search_idx"
93
+ on "organizations" ("name_search" text_pattern_ops);
94
+ `);
95
+ // 5) Per-org allow-list bridges. Empty rows for an org ⇒ "platform
96
+ // defaults apply" (FR-014 / FR-015 / FR-016).
97
+ this.addSql(`
98
+ create table "organization_payment_methods" (
99
+ "organization_id" uuid not null,
100
+ "payment_method_id" uuid not null,
101
+ "created_at" timestamptz not null default now(),
102
+ constraint "organization_payment_methods_pkey"
103
+ primary key ("organization_id", "payment_method_id"),
104
+ constraint "organization_payment_methods_organization_fk"
105
+ foreign key ("organization_id") references "organizations" ("id") on delete cascade,
106
+ constraint "organization_payment_methods_method_fk"
107
+ foreign key ("payment_method_id") references "payment_methods" ("id") on delete cascade
108
+ );
109
+ `);
110
+ this.addSql(`
111
+ create table "organization_delivery_methods" (
112
+ "organization_id" uuid not null,
113
+ "delivery_method_id" uuid not null,
114
+ "created_at" timestamptz not null default now(),
115
+ constraint "organization_delivery_methods_pkey"
116
+ primary key ("organization_id", "delivery_method_id"),
117
+ constraint "organization_delivery_methods_organization_fk"
118
+ foreign key ("organization_id") references "organizations" ("id") on delete cascade,
119
+ constraint "organization_delivery_methods_method_fk"
120
+ foreign key ("delivery_method_id") references "delivery_methods" ("id") on delete cascade
121
+ );
122
+ `);
123
+ // 7) Tax-id validation history.
124
+ this.addSql(`
125
+ create table "organization_tax_id_validations" (
126
+ "id" uuid not null,
127
+ "organization_id" uuid not null,
128
+ "provider" varchar(32) not null,
129
+ "outcome" varchar(16) not null,
130
+ "tax_id_value" varchar(64) not null,
131
+ "legal_name_returned" varchar(255) null,
132
+ "address_returned" jsonb null,
133
+ "error_kind" varchar(64) null,
134
+ "requested_by_admin_user_id" uuid null,
135
+ "created_at" timestamptz not null default now(),
136
+ constraint "organization_tax_id_validations_pkey" primary key ("id"),
137
+ constraint "organization_tax_id_validations_outcome_check"
138
+ check ("outcome" in ('validated', 'failed', 'deferred', 'unverified')),
139
+ constraint "organization_tax_id_validations_provider_check"
140
+ check ("provider" in ('vies', 'mf_pl', 'format_only')),
141
+ constraint "organization_tax_id_validations_organization_fk"
142
+ foreign key ("organization_id") references "organizations" ("id") on delete cascade,
143
+ constraint "organization_tax_id_validations_admin_user_fk"
144
+ foreign key ("requested_by_admin_user_id") references "admin_users" ("id") on delete set null
145
+ );
146
+ `);
147
+ this.addSql(`
148
+ create index "organization_tax_id_validations_org_idx"
149
+ on "organization_tax_id_validations" ("organization_id", "created_at" desc);
150
+ `);
151
+ }
152
+ async down() {
153
+ this.addSql(`drop index if exists "organization_tax_id_validations_org_idx";`);
154
+ this.addSql(`drop table if exists "organization_tax_id_validations" cascade;`);
155
+ this.addSql(`drop table if exists "organization_delivery_methods" cascade;`);
156
+ this.addSql(`drop table if exists "organization_payment_methods" cascade;`);
157
+ this.addSql(`drop index if exists "organizations_name_search_idx";`);
158
+ this.addSql(`
159
+ alter table "organizations"
160
+ drop constraint if exists "organizations_approved_by_admin_user_fk",
161
+ drop constraint if exists "organizations_vat_validation_outcome_check";
162
+ `);
163
+ this.addSql(`
164
+ alter table "organizations"
165
+ drop column if exists "version",
166
+ drop column if exists "name_search",
167
+ drop column if exists "approved_by_admin_user_id",
168
+ drop column if exists "approved_at",
169
+ drop column if exists "rejected_at",
170
+ drop column if exists "rejected_reason",
171
+ drop column if exists "blocked_at",
172
+ drop column if exists "blocked_reason",
173
+ drop column if exists "vat_validation_outcome",
174
+ drop column if exists "vat_validation_provider",
175
+ drop column if exists "vat_validated_at",
176
+ drop column if exists "legal_name";
177
+ `);
178
+ }
179
+ }
180
+ //# sourceMappingURL=20260611T140349_organizations_consolidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260611T140349_organizations_consolidation.js","sourceRoot":"","sources":["../../src/migrations/20260611T140349_organizations_consolidation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,OAAO,kDAAmD,SAAQ,SAAS;IACtE,KAAK,CAAC,EAAE;QACf,qCAAqC;QACrC,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;;;KAcX,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC;;;;;KAKX,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC;;;;;;KAMX,CAAC,CAAC;QAEH,uDAAuD;QACvD,sEAAsE;QACtE,sEAAsE;QACtE,sEAAsE;QACtE,6CAA6C;QAC7C,IAAI,CAAC,MAAM,CAAC;;;;;;;;;KASX,CAAC,CAAC;QAEH,uEAAuE;QACvE,IAAI,CAAC,MAAM,CAAC;;;;;;;;;KASX,CAAC,CAAC;QAEH,8CAA8C;QAC9C,qEAAqE;QACrE,qEAAqE;QACrE,IAAI,CAAC,MAAM,CAAC;;;KAGX,CAAC,CAAC;QAEH,mEAAmE;QACnE,iDAAiD;QACjD,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;KAYX,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;KAYX,CAAC,CAAC;QAEH,gCAAgC;QAChC,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;KAsBX,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC;;;KAGX,CAAC,CAAC;IACL,CAAC;IAEQ,KAAK,CAAC,IAAI;QACjB,IAAI,CAAC,MAAM,CAAC,iEAAiE,CAAC,CAAC;QAC/E,IAAI,CAAC,MAAM,CAAC,iEAAiE,CAAC,CAAC;QAC/E,IAAI,CAAC,MAAM,CAAC,+DAA+D,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,CAAC,8DAA8D,CAAC,CAAC;QAE5E,IAAI,CAAC,MAAM,CAAC,uDAAuD,CAAC,CAAC;QAErE,IAAI,CAAC,MAAM,CAAC;;;;KAIX,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;;;KAcX,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Feature 038 (US4) — per-organization additional order-confirmation emails.
4
+ * Owned by the organizations module; read by orders via a port.
5
+ */
6
+ export declare class Migration20260611T140358OrganizationsOrgOrderConfirmationEmails extends Migration {
7
+ up(): Promise<void>;
8
+ down(): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=20260611T140358_organizations_org_order_confirmation_emails.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260611T140358_organizations_org_order_confirmation_emails.d.ts","sourceRoot":"","sources":["../../src/migrations/20260611T140358_organizations_org_order_confirmation_emails.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;GAGG;AACH,qBAAa,+DAAgE,SAAQ,SAAS;IAC7E,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;IAMnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAGrC"}
@@ -0,0 +1,14 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Feature 038 (US4) — per-organization additional order-confirmation emails.
4
+ * Owned by the organizations module; read by orders via a port.
5
+ */
6
+ export class Migration20260611T140358OrganizationsOrgOrderConfirmationEmails extends Migration {
7
+ async up() {
8
+ this.addSql(`alter table "organizations" add column "order_confirmation_emails" jsonb not null default '[]'::jsonb;`);
9
+ }
10
+ async down() {
11
+ this.addSql(`alter table "organizations" drop column "order_confirmation_emails";`);
12
+ }
13
+ }
14
+ //# sourceMappingURL=20260611T140358_organizations_org_order_confirmation_emails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260611T140358_organizations_org_order_confirmation_emails.js","sourceRoot":"","sources":["../../src/migrations/20260611T140358_organizations_org_order_confirmation_emails.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;GAGG;AACH,MAAM,OAAO,+DAAgE,SAAQ,SAAS;IACnF,KAAK,CAAC,EAAE;QACf,IAAI,CAAC,MAAM,CACT,wGAAwG,CACzG,CAAC;IACJ,CAAC;IAEQ,KAAK,CAAC,IAAI;QACjB,IAAI,CAAC,MAAM,CAAC,sEAAsE,CAAC,CAAC;IACtF,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Organization-level warehouse-picking (fulfilment) strategy override.
4
+ *
5
+ * Adds the two nullable columns that mirror the per-product columns on
6
+ * `products`. They participate in the order-placement precedence chain
7
+ * Product → Organization → Sales Channel setting → platform default.
8
+ * `null` ⇒ the organization inherits the channel/default strategy.
9
+ */
10
+ export declare class Migration20260611T140402OrganizationsOrgFulfilmentStrategy extends Migration {
11
+ up(): Promise<void>;
12
+ down(): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=20260611T140402_organizations_org_fulfilment_strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260611T140402_organizations_org_fulfilment_strategy.d.ts","sourceRoot":"","sources":["../../src/migrations/20260611T140402_organizations_org_fulfilment_strategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;GAOG;AACH,qBAAa,0DAA2D,SAAQ,SAAS;IACxE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;IASnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAIrC"}
@@ -0,0 +1,20 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Organization-level warehouse-picking (fulfilment) strategy override.
4
+ *
5
+ * Adds the two nullable columns that mirror the per-product columns on
6
+ * `products`. They participate in the order-placement precedence chain
7
+ * Product → Organization → Sales Channel setting → platform default.
8
+ * `null` ⇒ the organization inherits the channel/default strategy.
9
+ */
10
+ export class Migration20260611T140402OrganizationsOrgFulfilmentStrategy extends Migration {
11
+ async up() {
12
+ this.addSql(`alter table "organizations" add column "fulfilment_strategy" varchar(32) null;`);
13
+ this.addSql(`alter table "organizations" add column "fulfilment_strategy_warehouse_order" jsonb null;`);
14
+ }
15
+ async down() {
16
+ this.addSql(`alter table "organizations" drop column "fulfilment_strategy_warehouse_order";`);
17
+ this.addSql(`alter table "organizations" drop column "fulfilment_strategy";`);
18
+ }
19
+ }
20
+ //# sourceMappingURL=20260611T140402_organizations_org_fulfilment_strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260611T140402_organizations_org_fulfilment_strategy.js","sourceRoot":"","sources":["../../src/migrations/20260611T140402_organizations_org_fulfilment_strategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,OAAO,0DAA2D,SAAQ,SAAS;IAC9E,KAAK,CAAC,EAAE;QACf,IAAI,CAAC,MAAM,CACT,gFAAgF,CACjF,CAAC;QACF,IAAI,CAAC,MAAM,CACT,0FAA0F,CAC3F,CAAC;IACJ,CAAC;IAEQ,KAAK,CAAC,IAAI;QACjB,IAAI,CAAC,MAAM,CAAC,gFAAgF,CAAC,CAAC;QAC9F,IAAI,CAAC,MAAM,CAAC,gEAAgE,CAAC,CAAC;IAChF,CAAC;CACF"}
@@ -0,0 +1,24 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Feature 051 — Personal Organizations for B2C customers.
4
+ *
5
+ * Adds `organizations.is_personal` (a single-member org backing an individual)
6
+ * and backfills a personal organization for every existing customer account with
7
+ * no organization, linking the account to it. Idempotent — re-running skips
8
+ * accounts that already have an organization.
9
+ *
10
+ * Backfill defaults for an individual (mirror `PersonalOrganizationService`):
11
+ * - is_personal = true, status = 'active'
12
+ * - name = trimmed "first last", else the email local-part
13
+ * - tax_id = the account UUID without dashes (tax_id is globally UNIQUE and
14
+ * varchar(32); an individual has no company tax id, so a synthetic
15
+ * 32-hex unique value derived from the account id)
16
+ * - vat_status = 'vat_exempt'
17
+ * - registered_address = a minimal valid placeholder ({} JSON is not valid;
18
+ * the column is a JSON object with street/city/postal/country)
19
+ */
20
+ export declare class Migration20260717T151403OrganizationsPersonalOrganizations extends Migration {
21
+ up(): Promise<void>;
22
+ down(): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=20260717T151403_organizations_personal_organizations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260717T151403_organizations_personal_organizations.d.ts","sourceRoot":"","sources":["../../src/migrations/20260717T151403_organizations_personal_organizations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,0DAA2D,SAAQ,SAAS;IACxE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;IAiCnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAYrC"}
@@ -0,0 +1,63 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Feature 051 — Personal Organizations for B2C customers.
4
+ *
5
+ * Adds `organizations.is_personal` (a single-member org backing an individual)
6
+ * and backfills a personal organization for every existing customer account with
7
+ * no organization, linking the account to it. Idempotent — re-running skips
8
+ * accounts that already have an organization.
9
+ *
10
+ * Backfill defaults for an individual (mirror `PersonalOrganizationService`):
11
+ * - is_personal = true, status = 'active'
12
+ * - name = trimmed "first last", else the email local-part
13
+ * - tax_id = the account UUID without dashes (tax_id is globally UNIQUE and
14
+ * varchar(32); an individual has no company tax id, so a synthetic
15
+ * 32-hex unique value derived from the account id)
16
+ * - vat_status = 'vat_exempt'
17
+ * - registered_address = a minimal valid placeholder ({} JSON is not valid;
18
+ * the column is a JSON object with street/city/postal/country)
19
+ */
20
+ export class Migration20260717T151403OrganizationsPersonalOrganizations extends Migration {
21
+ async up() {
22
+ this.addSql('alter table "organizations" add column "is_personal" boolean not null default false;');
23
+ this.addSql('create index "organizations_is_personal_index" on "organizations" ("is_personal");');
24
+ // Backfill: one personal org per no-org, non-deleted customer account.
25
+ this.addSql(`
26
+ with created as (
27
+ insert into "organizations" (
28
+ "id", "name", "tax_id", "status", "vat_status", "is_personal",
29
+ "registered_address", "created_at", "updated_at"
30
+ )
31
+ select
32
+ gen_random_uuid(),
33
+ coalesce(nullif(trim(coalesce(ca."first_name", '') || ' ' || coalesce(ca."last_name", '')), ''), split_part(ca."email", '@', 1)),
34
+ replace(ca."id"::text, '-', ''),
35
+ 'active',
36
+ 'vat_exempt',
37
+ true,
38
+ '{"street":"-","city":"-","postalCode":"-","country":"PL"}'::json,
39
+ now(), now()
40
+ from "customer_accounts" ca
41
+ where ca."organization_id" is null and ca."deleted_at" is null
42
+ returning "id", ("tax_id") as tax_id
43
+ )
44
+ update "customer_accounts" ca
45
+ set "organization_id" = c."id"
46
+ from created c
47
+ where c."tax_id" = replace(ca."id"::text, '-', '');
48
+ `);
49
+ }
50
+ async down() {
51
+ // Unlink and remove the personal orgs created by this migration, then drop the column.
52
+ this.addSql(`
53
+ update "customer_accounts" ca
54
+ set "organization_id" = null
55
+ from "organizations" o
56
+ where ca."organization_id" = o."id" and o."is_personal" = true;
57
+ `);
58
+ this.addSql('delete from "organizations" where "is_personal" = true;');
59
+ this.addSql('drop index if exists "organizations_is_personal_index";');
60
+ this.addSql('alter table "organizations" drop column "is_personal";');
61
+ }
62
+ }
63
+ //# sourceMappingURL=20260717T151403_organizations_personal_organizations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260717T151403_organizations_personal_organizations.js","sourceRoot":"","sources":["../../src/migrations/20260717T151403_organizations_personal_organizations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,0DAA2D,SAAQ,SAAS;IAC9E,KAAK,CAAC,EAAE;QACf,IAAI,CAAC,MAAM,CACT,sFAAsF,CACvF,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,oFAAoF,CAAC,CAAC;QAElG,uEAAuE;QACvE,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;KAuBX,CAAC,CAAC;IACL,CAAC;IAEQ,KAAK,CAAC,IAAI;QACjB,uFAAuF;QACvF,IAAI,CAAC,MAAM,CAAC;;;;;KAKX,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,yDAAyD,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,CAAC,yDAAyD,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,CAAC,wDAAwD,CAAC,CAAC;IACxE,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Feature 055 — Custom Fields Layer. Additive: adds the `custom_field_values`
4
+ * JSONB bag to `organizations` so operator-defined fields persist on the host row.
5
+ * The column inherits the host entity's tenant classification (Principle XI);
6
+ * no scoping column is added.
7
+ */
8
+ export declare class Migration20260718T200340OrganizationsOrganizationCustomFieldValues extends Migration {
9
+ up(): Promise<void>;
10
+ down(): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=20260718T200340_organizations_organization_custom_field_values.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260718T200340_organizations_organization_custom_field_values.d.ts","sourceRoot":"","sources":["../../src/migrations/20260718T200340_organizations_organization_custom_field_values.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;GAKG;AACH,qBAAa,kEAAmE,SAAQ,SAAS;IAChF,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;IAMnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAGrC"}
@@ -0,0 +1,16 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Feature 055 — Custom Fields Layer. Additive: adds the `custom_field_values`
4
+ * JSONB bag to `organizations` so operator-defined fields persist on the host row.
5
+ * The column inherits the host entity's tenant classification (Principle XI);
6
+ * no scoping column is added.
7
+ */
8
+ export class Migration20260718T200340OrganizationsOrganizationCustomFieldValues extends Migration {
9
+ async up() {
10
+ this.addSql(`alter table "organizations" add column "custom_field_values" jsonb not null default '{}';`);
11
+ }
12
+ async down() {
13
+ this.addSql(`alter table "organizations" drop column "custom_field_values";`);
14
+ }
15
+ }
16
+ //# sourceMappingURL=20260718T200340_organizations_organization_custom_field_values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260718T200340_organizations_organization_custom_field_values.js","sourceRoot":"","sources":["../../src/migrations/20260718T200340_organizations_organization_custom_field_values.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;GAKG;AACH,MAAM,OAAO,kEAAmE,SAAQ,SAAS;IACtF,KAAK,CAAC,EAAE;QACf,IAAI,CAAC,MAAM,CACT,2FAA2F,CAC5F,CAAC;IACJ,CAAC;IAEQ,KAAK,CAAC,IAAI;QACjB,IAAI,CAAC,MAAM,CAAC,gEAAgE,CAAC,CAAC;IAChF,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Feature 056 — Hierarchical Organizations (tree + scope inheritance).
4
+ *
5
+ * Additive: turns the flat `organizations` table into a tree.
6
+ * - `parent_id uuid NULL REFERENCES organizations(id) ON DELETE RESTRICT`
7
+ * (self-reference; NULL ⇒ root; deletion of a parent with children is
8
+ * blocked at the DB level, backing the application precondition — R7).
9
+ * - `path text NOT NULL DEFAULT ''` — materialized ancestor-chain path
10
+ * `'/<rootId>/…/<thisId>/'`. A `text_pattern_ops` btree index answers
11
+ * descendant (`path LIKE :selfPath || '%'`) traversal in one indexed scan.
12
+ * - `credit_inheritance_mode varchar(20) NULL` — per-org platform-admin
13
+ * override (NULL ⇒ Settings global default).
14
+ *
15
+ * Backfill: every existing row becomes a root (`parent_id` stays NULL,
16
+ * `path = '/' || id || '/'`), so `subtreeIds(org) = {org}` and all scoping /
17
+ * inheritance collapse to today's flat behavior byte-for-byte (FR-001/FR-013).
18
+ */
19
+ export declare class Migration20260720T044254OrganizationsOrgHierarchy extends Migration {
20
+ up(): Promise<void>;
21
+ down(): Promise<void>;
22
+ }
23
+ //# sourceMappingURL=20260720T044254_organizations_org_hierarchy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260720T044254_organizations_org_hierarchy.d.ts","sourceRoot":"","sources":["../../src/migrations/20260720T044254_organizations_org_hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,iDAAkD,SAAQ,SAAS;IAC/D,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAOrC"}
@@ -0,0 +1,37 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * Feature 056 — Hierarchical Organizations (tree + scope inheritance).
4
+ *
5
+ * Additive: turns the flat `organizations` table into a tree.
6
+ * - `parent_id uuid NULL REFERENCES organizations(id) ON DELETE RESTRICT`
7
+ * (self-reference; NULL ⇒ root; deletion of a parent with children is
8
+ * blocked at the DB level, backing the application precondition — R7).
9
+ * - `path text NOT NULL DEFAULT ''` — materialized ancestor-chain path
10
+ * `'/<rootId>/…/<thisId>/'`. A `text_pattern_ops` btree index answers
11
+ * descendant (`path LIKE :selfPath || '%'`) traversal in one indexed scan.
12
+ * - `credit_inheritance_mode varchar(20) NULL` — per-org platform-admin
13
+ * override (NULL ⇒ Settings global default).
14
+ *
15
+ * Backfill: every existing row becomes a root (`parent_id` stays NULL,
16
+ * `path = '/' || id || '/'`), so `subtreeIds(org) = {org}` and all scoping /
17
+ * inheritance collapse to today's flat behavior byte-for-byte (FR-001/FR-013).
18
+ */
19
+ export class Migration20260720T044254OrganizationsOrgHierarchy extends Migration {
20
+ async up() {
21
+ this.addSql('alter table "organizations" add column "parent_id" uuid null references "organizations" ("id") on delete restrict;');
22
+ this.addSql(`alter table "organizations" add column "path" text not null default '';`);
23
+ this.addSql('alter table "organizations" add column "credit_inheritance_mode" varchar(20) null;');
24
+ // Backfill every existing org as a root (parent_id stays NULL).
25
+ this.addSql(`update "organizations" set "path" = '/' || "id" || '/';`);
26
+ this.addSql('create index "organizations_path_prefix_idx" on "organizations" ("path" text_pattern_ops);');
27
+ this.addSql('create index "organizations_parent_id_idx" on "organizations" ("parent_id");');
28
+ }
29
+ async down() {
30
+ this.addSql('drop index if exists "organizations_path_prefix_idx";');
31
+ this.addSql('drop index if exists "organizations_parent_id_idx";');
32
+ this.addSql('alter table "organizations" drop column "credit_inheritance_mode";');
33
+ this.addSql('alter table "organizations" drop column "path";');
34
+ this.addSql('alter table "organizations" drop column "parent_id";');
35
+ }
36
+ }
37
+ //# sourceMappingURL=20260720T044254_organizations_org_hierarchy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260720T044254_organizations_org_hierarchy.js","sourceRoot":"","sources":["../../src/migrations/20260720T044254_organizations_org_hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,iDAAkD,SAAQ,SAAS;IACrE,KAAK,CAAC,EAAE;QACf,IAAI,CAAC,MAAM,CACT,oHAAoH,CACrH,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,yEAAyE,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CACT,oFAAoF,CACrF,CAAC;QAEF,gEAAgE;QAChE,IAAI,CAAC,MAAM,CAAC,yDAAyD,CAAC,CAAC;QAEvE,IAAI,CAAC,MAAM,CACT,4FAA4F,CAC7F,CAAC;QACF,IAAI,CAAC,MAAM,CACT,8EAA8E,CAC/E,CAAC;IACJ,CAAC;IAEQ,KAAK,CAAC,IAAI;QACjB,IAAI,CAAC,MAAM,CAAC,uDAAuD,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,oEAAoE,CAAC,CAAC;QAClF,IAAI,CAAC,MAAM,CAAC,iDAAiD,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,sDAAsD,CAAC,CAAC;IACtE,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ /**
3
+ * The `sales_channel_organizations` sales-channel bridge — the organizations a channel is visible to.
4
+ *
5
+ * It was created by the platform's frozen `Migration20260430T170044CoreSalesChannelsPromote`
6
+ * until `specs/120-migration-closure-bridge-ownership/` Phase 2. Under D-226 a
7
+ * bridge between an always-present near side (`sales_channels`, a kernel table)
8
+ * and a switchable far side belongs to the far side, so this module creates it:
9
+ * an instance that does not install `organizations` no longer has a migration corpus
10
+ * naming a table nothing builds.
11
+ *
12
+ * `if not exists`, because every database that has already applied the frozen
13
+ * migration has this table. The storage keys on the class name and holds no
14
+ * checksum, so nothing is re-offered there and this migration is the no-op it
15
+ * reads as; on a fresh database it is the creation.
16
+ *
17
+ * The statements are the frozen ones verbatim — same columns, same primary key,
18
+ * same two foreign keys, same index — so the two paths reach one schema. Its
19
+ * position needs nothing declared: `sales_channels` is the kernel's and
20
+ * `organizations` is created inside the frozen prefix, which every
21
+ * above-watermark migration runs after.
22
+ */
23
+ export declare class Migration20260912T094646OrganizationsSalesChannelOrganizations extends Migration {
24
+ up(): Promise<void>;
25
+ down(): Promise<void>;
26
+ }
27
+ //# sourceMappingURL=20260912T094646_organizations_sales_channel_organizations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260912T094646_organizations_sales_channel_organizations.d.ts","sourceRoot":"","sources":["../../src/migrations/20260912T094646_organizations_sales_channel_organizations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,8DAA+D,SAAQ,SAAS;IAC5E,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAGrC"}