@stamhoofd/models 2.120.6 → 2.122.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 (296) hide show
  1. package/dist/factories/GroupFactory.d.ts.map +1 -1
  2. package/dist/factories/GroupFactory.js +1 -1
  3. package/dist/factories/GroupFactory.js.map +1 -1
  4. package/dist/factories/OrganizationFactory.d.ts +2 -1
  5. package/dist/factories/OrganizationFactory.d.ts.map +1 -1
  6. package/dist/factories/OrganizationFactory.js +9 -1
  7. package/dist/factories/OrganizationFactory.js.map +1 -1
  8. package/dist/factories/RegistrationInvitationFactory.d.ts +15 -0
  9. package/dist/factories/RegistrationInvitationFactory.d.ts.map +1 -0
  10. package/dist/factories/RegistrationInvitationFactory.js +18 -0
  11. package/dist/factories/RegistrationInvitationFactory.js.map +1 -0
  12. package/dist/factories/STPackageFactory.js.map +1 -1
  13. package/dist/factories/UserFactory.d.ts.map +1 -1
  14. package/dist/factories/UserFactory.js +2 -2
  15. package/dist/factories/UserFactory.js.map +1 -1
  16. package/dist/factories/index.d.ts +1 -0
  17. package/dist/factories/index.d.ts.map +1 -1
  18. package/dist/factories/index.js +1 -0
  19. package/dist/factories/index.js.map +1 -1
  20. package/dist/helpers/EmailBuilder.d.ts.map +1 -1
  21. package/dist/helpers/EmailBuilder.js +8 -8
  22. package/dist/helpers/EmailBuilder.js.map +1 -1
  23. package/dist/helpers/Handlebars.d.ts.map +1 -1
  24. package/dist/helpers/Handlebars.js +10 -1
  25. package/dist/helpers/Handlebars.js.map +1 -1
  26. package/dist/helpers/InvoiceCounter.d.ts +24 -0
  27. package/dist/helpers/InvoiceCounter.d.ts.map +1 -0
  28. package/dist/helpers/InvoiceCounter.js +133 -0
  29. package/dist/helpers/InvoiceCounter.js.map +1 -0
  30. package/dist/index.d.ts +0 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +0 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/migrations/1605262045-import-postcodes.d.ts.map +1 -1
  35. package/dist/migrations/1605262045-import-postcodes.js +58 -24
  36. package/dist/migrations/1605262045-import-postcodes.js.map +1 -1
  37. package/dist/migrations/1605262046-import-postcodes-nl.d.ts.map +1 -1
  38. package/dist/migrations/1605262046-import-postcodes-nl.js +54 -17
  39. package/dist/migrations/1605262046-import-postcodes-nl.js.map +1 -1
  40. package/dist/migrations/1719567881-organization-periodId.sql +2 -0
  41. package/dist/migrations/1719567882-groups-periodId.sql +2 -0
  42. package/dist/migrations/1720080975-convert-charset.d.ts +4 -0
  43. package/dist/migrations/1720080975-convert-charset.d.ts.map +1 -0
  44. package/dist/migrations/1720080975-convert-charset.js +26 -0
  45. package/dist/migrations/1720080975-convert-charset.js.map +1 -0
  46. package/dist/migrations/1720080976-convert-charset-leads.d.ts.map +1 -1
  47. package/dist/migrations/1720080976-convert-charset-leads.js +11 -10
  48. package/dist/migrations/1720080976-convert-charset-leads.js.map +1 -1
  49. package/dist/migrations/1721400546-users-memberId.sql +2 -0
  50. package/dist/migrations/1722269236-group-waitinglist-id.sql +2 -1
  51. package/dist/migrations/1722525785-balance-item-paying-organization-id.sql +2 -0
  52. package/dist/migrations/1722525787-depending-balance-item.sql +2 -0
  53. package/dist/migrations/1722963554-registration-group-price-and-options.sql +1 -1
  54. package/dist/migrations/1723652797-payments-paying-organization-id-fk.sql +2 -0
  55. package/dist/migrations/1733317908-added-missing-organization-fk-on-registrations.sql +2 -0
  56. package/dist/migrations/1733317910-paying-organization-id-fk.sql +2 -0
  57. package/dist/migrations/1733504881-negative-invoice-id.sql +6 -0
  58. package/dist/migrations/1733994455-balance-item-status-open.d.ts +4 -0
  59. package/dist/migrations/1733994455-balance-item-status-open.d.ts.map +1 -0
  60. package/dist/migrations/1733994455-balance-item-status-open.js +28 -0
  61. package/dist/migrations/1733994455-balance-item-status-open.js.map +1 -0
  62. package/dist/migrations/1763216320-bigint-balance-item-payments.sql +2 -0
  63. package/dist/migrations/1763216320-bigint-balance-items.sql +5 -0
  64. package/dist/migrations/1763216320-bigint-orders.sql +2 -0
  65. package/dist/migrations/1763216320-bigint-payments.sql +2 -0
  66. package/dist/migrations/1763216332-bigint-balance-item-price-total.sql +2 -0
  67. package/dist/migrations/1769087808-corrected-invoice-user-agent.sql +2 -0
  68. package/dist/migrations/1769087809-payments-invoice-id.sql +2 -0
  69. package/dist/migrations/1772033555-balance-item-package-id.sql +2 -0
  70. package/dist/migrations/1776873089-create-registration-invitations-table.sql +13 -0
  71. package/dist/migrations/1778657958-payments-create-mandate.sql +2 -0
  72. package/dist/migrations/1778657959-payments-mandate-id.sql +2 -0
  73. package/dist/migrations/1778796615-payments-reversing-payment-id.sql +5 -0
  74. package/dist/migrations/1778950642-price-invoiced.sql +2 -0
  75. package/dist/migrations/1779443446-transfer-fees.sql +3 -0
  76. package/dist/migrations/1779709174-used-register-code-balance-item-id.sql +5 -0
  77. package/dist/migrations/1779968328-payments-admin-user-id.sql +5 -0
  78. package/dist/migrations/1779970611-payments-refunded-amount.sql +2 -0
  79. package/dist/migrations/1779972640-balance-items-failed-at.sql +2 -0
  80. package/dist/migrations/1780328285-document-template-locked.sql +2 -0
  81. package/dist/migrations/1780328286-document-locked.sql +2 -0
  82. package/dist/migrations/1780412083-documents-set-locked.d.ts +4 -0
  83. package/dist/migrations/1780412083-documents-set-locked.d.ts.map +1 -0
  84. package/dist/migrations/1780412083-documents-set-locked.js +14 -0
  85. package/dist/migrations/1780412083-documents-set-locked.js.map +1 -0
  86. package/dist/migrations/1780928401-v1-groups-migration-data.d.ts +4 -0
  87. package/dist/migrations/1780928401-v1-groups-migration-data.d.ts.map +1 -0
  88. package/dist/migrations/1780928401-v1-groups-migration-data.js +44 -0
  89. package/dist/migrations/1780928401-v1-groups-migration-data.js.map +1 -0
  90. package/dist/models/BalanceItem.d.ts +14 -1
  91. package/dist/models/BalanceItem.d.ts.map +1 -1
  92. package/dist/models/BalanceItem.js +91 -41
  93. package/dist/models/BalanceItem.js.map +1 -1
  94. package/dist/models/CachedBalance.d.ts +6 -1
  95. package/dist/models/CachedBalance.d.ts.map +1 -1
  96. package/dist/models/CachedBalance.js +3 -2
  97. package/dist/models/CachedBalance.js.map +1 -1
  98. package/dist/models/Document.d.ts +4 -0
  99. package/dist/models/Document.d.ts.map +1 -1
  100. package/dist/models/Document.js +26 -3
  101. package/dist/models/Document.js.map +1 -1
  102. package/dist/models/DocumentTemplate.d.ts +4 -0
  103. package/dist/models/DocumentTemplate.d.ts.map +1 -1
  104. package/dist/models/DocumentTemplate.js +37 -1
  105. package/dist/models/DocumentTemplate.js.map +1 -1
  106. package/dist/models/Email.d.ts.map +1 -1
  107. package/dist/models/Email.js +1 -1
  108. package/dist/models/Email.js.map +1 -1
  109. package/dist/models/EmailVerificationCode.d.ts.map +1 -1
  110. package/dist/models/EmailVerificationCode.js +3 -13
  111. package/dist/models/EmailVerificationCode.js.map +1 -1
  112. package/dist/models/Event.d.ts +2 -1
  113. package/dist/models/Event.d.ts.map +1 -1
  114. package/dist/models/Event.js +3 -0
  115. package/dist/models/Event.js.map +1 -1
  116. package/dist/models/EventNotification.d.ts.map +1 -1
  117. package/dist/models/EventNotification.js +5 -5
  118. package/dist/models/EventNotification.js.map +1 -1
  119. package/dist/models/Group.d.ts +4 -0
  120. package/dist/models/Group.d.ts.map +1 -1
  121. package/dist/models/Group.js +17 -0
  122. package/dist/models/Group.js.map +1 -1
  123. package/dist/models/Invoice.d.ts +1 -0
  124. package/dist/models/Invoice.d.ts.map +1 -1
  125. package/dist/models/Invoice.js +8 -8
  126. package/dist/models/Invoice.js.map +1 -1
  127. package/dist/models/MemberPlatformMembership.d.ts.map +1 -1
  128. package/dist/models/MemberPlatformMembership.js +9 -0
  129. package/dist/models/MemberPlatformMembership.js.map +1 -1
  130. package/dist/models/MollieToken.d.ts +4 -8
  131. package/dist/models/MollieToken.d.ts.map +1 -1
  132. package/dist/models/MollieToken.js +37 -90
  133. package/dist/models/MollieToken.js.map +1 -1
  134. package/dist/models/Order.d.ts.map +1 -1
  135. package/dist/models/Order.js +1 -0
  136. package/dist/models/Order.js.map +1 -1
  137. package/dist/models/Organization.d.ts +30 -23
  138. package/dist/models/Organization.d.ts.map +1 -1
  139. package/dist/models/Organization.js +113 -61
  140. package/dist/models/Organization.js.map +1 -1
  141. package/dist/models/PasswordToken.d.ts +5 -1
  142. package/dist/models/PasswordToken.d.ts.map +1 -1
  143. package/dist/models/PasswordToken.js +18 -17
  144. package/dist/models/PasswordToken.js.map +1 -1
  145. package/dist/models/Payment.d.ts +35 -3
  146. package/dist/models/Payment.d.ts.map +1 -1
  147. package/dist/models/Payment.js +66 -3
  148. package/dist/models/Payment.js.map +1 -1
  149. package/dist/models/Registration.d.ts +1 -0
  150. package/dist/models/Registration.d.ts.map +1 -1
  151. package/dist/models/Registration.js +4 -3
  152. package/dist/models/Registration.js.map +1 -1
  153. package/dist/models/RegistrationInvitation.d.ts +14 -0
  154. package/dist/models/RegistrationInvitation.d.ts.map +1 -0
  155. package/dist/models/RegistrationInvitation.js +45 -0
  156. package/dist/models/RegistrationInvitation.js.map +1 -0
  157. package/dist/models/STCredit.d.ts +4 -0
  158. package/dist/models/STCredit.d.ts.map +1 -1
  159. package/dist/models/STCredit.js +28 -0
  160. package/dist/models/STCredit.js.map +1 -1
  161. package/dist/models/STInvoice.d.ts +7 -1
  162. package/dist/models/STInvoice.d.ts.map +1 -1
  163. package/dist/models/STInvoice.js +9 -0
  164. package/dist/models/STInvoice.js.map +1 -1
  165. package/dist/models/STPackage.d.ts +4 -0
  166. package/dist/models/STPackage.d.ts.map +1 -1
  167. package/dist/models/STPackage.js +12 -1
  168. package/dist/models/STPackage.js.map +1 -1
  169. package/dist/models/UsedRegisterCode.d.ts +9 -0
  170. package/dist/models/UsedRegisterCode.d.ts.map +1 -1
  171. package/dist/models/UsedRegisterCode.js +31 -0
  172. package/dist/models/UsedRegisterCode.js.map +1 -1
  173. package/dist/models/User.d.ts +1 -1
  174. package/dist/models/User.d.ts.map +1 -1
  175. package/dist/models/User.js +1 -1
  176. package/dist/models/User.js.map +1 -1
  177. package/dist/models/_relations.js +25 -0
  178. package/dist/models/_relations.js.map +1 -1
  179. package/dist/models/addresses/City.d.ts +4 -4
  180. package/dist/models/addresses/City.d.ts.map +1 -1
  181. package/dist/models/addresses/City.js +6 -6
  182. package/dist/models/addresses/City.js.map +1 -1
  183. package/dist/models/addresses/PostalCode.d.ts +2 -2
  184. package/dist/models/addresses/PostalCode.d.ts.map +1 -1
  185. package/dist/models/addresses/PostalCode.js +4 -3
  186. package/dist/models/addresses/PostalCode.js.map +1 -1
  187. package/dist/models/addresses/Street.d.ts +3 -3
  188. package/dist/models/addresses/Street.d.ts.map +1 -1
  189. package/dist/models/addresses/Street.js +4 -4
  190. package/dist/models/addresses/Street.js.map +1 -1
  191. package/dist/models/index.d.ts +2 -0
  192. package/dist/models/index.d.ts.map +1 -1
  193. package/dist/models/index.js +2 -0
  194. package/dist/models/index.js.map +1 -1
  195. package/dist/models/v1GroupMigrationData.d.ts +22 -0
  196. package/dist/models/v1GroupMigrationData.d.ts.map +1 -0
  197. package/dist/models/v1GroupMigrationData.js +48 -0
  198. package/dist/models/v1GroupMigrationData.js.map +1 -0
  199. package/package.json +41 -13
  200. package/src/factories/GroupFactory.ts +4 -6
  201. package/src/factories/OrganizationFactory.ts +12 -4
  202. package/src/factories/RegistrationInvitationFactory.ts +24 -0
  203. package/src/factories/STPackageFactory.ts +2 -2
  204. package/src/factories/UserFactory.ts +4 -5
  205. package/src/factories/index.ts +1 -0
  206. package/src/helpers/EmailBuilder.ts +19 -28
  207. package/src/helpers/Handlebars.ts +10 -1
  208. package/src/helpers/InvoiceCounter.test.ts +220 -0
  209. package/src/helpers/InvoiceCounter.ts +162 -0
  210. package/src/index.ts +0 -1
  211. package/src/migrations/1605262045-import-postcodes.ts +62 -25
  212. package/src/migrations/1605262046-import-postcodes-nl.ts +58 -17
  213. package/src/migrations/1719567881-organization-periodId.sql +2 -0
  214. package/src/migrations/1719567882-groups-periodId.sql +2 -0
  215. package/src/migrations/1720080975-convert-charset.ts +34 -0
  216. package/src/migrations/1720080976-convert-charset-leads.ts +16 -13
  217. package/src/migrations/1721400546-users-memberId.sql +2 -0
  218. package/src/migrations/1722269236-group-waitinglist-id.sql +2 -1
  219. package/src/migrations/1722525785-balance-item-paying-organization-id.sql +2 -0
  220. package/src/migrations/1722525787-depending-balance-item.sql +2 -0
  221. package/src/migrations/1722963554-registration-group-price-and-options.sql +1 -1
  222. package/src/migrations/1723652797-payments-paying-organization-id-fk.sql +2 -0
  223. package/src/migrations/1733317908-added-missing-organization-fk-on-registrations.sql +2 -0
  224. package/src/migrations/1733317910-paying-organization-id-fk.sql +2 -0
  225. package/src/migrations/1733504881-negative-invoice-id.sql +6 -0
  226. package/src/migrations/1733994455-balance-item-status-open.ts +30 -0
  227. package/src/migrations/1763216320-bigint-balance-item-payments.sql +2 -0
  228. package/src/migrations/1763216320-bigint-balance-items.sql +5 -0
  229. package/src/migrations/1763216320-bigint-orders.sql +2 -0
  230. package/src/migrations/1763216320-bigint-payments.sql +2 -0
  231. package/src/migrations/1763216332-bigint-balance-item-price-total.sql +2 -0
  232. package/src/migrations/1769087808-corrected-invoice-user-agent.sql +2 -0
  233. package/src/migrations/1769087809-payments-invoice-id.sql +2 -0
  234. package/src/migrations/1772033555-balance-item-package-id.sql +2 -0
  235. package/src/migrations/1776873089-create-registration-invitations-table.sql +13 -0
  236. package/src/migrations/1778657958-payments-create-mandate.sql +2 -0
  237. package/src/migrations/1778657959-payments-mandate-id.sql +2 -0
  238. package/src/migrations/1778796615-payments-reversing-payment-id.sql +5 -0
  239. package/src/migrations/1778950642-price-invoiced.sql +2 -0
  240. package/src/migrations/1779443446-transfer-fees.sql +3 -0
  241. package/src/migrations/1779709174-used-register-code-balance-item-id.sql +5 -0
  242. package/src/migrations/1779968328-payments-admin-user-id.sql +5 -0
  243. package/src/migrations/1779970611-payments-refunded-amount.sql +2 -0
  244. package/src/migrations/1779972640-balance-items-failed-at.sql +2 -0
  245. package/src/migrations/1780328285-document-template-locked.sql +2 -0
  246. package/src/migrations/1780328286-document-locked.sql +2 -0
  247. package/src/migrations/1780412083-documents-set-locked.ts +18 -0
  248. package/src/migrations/1780928401-v1-groups-migration-data.ts +50 -0
  249. package/src/models/BalanceItem.ts +98 -43
  250. package/src/models/CachedBalance.test.ts +46 -46
  251. package/src/models/CachedBalance.ts +7 -7
  252. package/src/models/Document.ts +34 -13
  253. package/src/models/DocumentTemplate.ts +56 -17
  254. package/src/models/Email.test.ts +3 -3
  255. package/src/models/Email.ts +28 -49
  256. package/src/models/EmailVerificationCode.ts +8 -22
  257. package/src/models/Event.ts +6 -4
  258. package/src/models/EventNotification.ts +6 -6
  259. package/src/models/Group.ts +24 -3
  260. package/src/models/Invoice.ts +10 -9
  261. package/src/models/MemberPlatformMembership.test.ts +70 -0
  262. package/src/models/MemberPlatformMembership.ts +16 -12
  263. package/src/models/MollieToken.ts +42 -102
  264. package/src/models/Order.ts +14 -26
  265. package/src/models/Organization.ts +143 -86
  266. package/src/models/PasswordToken.ts +21 -21
  267. package/src/models/Payment.ts +61 -4
  268. package/src/models/Registration.ts +6 -5
  269. package/src/models/RegistrationInvitation.ts +40 -0
  270. package/src/models/STCredit.ts +32 -0
  271. package/src/models/STInvoice.ts +11 -5
  272. package/src/models/STPackage.ts +19 -14
  273. package/src/models/UsedRegisterCode.ts +34 -0
  274. package/src/models/User.ts +6 -7
  275. package/src/models/_relations.ts +29 -0
  276. package/src/models/addresses/City.ts +8 -6
  277. package/src/models/addresses/PostalCode.test.ts +1 -0
  278. package/src/models/addresses/PostalCode.ts +5 -3
  279. package/src/models/addresses/Street.ts +6 -4
  280. package/src/models/index.ts +3 -0
  281. package/src/models/v1GroupMigrationData.ts +43 -0
  282. package/dist/helpers/MemberMerger.d.ts +0 -14
  283. package/dist/helpers/MemberMerger.d.ts.map +0 -1
  284. package/dist/helpers/MemberMerger.js +0 -364
  285. package/dist/helpers/MemberMerger.js.map +0 -1
  286. package/dist/migrations/1720080975-convert-charset.sql +0 -85
  287. package/dist/migrations/1723202126-member-number-index.sql +0 -2
  288. package/dist/models/OneTimeToken.d.ts +0 -38
  289. package/dist/models/OneTimeToken.d.ts.map +0 -1
  290. package/dist/models/OneTimeToken.js +0 -125
  291. package/dist/models/OneTimeToken.js.map +0 -1
  292. package/src/helpers/MemberMerger.test.ts +0 -782
  293. package/src/helpers/MemberMerger.ts +0 -577
  294. package/src/migrations/1720080975-convert-charset.sql +0 -85
  295. package/src/migrations/1723202126-member-number-index.sql +0 -2
  296. package/src/models/OneTimeToken.ts +0 -133
@@ -0,0 +1,133 @@
1
+ import { QueueHandler } from '@stamhoofd/queues';
2
+ import { Formatter } from '@stamhoofd/utility';
3
+ import { Invoice } from '../models/Invoice.js';
4
+ export class InvoiceCounter {
5
+ static numberCache = new Map();
6
+ static getNextResetDate(last, resetMonth) {
7
+ const candidate = last.set({ month: resetMonth, day: 1 }).startOf('day');
8
+ return candidate > last ? candidate : candidate.plus({ years: 1 }).startOf('day');
9
+ }
10
+ static shouldStartNewSeries(settings, lastInvoiceDate, invoiceDate) {
11
+ if (settings.resetMonth === null) {
12
+ return false;
13
+ }
14
+ const last = Formatter.luxon(lastInvoiceDate);
15
+ const current = Formatter.luxon(invoiceDate);
16
+ return current >= this.getNextResetDate(last, settings.resetMonth);
17
+ }
18
+ /**
19
+ * XXX-123 -> 123
20
+ * YYY-0001 -> 1
21
+ *
22
+ * if prefix is enabled:
23
+ * 2025001 -> 1
24
+ * STA-2025001 -> 1
25
+ */
26
+ static parseNumber(settings, str) {
27
+ str = str.replace(/\D+/g, '-').replace(/^-+/, '').replace(/-+$/, '');
28
+ // Remove prefixes and possibly year
29
+ const splitted = str.split('-');
30
+ let last = splitted[splitted.length - 1];
31
+ const stripYear = settings.prefixYear;
32
+ if (last.length) {
33
+ if (stripYear) {
34
+ if (last.length <= 4) {
35
+ console.error('Could not parse invoice number from string ' + str + ' (could not trim year prefix)');
36
+ return null;
37
+ }
38
+ last = last.substring(4);
39
+ }
40
+ const int = parseInt(last);
41
+ if (int !== 0 && !isNaN(int) && isFinite(int)) {
42
+ return int;
43
+ }
44
+ }
45
+ console.error('Could not parse invoice number from string ' + str);
46
+ return null;
47
+ }
48
+ static formatNumber(settings, int, invoicedAt) {
49
+ let str = int.toFixed(0).padStart(settings.padZeroLength, '0');
50
+ if (settings.prefixYear) {
51
+ const year = Formatter.luxon(invoicedAt).year;
52
+ str = year + str;
53
+ }
54
+ if (settings.fixedPrefix) {
55
+ if (!settings.fixedPrefix.match(/\D$/)) {
56
+ // Need seperation character
57
+ str = settings.fixedPrefix.replace(/-$/, '') + '-' + str;
58
+ }
59
+ else {
60
+ str = settings.fixedPrefix + str;
61
+ }
62
+ }
63
+ return str;
64
+ }
65
+ static async assignNextNumber(invoice, settings) {
66
+ const organizationId = invoice.organizationId;
67
+ return await QueueHandler.schedule('invoice/numbers-' + organizationId, async () => {
68
+ // Invoice date should be inside the queue to ensure it is chronologically generated
69
+ const invoicedAt = new Date();
70
+ const c = this.numberCache.get(organizationId);
71
+ if (c !== undefined) {
72
+ const lastNumber = c.lastNumber;
73
+ // check date
74
+ if (!this.shouldStartNewSeries(settings, c.date, invoicedAt)) {
75
+ // Set and save.
76
+ // we do this here because it assures we'll not increase the next number if the save fails
77
+ invoice.number = this.formatNumber(settings, lastNumber + 1, invoicedAt);
78
+ invoice.invoicedAt = invoicedAt;
79
+ await invoice.save();
80
+ // If save succeeds, increase cache:
81
+ this.numberCache.set(organizationId, {
82
+ lastNumber: lastNumber + 1,
83
+ date: new Date(invoicedAt)
84
+ });
85
+ return;
86
+ }
87
+ }
88
+ const lastInvoice = await Invoice.select()
89
+ .where('organizationId', organizationId)
90
+ .where('number', '!=', null)
91
+ .where('invoicedAt', '!=', null)
92
+ .orderBy('invoicedAt', 'DESC')
93
+ .first(false);
94
+ if (lastInvoice && lastInvoice.number && lastInvoice.invoicedAt) {
95
+ // check date
96
+ if (!this.shouldStartNewSeries(settings, lastInvoice.invoicedAt, invoicedAt)) {
97
+ const lastNumber = this.parseNumber(settings, lastInvoice.number);
98
+ if (lastNumber) {
99
+ invoice.number = this.formatNumber(settings, lastNumber + 1, invoicedAt);
100
+ invoice.invoicedAt = invoicedAt;
101
+ await invoice.save();
102
+ this.numberCache.set(organizationId, {
103
+ lastNumber: lastNumber + 1,
104
+ date: new Date(invoicedAt)
105
+ });
106
+ return;
107
+ }
108
+ }
109
+ }
110
+ // Start new
111
+ invoice.number = this.formatNumber(settings, 1, invoicedAt);
112
+ invoice.invoicedAt = invoicedAt;
113
+ await invoice.save();
114
+ this.numberCache.set(organizationId, {
115
+ lastNumber: 1,
116
+ date: new Date(invoicedAt)
117
+ });
118
+ return;
119
+ });
120
+ }
121
+ static async resetNumbers(organizationId) {
122
+ // Prevent race conditions: create a queue
123
+ // The queue can only run one at a time for the same webshop (so multiple webshops at the same time are allowed)
124
+ return await QueueHandler.schedule('invoice/numbers-' + organizationId, async () => {
125
+ this.numberCache.delete(organizationId);
126
+ return Promise.resolve();
127
+ });
128
+ }
129
+ static clearAll() {
130
+ this.numberCache.clear();
131
+ }
132
+ }
133
+ //# sourceMappingURL=InvoiceCounter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InvoiceCounter.js","sourceRoot":"","sources":["../../src/helpers/InvoiceCounter.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  export * from './helpers/EmailBuilder.js';
2
- export * from './helpers/MemberMerger.js';
3
2
  export * from './helpers/RateLimiter.js';
4
3
  export * from './helpers/WebshopCounter.js';
5
4
  export * from './models/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAG5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4CAA4C,CAAC;AAG3D,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAG5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4CAA4C,CAAC;AAG3D,cAAc,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,5 @@
1
1
  // Helpers
2
2
  export * from './helpers/EmailBuilder.js';
3
- export * from './helpers/MemberMerger.js';
4
3
  export * from './helpers/RateLimiter.js';
5
4
  export * from './helpers/WebshopCounter.js';
6
5
  // Models
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAE5C,SAAS;AACT,cAAc,mBAAmB,CAAC;AAClC,cAAc,4CAA4C,CAAC;AAE3D,YAAY;AACZ,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAE5C,SAAS;AACT,cAAc,mBAAmB,CAAC;AAClC,cAAc,4CAA4C,CAAC;AAE3D,YAAY;AACZ,cAAc,sBAAsB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"1605262045-import-postcodes.d.ts","sourceRoot":"","sources":["../../src/migrations/1605262045-import-postcodes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAInD,qBAAa,QAAS,SAAQ,cAAc;IACxC,MAAM,CAAC,KAAK,SAAe;IAK3B,EAAE,EAAG,MAAM,CAAC;IAGZ,QAAQ,EAAE,MAAM,CAAC;IAGjB,QAAQ,EAAE,MAAM,CAAC;IAGjB,sBAAsB,EAAE,MAAM,CAAC;IAG/B,aAAa,EAAE,MAAM,CAAC;IAGtB,SAAS,EAAE,MAAM,CAAC;IAGlB,IAAI,EAAG,IAAI,CAAC;CACf;;AAeD,wBA4EG"}
1
+ {"version":3,"file":"1605262045-import-postcodes.d.ts","sourceRoot":"","sources":["../../src/migrations/1605262045-import-postcodes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAIhD,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAInD,qBAAa,QAAS,SAAQ,cAAc;IACxC,MAAM,CAAC,KAAK,SAAe;IAK3B,EAAE,EAAG,MAAM,CAAC;IAGZ,QAAQ,EAAE,MAAM,CAAC;IAGjB,QAAQ,EAAE,MAAM,CAAC;IAGjB,sBAAsB,EAAE,MAAM,CAAC;IAG/B,aAAa,EAAE,MAAM,CAAC;IAGtB,SAAS,EAAE,MAAM,CAAC;IAGlB,IAAI,EAAG,IAAI,CAAC;CACf;;AAgBD,wBA8EG"}
@@ -1,8 +1,9 @@
1
1
  import { __decorate } from "tslib";
2
- import { column, Migration } from '@simonbackx/simple-database';
2
+ import { column, Database, Migration } from '@simonbackx/simple-database';
3
3
  import { QueryableModel } from '@stamhoofd/sql';
4
4
  import { Country } from '@stamhoofd/types/Country';
5
5
  import { StringCompare } from '@stamhoofd/utility';
6
+ import { v4 as uuidv4 } from 'uuid';
6
7
  import { City } from '../models/addresses/City.js';
7
8
  import { PostalCode } from '../models/addresses/PostalCode.js';
8
9
  import { Province } from '../models/addresses/Province.js';
@@ -37,16 +38,17 @@ __decorate([
37
38
  __decorate([
38
39
  column({ type: 'string' })
39
40
  ], Gemeente.prototype, "provincie", void 0);
40
- async function getProvince(name, provinces) {
41
+ function getProvince(name, provinces, provinceRows) {
41
42
  const p = provinces.find(p => StringCompare.typoCount(p.name, name) < 2 && p.country == Country.Belgium);
42
43
  if (p) {
43
44
  return p;
44
45
  }
45
46
  const province = new Province();
47
+ province.id = uuidv4();
46
48
  province.country = Country.Belgium;
47
49
  province.name = name.trim();
48
- await province.save();
49
50
  provinces.push(province);
51
+ provinceRows.push([province.id, province.name, province.country]);
50
52
  return province;
51
53
  }
52
54
  export default new Migration(async () => {
@@ -57,61 +59,93 @@ export default new Migration(async () => {
57
59
  // Loop all gemeenten
58
60
  const provinces = await Province.all();
59
61
  const gemeenten = await Gemeente.all();
60
- const cities = [];
62
+ const citiesByNameAndProvince = new Map();
63
+ const provinceRows = [];
64
+ const cityRows = [];
65
+ const postalCodeRows = [];
66
+ const parentCityUpdates = new Map();
61
67
  for (const gemeente of gemeenten) {
62
- const province = await getProvince(gemeente.provincie, provinces);
68
+ const province = getProvince(gemeente.provincie, provinces, provinceRows);
63
69
  // Some cities have the same name
64
- const found = cities.find(c => c.name.trim() == gemeente.gemeente.trim() && c.provinceId == province.id);
70
+ const found = citiesByNameAndProvince.get(cityKey(gemeente.gemeente, province.id));
65
71
  if (!found) {
66
72
  // Create the city
67
73
  const city = new City();
74
+ city.id = uuidv4();
68
75
  city.name = gemeente.gemeente.trim();
69
76
  city.country = Country.Belgium;
70
77
  city.provinceId = province.id;
71
- await city.save();
78
+ cityRows.push([city.id, city.name, city.provinceId, city.parentCityId, city.country]);
72
79
  // Also add postal code already
73
- const postalCode = new PostalCode();
74
- postalCode.postalCode = gemeente.postcode;
75
- postalCode.cityId = city.id;
76
- postalCode.country = Country.Belgium;
77
- await postalCode.save();
80
+ postalCodeRows.push([uuidv4(), gemeente.postcode, city.id, Country.Belgium]);
78
81
  gemeente.city = city;
79
- cities.push(city);
82
+ citiesByNameAndProvince.set(cityKey(city.name, city.provinceId), city);
80
83
  }
81
84
  else {
82
85
  gemeente.city = found;
83
86
  // Also add postal code already
84
- const postalCode = new PostalCode();
85
- postalCode.postalCode = gemeente.postcode;
86
- postalCode.cityId = found.id;
87
- postalCode.country = Country.Belgium;
88
- await postalCode.save();
87
+ postalCodeRows.push([uuidv4(), gemeente.postcode, found.id, Country.Belgium]);
89
88
  }
90
89
  }
91
90
  for (const gemeente of gemeenten) {
92
91
  if (gemeente.gemeente.trim() == gemeente.hoofdgemeente.trim()) {
93
92
  continue;
94
93
  }
95
- const hoofd = cities.find(c => c.name.trim() == gemeente.hoofdgemeente.trim() && c.provinceId == gemeente.city.provinceId);
94
+ const hoofd = citiesByNameAndProvince.get(cityKey(gemeente.hoofdgemeente, gemeente.city.provinceId));
96
95
  if (!hoofd) {
97
96
  // Create the city
98
97
  const city = new City();
98
+ city.id = uuidv4();
99
99
  city.name = gemeente.hoofdgemeente.trim();
100
100
  city.country = Country.Belgium;
101
- const province = await getProvince(gemeente.provincie, provinces);
101
+ const province = getProvince(gemeente.provincie, provinces, provinceRows);
102
102
  city.provinceId = province.id;
103
- await city.save();
104
- cities.push(city);
103
+ cityRows.push([city.id, city.name, city.provinceId, city.parentCityId, city.country]);
104
+ citiesByNameAndProvince.set(cityKey(city.name, city.provinceId), city);
105
105
  // do not create a postal code here, these don't have one
106
106
  // console.log('Assigning ' + gemeente.gemeente + ' to ' + city.name);
107
107
  gemeente.city.parentCityId = city.id;
108
- await gemeente.city.save();
108
+ parentCityUpdates.set(gemeente.city.id, city.id);
109
109
  }
110
110
  else {
111
111
  // console.log('Assigning ' + gemeente.gemeente + ' to ' + hoofd.name);
112
112
  gemeente.city.parentCityId = hoofd.id;
113
- await gemeente.city.save();
113
+ parentCityUpdates.set(gemeente.city.id, hoofd.id);
114
114
  }
115
115
  }
116
+ await insertRows(Province.table, ['id', 'name', 'country'], provinceRows);
117
+ await insertRows(City.table, ['id', 'name', 'provinceId', 'parentCityId', 'country'], cityRows);
118
+ await insertRows(PostalCode.table, ['id', 'postalCode', 'cityId', 'country'], postalCodeRows);
119
+ await updateParentCityIds([...parentCityUpdates.entries()]);
116
120
  });
121
+ function cityKey(name, provinceId) {
122
+ return `${name.trim()}\0${provinceId}`;
123
+ }
124
+ async function insertRows(table, columns, rows) {
125
+ for (const chunk of chunks(rows, 1000)) {
126
+ if (chunk.length === 0) {
127
+ continue;
128
+ }
129
+ await Database.insert(`INSERT INTO \`${table}\` (${columns.map(column => `\`${column}\``).join(', ')}) VALUES ?`, [chunk]);
130
+ }
131
+ }
132
+ async function updateParentCityIds(rows) {
133
+ for (const chunk of chunks(rows, 1000)) {
134
+ if (chunk.length === 0) {
135
+ continue;
136
+ }
137
+ const cases = chunk.map(() => 'WHEN ? THEN ?').join(' ');
138
+ await Database.statement(`UPDATE \`${City.table}\` SET \`parentCityId\` = CASE \`id\` ${cases} END WHERE \`id\` IN (?)`, [
139
+ ...chunk.flatMap(([cityId, parentCityId]) => [cityId, parentCityId]),
140
+ chunk.map(([cityId]) => cityId),
141
+ ]);
142
+ }
143
+ }
144
+ function chunks(values, size) {
145
+ const result = [];
146
+ for (let index = 0; index < values.length; index += size) {
147
+ result.push(values.slice(index, index + size));
148
+ }
149
+ return result;
150
+ }
117
151
  //# sourceMappingURL=1605262045-import-postcodes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"1605262045-import-postcodes.js","sourceRoot":"","sources":["../../src/migrations/1605262045-import-postcodes.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,MAAM,OAAO,QAAS,SAAQ,cAAc;IACxC,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;IAK3B,EAAE,CAAU;IAGZ,QAAQ,CAAS;IAGjB,QAAQ,CAAS;IAGjB,sBAAsB,CAAS,CAAC,uBAAuB;IAGvD,aAAa,CAAS;IAGtB,SAAS,CAAS;IAElB,cAAc;IACd,IAAI,CAAQ;;AAlBZ;IAHC,MAAM,CAAC;QACJ,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS;KACjC,CAAC;oCACU;AAGZ;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;0CACV;AAGjB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;0CACV;AAGjB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;wDACI;AAG/B;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;+CACL;AAGtB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;2CACT;AAMtB,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,SAAqB;IAC1D,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACzG,IAAI,CAAC,EAAE,CAAC;QACJ,OAAO,CAAC,CAAC;IACb,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IAChC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACnC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACtB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,eAAe,IAAI,SAAS,CAAC,KAAK,IAAI,EAAE;IACpC,IAAI,SAAS,CAAC,WAAW,IAAI,MAAM,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO;IACX,CAAC;IACD,qBAAqB;IACrB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC;IACvC,MAAM,MAAM,GAAW,EAAE,CAAC;IAE1B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAElE,iCAAiC;QACjC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEzG,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,kBAAkB;YAClB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC;YAE9B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAElB,+BAA+B;YAC/B,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;YACpC,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC;YAC1C,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;YAC5B,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YACrC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;YAExB,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;aACI,CAAC;YACF,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC;YAEtB,+BAA+B;YAC/B,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;YACpC,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC;YAC1C,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC;YAC7B,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YACrC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;YAC5D,SAAS;QACb,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3H,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,kBAAkB;YAClB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAE/B,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAClE,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAElB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,yDAAyD;YAEzD,sEAAsE;YACtE,QAAQ,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;aACI,CAAC;YACF,uEAAuE;YACvE,QAAQ,CAAC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,EAAE,CAAC;YACtC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;IACL,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"1605262045-import-postcodes.js","sourceRoot":"","sources":["../../src/migrations/1605262045-import-postcodes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"1605262046-import-postcodes-nl.d.ts","sourceRoot":"","sources":["../../src/migrations/1605262046-import-postcodes-nl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;;AAuCxD,wBAuDG"}
1
+ {"version":3,"file":"1605262046-import-postcodes-nl.d.ts","sourceRoot":"","sources":["../../src/migrations/1605262046-import-postcodes-nl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAE,MAAM,6BAA6B,CAAC;;AA0ClE,wBA4DG"}
@@ -1,34 +1,37 @@
1
- import { Migration } from '@simonbackx/simple-database';
1
+ import { Database, Migration } from '@simonbackx/simple-database';
2
2
  import { Country } from '@stamhoofd/types/Country';
3
3
  import { StringCompare } from '@stamhoofd/utility';
4
4
  import fs from 'fs';
5
5
  import readline from 'readline';
6
+ import { v4 as uuidv4 } from 'uuid';
6
7
  import { City } from '../models/addresses/City.js';
7
8
  import { PostalCode } from '../models/addresses/PostalCode.js';
8
9
  import { Province } from '../models/addresses/Province.js';
9
- async function getProvince(name, provinces) {
10
+ function getProvince(name, provinces, provinceRows) {
10
11
  const p = provinces.find(p => StringCompare.typoCount(p.name, name) == 0 && p.country == Country.Netherlands);
11
12
  if (p) {
12
13
  return p;
13
14
  }
14
15
  const province = new Province();
16
+ province.id = uuidv4();
15
17
  province.country = Country.Netherlands;
16
18
  province.name = name;
17
- await province.save();
18
19
  provinces.push(province);
20
+ provinceRows.push([province.id, province.name, province.country]);
19
21
  return province;
20
22
  }
21
- async function getCity(name, provinceId, cities) {
22
- const p = cities.find(p => StringCompare.typoCount(p.name, name) == 0 && p.country == Country.Netherlands);
23
+ function getCity(name, provinceId, citiesByName, cityRows) {
24
+ const p = citiesByName.get(normalizeCityName(name));
23
25
  if (p) {
24
26
  return p;
25
27
  }
26
28
  const city = new City();
29
+ city.id = uuidv4();
27
30
  city.name = name;
28
31
  city.country = Country.Netherlands;
29
32
  city.provinceId = provinceId;
30
- await city.save();
31
- cities.push(city);
33
+ cityRows.push([city.id, city.name, city.provinceId, city.parentCityId, city.country]);
34
+ citiesByName.set(normalizeCityName(city.name), city);
32
35
  return city;
33
36
  }
34
37
  export default new Migration(async () => {
@@ -44,14 +47,18 @@ export default new Migration(async () => {
44
47
  return { path: folder + '/' + dirent.name, name: dirent.name };
45
48
  });
46
49
  const allProvinces = await Province.where({ country: Country.Netherlands });
50
+ const provinceRows = [];
51
+ const cityRows = [];
52
+ const postalCodeRows = [];
53
+ const parentCityUpdates = [];
47
54
  for (const p of provinces) {
48
55
  // console.log(p.name);
49
- const province = await getProvince(p.name.trim(), allProvinces);
56
+ const province = getProvince(p.name.trim(), allProvinces, provinceRows);
50
57
  // const cities = await fs.readFile(p.path, { encoding: "utf-8" });
51
58
  const lineReader = readline.createInterface({
52
59
  input: fs.createReadStream(p.path, { encoding: 'utf-8' }),
53
60
  });
54
- const cities = [];
61
+ const citiesByName = new Map();
55
62
  for await (const line of lineReader) {
56
63
  const splitted = line.split('\t');
57
64
  if (splitted.length !== 3) {
@@ -62,19 +69,49 @@ export default new Migration(async () => {
62
69
  const gemeente = splitted[1].trim();
63
70
  const plaats = splitted[2].trim();
64
71
  // Check plaats and gemeente
65
- const city = await getCity(plaats, province.id, cities);
66
- const city2 = await getCity(gemeente, province.id, cities); // might be the same as city
72
+ const city = getCity(plaats, province.id, citiesByName, cityRows);
73
+ const city2 = getCity(gemeente, province.id, citiesByName, cityRows); // might be the same as city
67
74
  if (city2.id !== city.id && city.parentCityId === null) {
68
75
  city.parentCityId = city2.id;
69
- await city.save();
76
+ parentCityUpdates.push([city.id, city2.id]);
70
77
  }
71
78
  // Also add postal code already
72
- const postalCode = new PostalCode();
73
- postalCode.postalCode = postcode;
74
- postalCode.cityId = city.id;
75
- postalCode.country = Country.Netherlands;
76
- await postalCode.save();
79
+ postalCodeRows.push([uuidv4(), postcode, city.id, Country.Netherlands]);
77
80
  }
78
81
  }
82
+ await insertRows(Province.table, ['id', 'name', 'country'], provinceRows);
83
+ await insertRows(City.table, ['id', 'name', 'provinceId', 'parentCityId', 'country'], cityRows);
84
+ await insertRows(PostalCode.table, ['id', 'postalCode', 'cityId', 'country'], postalCodeRows);
85
+ await updateParentCityIds(parentCityUpdates);
79
86
  });
87
+ function normalizeCityName(name) {
88
+ return name.normalize('NFD').replace(/[\u0300-\u036f]/g, '').toLowerCase().replace(/\s+/, ' ').trim();
89
+ }
90
+ async function insertRows(table, columns, rows) {
91
+ for (const chunk of chunks(rows, 1000)) {
92
+ if (chunk.length === 0) {
93
+ continue;
94
+ }
95
+ await Database.insert(`INSERT INTO \`${table}\` (${columns.map(column => `\`${column}\``).join(', ')}) VALUES ?`, [chunk]);
96
+ }
97
+ }
98
+ async function updateParentCityIds(rows) {
99
+ for (const chunk of chunks(rows, 1000)) {
100
+ if (chunk.length === 0) {
101
+ continue;
102
+ }
103
+ const cases = chunk.map(() => 'WHEN ? THEN ?').join(' ');
104
+ await Database.statement(`UPDATE \`${City.table}\` SET \`parentCityId\` = CASE \`id\` ${cases} END WHERE \`id\` IN (?)`, [
105
+ ...chunk.flatMap(([cityId, parentCityId]) => [cityId, parentCityId]),
106
+ chunk.map(([cityId]) => cityId),
107
+ ]);
108
+ }
109
+ }
110
+ function chunks(values, size) {
111
+ const result = [];
112
+ for (let index = 0; index < values.length; index += size) {
113
+ result.push(values.slice(index, index + size));
114
+ }
115
+ return result;
116
+ }
80
117
  //# sourceMappingURL=1605262046-import-postcodes-nl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"1605262046-import-postcodes-nl.js","sourceRoot":"","sources":["../../src/migrations/1605262046-import-postcodes-nl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"1605262046-import-postcodes-nl.js","sourceRoot":"","sources":["../../src/migrations/1605262046-import-postcodes-nl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,SAAS,WAAW,CAAC,IAAY,EAAE,SAAqB,EAAE,YAAwB;IAC9E,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9G,IAAI,CAAC,EAAE,CAAC;QACJ,OAAO,CAAC,CAAC;IACb,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IACvC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;IAErB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,UAAkB,EAAE,YAA+B,EAAE,QAAqB;IACrG,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,IAAI,CAAC,EAAE,CAAC;QACJ,OAAO,CAAC,CAAC;IACb,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAEtF,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,eAAe,IAAI,SAAS,CAAC,KAAK,IAAI,EAAE;IACpC,IAAI,SAAS,CAAC,WAAW,IAAI,MAAM,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO;IACX,CAAC;IAED,iDAAiD;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,oBAAoB,CAAC;IAC1D,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;SACzE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;SACvC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACZ,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IACnE,CAAC,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5E,MAAM,YAAY,GAAe,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAgB,EAAE,CAAC;IACjC,MAAM,cAAc,GAAe,EAAE,CAAC;IACtC,MAAM,iBAAiB,GAAe,EAAE,CAAC;IAEzC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QACxB,uBAAuB;QAEvB,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;QAExE,mEAAmE;QAEnE,MAAM,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC;YACxC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;SAC5D,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,GAAG,EAAgB,CAAC;QAE7C,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;gBAC/C,SAAS;YACb,CAAC;YACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAElC,4BAA4B;YAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAClE,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,4BAA4B;YAClG,IAAI,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;gBACrD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,EAAE,CAAC;gBAC7B,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAChD,CAAC;YAED,+BAA+B;YAC/B,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;QAC5E,CAAC;IACL,CAAC;IAED,MAAM,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC,CAAC;IAC1E,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;IAChG,MAAM,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9F,MAAM,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AACH,SAAS,iBAAiB,CAAC,IAAY;IACnC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1G,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,KAAa,EAAE,OAAiB,EAAE,IAAiB;IACzE,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,SAAS;QACb,CAAC;QACD,MAAM,QAAQ,CAAC,MAAM,CAAC,iBAAiB,KAAK,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/H,CAAC;AACL,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,IAAgB;IAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,SAAS;QACb,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzD,MAAM,QAAQ,CAAC,SAAS,CAAC,YAAY,IAAI,CAAC,KAAK,yCAAyC,KAAK,0BAA0B,EAAE;YACrH,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YACpE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC;SAClC,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,SAAS,MAAM,CAAI,MAAW,EAAE,IAAY;IACxC,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -1,2 +1,4 @@
1
+ SET FOREIGN_KEY_CHECKS=0;
1
2
  ALTER TABLE `organizations` ADD COLUMN `periodId` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL;
2
3
  ALTER TABLE `organizations` ADD FOREIGN KEY (`periodId`) REFERENCES `registration_periods` (`id`) ON UPDATE CASCADE ON DELETE RESTRICT;
4
+ SET FOREIGN_KEY_CHECKS=1;
@@ -1,2 +1,4 @@
1
+ SET FOREIGN_KEY_CHECKS=0;
1
2
  ALTER TABLE `groups` ADD COLUMN `periodId` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL;
2
3
  ALTER TABLE `groups` ADD FOREIGN KEY (`periodId`) REFERENCES `registration_periods` (`id`) ON UPDATE CASCADE ON DELETE RESTRICT;
4
+ SET FOREIGN_KEY_CHECKS=1;
@@ -0,0 +1,4 @@
1
+ import { Migration } from '@simonbackx/simple-database';
2
+ declare const _default: Migration;
3
+ export default _default;
4
+ //# sourceMappingURL=1720080975-convert-charset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1720080975-convert-charset.d.ts","sourceRoot":"","sources":["../../src/migrations/1720080975-convert-charset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAE,MAAM,6BAA6B,CAAC;;AAGlE,wBAmBG"}
@@ -0,0 +1,26 @@
1
+ import { Database, Migration } from '@simonbackx/simple-database';
2
+ import { LoggingTools } from '@stamhoofd/utility';
3
+ export default new Migration(async () => {
4
+ process.stdout.write('\n');
5
+ if (STAMHOOFD.userMode === 'platform' && (STAMHOOFD.environment === 'production' || STAMHOOFD.environment === 'staging')) {
6
+ console.log('Skipped convert charset for userMode platform in production.');
7
+ return;
8
+ }
9
+ const tables = ['_members_users', 'balance_item_payments', 'balance_items', 'buckaroo_payments', 'cities', 'document_templates', 'documents', 'email_templates', 'email_verification_codes', 'groups', 'images', 'members', 'migrations', 'mollie_payments', 'mollie_tokens', 'organization_registration_periods', 'organizations', 'password_tokens', 'payconiq_payments', 'payments', 'platform', 'postal_codes', 'provinces', 'register_codes', 'registration_periods', 'registrations', 'stamhoofd_credits', 'stamhoofd_invoices', 'stamhoofd_packages', 'stamhoofd_pending_invoices', 'streets', 'stripe_accounts', 'stripe_checkout_sessions', 'stripe_payment_intents', 'tokens', 'used_register_codes', 'users', 'webshop_discount_codes', 'webshop_orders', 'webshop_tickets', 'webshops'];
10
+ const progressLogger = LoggingTools.createProgressLogger(tables.length, { tag: 'convert tables charset' });
11
+ for (const table of tables) {
12
+ await convertTable(table);
13
+ progressLogger.update();
14
+ }
15
+ console.log('Start set database charset.');
16
+ await Database.statement('ALTER DATABASE CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;');
17
+ });
18
+ async function convertTable(name) {
19
+ await Database.beginTransaction(async () => {
20
+ await Database.statement('set foreign_key_checks=0;');
21
+ console.log('Start converting charset of table: ' + name);
22
+ await Database.statement('ALTER TABLE `' + name + '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;');
23
+ await Database.statement('set foreign_key_checks=1;');
24
+ });
25
+ }
26
+ //# sourceMappingURL=1720080975-convert-charset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1720080975-convert-charset.js","sourceRoot":"","sources":["../../src/migrations/1720080975-convert-charset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,eAAe,IAAI,SAAS,CAAC,KAAK,IAAI,EAAE;IACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE3B,IAAI,SAAS,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,SAAS,CAAC,WAAW,KAAK,YAAY,IAAI,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,EAAE,CAAC;QACvH,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;QAC5E,OAAO;IACX,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,gBAAgB,EAAE,uBAAuB,EAAE,eAAe,EAAE,mBAAmB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,WAAW,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,mCAAmC,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,eAAe,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,SAAS,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,QAAQ,EAAE,qBAAqB,EAAE,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC;IAEpwB,MAAM,cAAc,GAAG,YAAY,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAE3G,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;QAC1B,cAAc,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,MAAM,QAAQ,CAAC,SAAS,CAAC,kEAAkE,CAAC,CAAC;AACjG,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,YAAY,CAAC,IAAY;IACpC,MAAM,QAAQ,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;QACvC,MAAM,QAAQ,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QAEtD,OAAO,CAAC,GAAG,CAAC,qCAAqC,GAAG,IAAI,CAAC,CAAC;QAC1D,MAAM,QAAQ,CAAC,SAAS,CAAC,eAAe,GAAG,IAAI,GAAG,gEAAgE,CAAC,CAAC;QAEpH,MAAM,QAAQ,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"1720080976-convert-charset-leads.d.ts","sourceRoot":"","sources":["../../src/migrations/1720080976-convert-charset-leads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAElE;;;;;GAKG;;AACH,wBAwBG"}
1
+ {"version":3,"file":"1720080976-convert-charset-leads.d.ts","sourceRoot":"","sources":["../../src/migrations/1720080976-convert-charset-leads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAElE;;;;;GAKG;;AACH,wBAgBG"}
@@ -7,21 +7,14 @@ import { Database, Migration } from '@simonbackx/simple-database';
7
7
  */
8
8
  export default new Migration(async () => {
9
9
  process.stdout.write('\n');
10
- if (STAMHOOFD.userMode === 'platform') {
11
- console.log('Skipped update leads charset for userMode platform.');
10
+ if (STAMHOOFD.userMode === 'platform' && (STAMHOOFD.environment === 'production' || STAMHOOFD.environment === 'staging')) {
11
+ console.log('Skipped update leads charset for userMode platform in production.');
12
12
  return Promise.resolve();
13
13
  }
14
14
  const hasTable = await tableExists('leads');
15
15
  console.log('Has leads table: ' + hasTable);
16
16
  if (hasTable) {
17
- const sqlStatement = [
18
- 'set foreign_key_checks=0;',
19
- 'ALTER TABLE `leads` CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;',
20
- 'ALTER TABLE `leads` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;',
21
- 'set foreign_key_checks=1;'
22
- ].join('');
23
- console.log('Start updating charset of leads table.');
24
- await Database.statement(sqlStatement);
17
+ await convertTable('leads');
25
18
  }
26
19
  return Promise.resolve();
27
20
  });
@@ -38,4 +31,12 @@ async function tableExists(tableName) {
38
31
  }
39
32
  return count > 0;
40
33
  }
34
+ async function convertTable(name) {
35
+ await Database.beginTransaction(async () => {
36
+ await Database.statement('set foreign_key_checks=0;');
37
+ console.log('Start converting charset of table: ' + name);
38
+ await Database.statement('ALTER TABLE `' + name + '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;');
39
+ await Database.statement('set foreign_key_checks=1;');
40
+ });
41
+ }
41
42
  //# sourceMappingURL=1720080976-convert-charset-leads.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"1720080976-convert-charset-leads.js","sourceRoot":"","sources":["../../src/migrations/1720080976-convert-charset-leads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAElE;;;;;GAKG;AACH,eAAe,IAAI,SAAS,CAAC,KAAK,IAAI,EAAE;IACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE3B,IAAI,SAAS,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAA;QAClE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,QAAQ,CAAC,CAAC;IAE5C,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,YAAY,GAAW;YACzB,2BAA2B;YAC3B,uEAAuE;YACvE,kFAAkF;YAClF,2BAA2B;SAC9B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEX,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,MAAM,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,WAAW,CAAC,SAAiB;IACxC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,QAAQ,CAAC,MAAM,CAChC;;;;;SAKC,EACD,CAAC,SAAS,CAAC,CACd,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAEnC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,KAAK,GAAG,CAAC,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"1720080976-convert-charset-leads.js","sourceRoot":"","sources":["../../src/migrations/1720080976-convert-charset-leads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAElE;;;;;GAKG;AACH,eAAe,IAAI,SAAS,CAAC,KAAK,IAAI,EAAE;IACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE3B,IAAI,SAAS,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,SAAS,CAAC,WAAW,KAAK,YAAY,IAAI,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,EAAE,CAAC;QACvH,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;QACjF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,QAAQ,CAAC,CAAC;IAE5C,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,WAAW,CAAC,SAAiB;IACxC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,QAAQ,CAAC,MAAM,CAChC;;;;;SAKC,EACD,CAAC,SAAS,CAAC,CACd,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAEnC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,KAAK,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAY;IACpC,MAAM,QAAQ,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;QACvC,MAAM,QAAQ,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QAEtD,OAAO,CAAC,GAAG,CAAC,qCAAqC,GAAG,IAAI,CAAC,CAAC;QAC1D,MAAM,QAAQ,CAAC,SAAS,CAAC,eAAe,GAAG,IAAI,GAAG,gEAAgE,CAAC,CAAC;QAEpH,MAAM,QAAQ,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,3 +1,5 @@
1
+ SET FOREIGN_KEY_CHECKS=0;
1
2
  ALTER TABLE `users`
2
3
  ADD COLUMN `memberId` varchar(36) NULL AFTER `id`;
3
4
  ALTER TABLE `users` ADD FOREIGN KEY (`memberId`) REFERENCES `members` (`id`) ON UPDATE CASCADE ON DELETE SET NULL;
5
+ SET FOREIGN_KEY_CHECKS=1;