@stamhoofd/backend 2.119.0 → 2.120.1

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 (348) hide show
  1. package/package.json +32 -22
  2. package/src/audit-logs/ModelLogger.ts +4 -2
  3. package/src/boot.ts +40 -14
  4. package/src/crons/balance-emails.ts +4 -2
  5. package/src/crons/clearExcelCache.test.ts +8 -8
  6. package/src/crons/update-cached-balances.ts +40 -14
  7. package/src/debug.ts +3 -2
  8. package/src/decoders/StringArrayDecoder.ts +1 -1
  9. package/src/decoders/StringNullableDecoder.ts +1 -1
  10. package/src/email-recipient-loaders/documents.ts +2 -1
  11. package/src/email-recipient-loaders/members.ts +2 -1
  12. package/src/email-recipient-loaders/orders.ts +2 -1
  13. package/src/email-recipient-loaders/payments.ts +6 -3
  14. package/src/email-recipient-loaders/receivable-balances.ts +2 -1
  15. package/src/email-recipient-loaders/registrations.ts +2 -1
  16. package/src/email-replacements/getEmailReplacementsForPayment.ts +2 -1
  17. package/src/endpoints/admin/members/ChargeMembersEndpoint.ts +3 -2
  18. package/src/endpoints/admin/memberships/ChargeMembershipsEndpoint.ts +2 -1
  19. package/src/endpoints/admin/memberships/GetChargeMembershipsSummaryEndpoint.ts +2 -1
  20. package/src/endpoints/admin/organizations/ChargeOrganizationsEndpoint.ts +3 -2
  21. package/src/endpoints/admin/organizations/GetOrganizationsCountEndpoint.ts +3 -2
  22. package/src/endpoints/admin/organizations/GetOrganizationsEndpoint.ts +6 -4
  23. package/src/endpoints/admin/organizations/PatchOrganizationsEndpoint.ts +4 -2
  24. package/src/endpoints/admin/registrations/ChargeRegistrationsEndpoint.ts +3 -2
  25. package/src/endpoints/auth/CreateAdminEndpoint.ts +5 -3
  26. package/src/endpoints/auth/CreateTokenEndpoint.ts +4 -2
  27. package/src/endpoints/auth/DeleteTokenEndpoint.ts +2 -1
  28. package/src/endpoints/auth/DeleteUserEndpoint.ts +2 -1
  29. package/src/endpoints/auth/ForgotPasswordEndpoint.ts +3 -2
  30. package/src/endpoints/auth/GetOtherUserEndpoint.ts +3 -2
  31. package/src/endpoints/auth/GetUserEndpoint.ts +3 -2
  32. package/src/endpoints/auth/OpenIDConnectAuthTokenEndpoint.ts +2 -1
  33. package/src/endpoints/auth/OpenIDConnectCallbackEndpoint.ts +4 -2
  34. package/src/endpoints/auth/OpenIDConnectStartEndpoint.ts +3 -2
  35. package/src/endpoints/auth/PatchUserEndpoint.ts +6 -3
  36. package/src/endpoints/auth/PollEmailVerificationEndpoint.ts +3 -2
  37. package/src/endpoints/auth/RetryEmailVerificationEndpoint.ts +3 -2
  38. package/src/endpoints/auth/SignupEndpoint.ts +3 -2
  39. package/src/endpoints/auth/VerifyEmailEndpoint.ts +3 -2
  40. package/src/endpoints/frontend/FrontendEnvironmentEndpoint.ts +3 -2
  41. package/src/endpoints/global/addresses/SearchRegionsEndpoint.ts +8 -5
  42. package/src/endpoints/global/addresses/ValidateAddressEndpoint.ts +5 -3
  43. package/src/endpoints/global/audit-logs/GetAuditLogsEndpoint.ts +7 -4
  44. package/src/endpoints/global/billing/ActivatePackagesEndpoint.ts +6 -4
  45. package/src/endpoints/global/billing/DeactivatePackageEndpoint.ts +2 -1
  46. package/src/endpoints/global/caddy/CheckDomainCertEndpoint.ts +4 -2
  47. package/src/endpoints/global/email/CreateEmailEndpoint.ts +5 -3
  48. package/src/endpoints/global/email/GetAdminEmailsEndpoint.test.ts +2 -1
  49. package/src/endpoints/global/email/GetAdminEmailsEndpoint.ts +22 -19
  50. package/src/endpoints/global/email/GetEmailAddressEndpoint.ts +4 -2
  51. package/src/endpoints/global/email/GetEmailEndpoint.ts +3 -2
  52. package/src/endpoints/global/email/GetUserEmailsEndpoint.test.ts +2 -1
  53. package/src/endpoints/global/email/GetUserEmailsEndpoint.ts +7 -4
  54. package/src/endpoints/global/email/ManageEmailAddressEndpoint.ts +4 -2
  55. package/src/endpoints/global/email/PatchEmailEndpoint.test.ts +11 -11
  56. package/src/endpoints/global/email/PatchEmailEndpoint.ts +6 -3
  57. package/src/endpoints/global/email-recipients/GetEmailRecipientsCountEndpoint.ts +3 -2
  58. package/src/endpoints/global/email-recipients/GetEmailRecipientsEndpoint.test.ts +2 -1
  59. package/src/endpoints/global/email-recipients/GetEmailRecipientsEndpoint.ts +7 -4
  60. package/src/endpoints/global/email-recipients/RetryEmailRecipientEndpoint.ts +4 -2
  61. package/src/endpoints/global/email-recipients/helpers/validateEmailRecipientFilter.ts +2 -1
  62. package/src/endpoints/global/events/GetEventNotificationsCountEndpoint.ts +3 -2
  63. package/src/endpoints/global/events/GetEventNotificationsEndpoint.ts +8 -5
  64. package/src/endpoints/global/events/GetEventsEndpoint.ts +7 -4
  65. package/src/endpoints/global/events/PatchEventNotificationsEndpoint.test.ts +4 -2
  66. package/src/endpoints/global/events/PatchEventNotificationsEndpoint.ts +4 -2
  67. package/src/endpoints/global/events/PatchEventsEndpoint.test.ts +4 -2
  68. package/src/endpoints/global/events/PatchEventsEndpoint.ts +4 -2
  69. package/src/endpoints/global/files/ExportToExcelEndpoint.ts +7 -4
  70. package/src/endpoints/global/files/GetFileCache.ts +5 -3
  71. package/src/endpoints/global/files/UploadFile.ts +9 -3
  72. package/src/endpoints/global/files/UploadImage.ts +4 -2
  73. package/src/endpoints/global/groups/GetGroupsEndpoint.test.ts +4 -2
  74. package/src/endpoints/global/groups/GetGroupsEndpoint.ts +7 -4
  75. package/src/endpoints/global/members/GetMemberFamilyEndpoint.ts +5 -3
  76. package/src/endpoints/global/members/GetMembersCountEndpoint.ts +3 -2
  77. package/src/endpoints/global/members/GetMembersEndpoint.test.ts +4 -2
  78. package/src/endpoints/global/members/GetMembersEndpoint.ts +8 -6
  79. package/src/endpoints/global/members/PatchOrganizationMembersEndpoint.test.ts +257 -6
  80. package/src/endpoints/global/members/PatchOrganizationMembersEndpoint.ts +114 -59
  81. package/src/endpoints/global/members/helpers/validateGroupFilter.ts +2 -1
  82. package/src/endpoints/global/members/shouldCheckIfMemberIsDuplicate.ts +3 -2
  83. package/src/endpoints/global/organizations/CheckRegisterCodeEndpoint.ts +2 -1
  84. package/src/endpoints/global/organizations/CreateOrganizationEndpoint.test.ts +3 -2
  85. package/src/endpoints/global/organizations/CreateOrganizationEndpoint.ts +3 -2
  86. package/src/endpoints/global/organizations/GetOrganizationFromDomainEndpoint.ts +5 -3
  87. package/src/endpoints/global/organizations/GetOrganizationFromUriEndpoint.ts +5 -3
  88. package/src/endpoints/global/organizations/SearchOrganizationEndpoint.ts +8 -5
  89. package/src/endpoints/global/payments/StripeWebhookEndpoint.ts +4 -2
  90. package/src/endpoints/global/platform/GetPlatformAdminsEndpoint.ts +2 -1
  91. package/src/endpoints/global/platform/GetPlatformEndpoint.ts +3 -2
  92. package/src/endpoints/global/platform/PatchPlatformEnpoint.test.ts +3 -2
  93. package/src/endpoints/global/platform/PatchPlatformEnpoint.ts +6 -3
  94. package/src/endpoints/global/platform-memberships/GetPlatformMembershipsCountEndpoint.ts +47 -0
  95. package/src/endpoints/global/platform-memberships/GetPlatformMembershipsEndpoint.ts +211 -0
  96. package/src/endpoints/global/registration/GetRegistrationsCountEndpoint.ts +3 -2
  97. package/src/endpoints/global/registration/GetRegistrationsEndpoint.test.ts +2 -1
  98. package/src/endpoints/global/registration/GetRegistrationsEndpoint.ts +8 -5
  99. package/src/endpoints/global/registration/GetUserDetailedPayableBalanceEndpoint.ts +4 -2
  100. package/src/endpoints/global/registration/GetUserDocumentsEndpoint.ts +4 -2
  101. package/src/endpoints/global/registration/GetUserMembersEndpoint.ts +3 -2
  102. package/src/endpoints/global/registration/GetUserPayableBalanceEndpoint.ts +2 -1
  103. package/src/endpoints/global/registration/PatchUserMembersEndpoint.test.ts +5 -3
  104. package/src/endpoints/global/registration/PatchUserMembersEndpoint.ts +9 -5
  105. package/src/endpoints/global/registration/RegisterMembersEndpoint.test.ts +50 -49
  106. package/src/endpoints/global/registration/RegisterMembersEndpoint.ts +7 -4
  107. package/src/endpoints/global/registration-periods/GetRegistrationPeriodsEndpoint.ts +7 -4
  108. package/src/endpoints/global/registration-periods/PatchRegistrationPeriodsEndpoint.ts +4 -2
  109. package/src/endpoints/global/sso/GetSSOEndpoint.ts +4 -2
  110. package/src/endpoints/global/sso/SetSSOEndpoint.ts +3 -2
  111. package/src/endpoints/global/webshops/GetWebshopFromDomainEndpoint.ts +4 -2
  112. package/src/endpoints/global/webshops/GetWebshopsCountEndpoint.ts +43 -0
  113. package/src/endpoints/global/webshops/GetWebshopsEndpoint.test.ts +808 -0
  114. package/src/endpoints/global/webshops/GetWebshopsEndpoint.ts +221 -0
  115. package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemEndpoint.ts +3 -2
  116. package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemsCountEndpoint.ts +3 -2
  117. package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemsEndpoint.ts +5 -3
  118. package/src/endpoints/organization/dashboard/balance-items/PatchBalanceItemsEndpoint.ts +4 -2
  119. package/src/endpoints/organization/dashboard/billing/GetOrganizationDetailedPayableBalanceEndpoint.ts +4 -2
  120. package/src/endpoints/organization/dashboard/billing/GetOrganizationPayableBalanceEndpoint.ts +4 -2
  121. package/src/endpoints/organization/dashboard/billing/GetPackagesEndpoint.ts +2 -1
  122. package/src/endpoints/organization/dashboard/documents/GetDocumentTemplateXML.ts +2 -1
  123. package/src/endpoints/organization/dashboard/documents/GetDocumentTemplatesCountEndpoint.ts +3 -2
  124. package/src/endpoints/organization/dashboard/documents/GetDocumentTemplatesEndpoint.ts +7 -4
  125. package/src/endpoints/organization/dashboard/documents/GetDocumentsCountEndpoint.ts +3 -2
  126. package/src/endpoints/organization/dashboard/documents/GetDocumentsEndpoint.ts +7 -4
  127. package/src/endpoints/organization/dashboard/documents/PatchDocumentEndpoint.ts +4 -2
  128. package/src/endpoints/organization/dashboard/documents/PatchDocumentTemplatesEndpoint.test.ts +4 -2
  129. package/src/endpoints/organization/dashboard/documents/PatchDocumentTemplatesEndpoint.ts +4 -2
  130. package/src/endpoints/organization/dashboard/email/CheckEmailBouncesEndpoint.ts +2 -1
  131. package/src/endpoints/organization/dashboard/email-templates/GetEmailTemplatesEndpoint.test.ts +36 -1
  132. package/src/endpoints/organization/dashboard/email-templates/GetEmailTemplatesEndpoint.ts +13 -4
  133. package/src/endpoints/organization/dashboard/email-templates/PatchEmailTemplatesEndpoint.test.ts +4 -2
  134. package/src/endpoints/organization/dashboard/email-templates/PatchEmailTemplatesEndpoint.ts +4 -2
  135. package/src/endpoints/organization/dashboard/invoices/GetInvoicesCountEndpoint.ts +3 -2
  136. package/src/endpoints/organization/dashboard/invoices/GetInvoicesEndpoint.ts +5 -3
  137. package/src/endpoints/organization/dashboard/invoices/PatchInvoicesEndpoint.ts +5 -3
  138. package/src/endpoints/organization/dashboard/mollie/CheckMollieEndpoint.ts +4 -2
  139. package/src/endpoints/organization/dashboard/mollie/ConnectMollieEndpoint.ts +6 -3
  140. package/src/endpoints/organization/dashboard/mollie/DisconnectMollieEndpoint.ts +4 -2
  141. package/src/endpoints/organization/dashboard/mollie/GetMollieDashboardEndpoint.ts +2 -1
  142. package/src/endpoints/organization/dashboard/nolt/CreateNoltTokenEndpoint.ts +2 -1
  143. package/src/endpoints/organization/dashboard/organization/GetOrganizationArchivedGroups.ts +4 -2
  144. package/src/endpoints/organization/dashboard/organization/GetOrganizationDeletedGroups.ts +3 -2
  145. package/src/endpoints/organization/dashboard/organization/GetUitpasClientIdEndpoint.ts +2 -1
  146. package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.test.ts +5 -3
  147. package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.ts +6 -3
  148. package/src/endpoints/organization/dashboard/organization/SearchUitpasOrganizersEndpoint.ts +5 -3
  149. package/src/endpoints/organization/dashboard/organization/SetOrganizationDomainEndpoint.ts +11 -9
  150. package/src/endpoints/organization/dashboard/organization/SetUitpasClientCredentialsEndpoint.ts +3 -2
  151. package/src/endpoints/organization/dashboard/payments/GetMemberBalanceEndpoint.ts +2 -1
  152. package/src/endpoints/organization/dashboard/payments/GetPaymentsCountEndpoint.ts +3 -2
  153. package/src/endpoints/organization/dashboard/payments/GetPaymentsEndpoint.ts +6 -4
  154. package/src/endpoints/organization/dashboard/payments/PatchPaymentsEndpoint.ts +5 -3
  155. package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalanceEndpoint.ts +2 -1
  156. package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalancesCountEndpoint.ts +3 -2
  157. package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalancesEndpoint.ts +5 -3
  158. package/src/endpoints/organization/dashboard/registration-periods/GetOrganizationRegistrationPeriodsEndpoint.test.ts +2 -1
  159. package/src/endpoints/organization/dashboard/registration-periods/GetOrganizationRegistrationPeriodsEndpoint.ts +7 -4
  160. package/src/endpoints/organization/dashboard/registration-periods/MoveRegistrationPeriods.test.ts +4 -2
  161. package/src/endpoints/organization/dashboard/registration-periods/PatchOrganizationRegistrationPeriodsEndpoint.test.ts +4 -2
  162. package/src/endpoints/organization/dashboard/registration-periods/PatchOrganizationRegistrationPeriodsEndpoint.ts +6 -3
  163. package/src/endpoints/organization/dashboard/registration-periods/SetupStepReviewEndpoint.ts +6 -3
  164. package/src/endpoints/organization/dashboard/stripe/ConnectStripeEndpoint.ts +3 -2
  165. package/src/endpoints/organization/dashboard/stripe/DeleteStripeAccountEndpoint.ts +2 -1
  166. package/src/endpoints/organization/dashboard/stripe/GetStripeAccountLinkEndpoint.ts +4 -2
  167. package/src/endpoints/organization/dashboard/stripe/GetStripeAccountsEndpoint.ts +2 -1
  168. package/src/endpoints/organization/dashboard/stripe/GetStripeLoginLinkEndpoint.ts +4 -2
  169. package/src/endpoints/organization/dashboard/stripe/UpdateStripeAccountEndpoint.ts +2 -1
  170. package/src/endpoints/organization/dashboard/users/CreateApiUserEndpoint.ts +3 -2
  171. package/src/endpoints/organization/dashboard/users/DeleteUserEndpoint.ts +2 -1
  172. package/src/endpoints/organization/dashboard/users/GetApiUsersEndpoint.ts +3 -2
  173. package/src/endpoints/organization/dashboard/users/GetOrganizationAdminsEndpoint.ts +2 -1
  174. package/src/endpoints/organization/dashboard/users/PatchApiUserEndpoint.ts +4 -2
  175. package/src/endpoints/organization/dashboard/webshops/CreateWebshopEndpoint.ts +3 -2
  176. package/src/endpoints/organization/dashboard/webshops/DeleteWebshopEndpoint.ts +2 -1
  177. package/src/endpoints/organization/dashboard/webshops/GetDiscountCodesEndpoint.ts +4 -2
  178. package/src/endpoints/organization/dashboard/webshops/GetWebshopOrdersCountEndpoint.ts +3 -2
  179. package/src/endpoints/organization/dashboard/webshops/GetWebshopOrdersEndpoint.ts +7 -4
  180. package/src/endpoints/organization/dashboard/webshops/{GetWebshopTicketsCountEndpoint → GetWebshopTicketsCountEndpoint.ts} +7 -7
  181. package/src/endpoints/organization/dashboard/webshops/GetWebshopTicketsEndpoint.ts +9 -6
  182. package/src/endpoints/organization/dashboard/webshops/GetWebshopUriAvailabilityEndpoint.ts +4 -2
  183. package/src/endpoints/organization/dashboard/webshops/PatchDiscountCodesEndpoint.ts +4 -2
  184. package/src/endpoints/organization/dashboard/webshops/PatchWebshopEndpoint.ts +4 -3
  185. package/src/endpoints/organization/dashboard/webshops/PatchWebshopOrdersEndpoint.ts +4 -2
  186. package/src/endpoints/organization/dashboard/webshops/PatchWebshopTicketsEndpoint.ts +4 -2
  187. package/src/endpoints/organization/dashboard/webshops/SearchUitpasEventsEndpoint.ts +5 -3
  188. package/src/endpoints/organization/dashboard/webshops/VerifyWebshopDomainEndpoint.ts +2 -1
  189. package/src/endpoints/organization/shared/ExchangePaymentEndpoint.ts +5 -3
  190. package/src/endpoints/organization/shared/GetDocumentHtml.ts +2 -1
  191. package/src/endpoints/organization/shared/GetPaymentEndpoint.ts +3 -2
  192. package/src/endpoints/organization/shared/GetUitpasNumberDetailsEndpoint.ts +3 -2
  193. package/src/endpoints/organization/shared/auth/GetOrganizationEndpoint.ts +3 -2
  194. package/src/endpoints/organization/webshops/CheckWebshopDiscountCodesEndpoint.ts +3 -2
  195. package/src/endpoints/organization/webshops/GetOrderByPaymentEndpoint.ts +3 -2
  196. package/src/endpoints/organization/webshops/GetOrderEndpoint.ts +3 -2
  197. package/src/endpoints/organization/webshops/GetTicketsEndpoint.ts +4 -2
  198. package/src/endpoints/organization/webshops/GetWebshopEndpoint.ts +3 -2
  199. package/src/endpoints/organization/webshops/PlaceOrderEndpoint.test.ts +7 -3
  200. package/src/endpoints/organization/webshops/PlaceOrderEndpoint.ts +3 -2
  201. package/src/endpoints/organization/webshops/RetrieveUitpasSocialTariffPriceEndpoint.ts +3 -2
  202. package/src/endpoints/system/HealthEndpoint.test.ts +44 -0
  203. package/src/endpoints/system/HealthEndpoint.ts +14 -6
  204. package/src/excel-loaders/balance-items.ts +4 -2
  205. package/src/excel-loaders/event-notifications.ts +7 -5
  206. package/src/excel-loaders/index.ts +1 -0
  207. package/src/excel-loaders/members.ts +6 -4
  208. package/src/excel-loaders/organizations.ts +8 -7
  209. package/src/excel-loaders/payments.ts +5 -3
  210. package/src/excel-loaders/platform-memberships.ts +262 -0
  211. package/src/excel-loaders/receivable-balances.ts +7 -5
  212. package/src/excel-loaders/registrations.ts +9 -7
  213. package/src/helpers/AddressValidator.test.ts +2 -1
  214. package/src/helpers/AddressValidator.ts +7 -4
  215. package/src/helpers/AdminPermissionChecker.ts +190 -92
  216. package/src/helpers/AuthenticatedStructures.ts +4 -2
  217. package/src/helpers/BuckarooHelper.ts +2 -1
  218. package/src/helpers/Context.ts +4 -2
  219. package/src/helpers/CookieHelper.ts +2 -2
  220. package/src/helpers/FileCache.ts +2 -2
  221. package/src/helpers/ForwardHandler.ts +2 -1
  222. package/src/helpers/GlobalHelper.ts +2 -0
  223. package/src/helpers/GroupBuilder.ts +2 -1
  224. package/src/helpers/GroupedThrottledQueue.test.ts +19 -19
  225. package/src/helpers/LimitedFilteredRequestHelper.ts +1 -1
  226. package/src/helpers/MemberCharger.ts +2 -1
  227. package/src/helpers/MemberUserSyncer.ts +6 -3
  228. package/src/helpers/OrganizationCharger.ts +2 -1
  229. package/src/helpers/PeriodHelper.ts +2 -1
  230. package/src/helpers/SQLTranslatedString.ts +3 -2
  231. package/src/helpers/ServiceFeeHelper.ts +1 -1
  232. package/src/helpers/SetupStepUpdater.ts +5 -4
  233. package/src/helpers/StripeHelper.ts +3 -2
  234. package/src/helpers/TagHelper.test.ts +5 -5
  235. package/src/helpers/TagHelper.ts +2 -1
  236. package/src/helpers/TemporaryMemberAccess.ts +2 -1
  237. package/src/helpers/ThrottledQueue.test.ts +20 -20
  238. package/src/helpers/ViesHelper.ts +4 -3
  239. package/src/helpers/XlsxTransformerColumnHelper.ts +4 -2
  240. package/src/helpers/email-html-helpers.ts +5 -4
  241. package/src/helpers/fetchToAsyncIterator.ts +1 -1
  242. package/src/helpers/outstandingBalanceJoin.ts +2 -1
  243. package/src/helpers/updateMemberDetailsUitpasNumber.ts +4 -3
  244. package/src/middleware/ContextMiddleware.ts +1 -1
  245. package/src/migrate.ts +21 -4
  246. package/src/seeds/0000000003-default-email-templates.ts +1 -1
  247. package/src/seeds/0000000004-single-organization.ts +2 -1
  248. package/src/seeds/1752848561-groups-registration-periods.ts +2 -1
  249. package/src/seeds/1754560914-groups-prices.test.ts +2 -1
  250. package/src/seeds/1754560914-groups-prices.ts +2 -1
  251. package/src/seeds/1755876819-remove-duplicate-members.ts +2 -1
  252. package/src/seeds/1765896674-document-update-year.test.ts +2 -1
  253. package/src/seeds/1773754928-force-save-members.ts +15 -0
  254. package/src/services/AuditLogService.ts +3 -2
  255. package/src/services/BalanceItemPaymentService.ts +2 -2
  256. package/src/services/BalanceItemService.ts +2 -1
  257. package/src/services/BootChecksService.test.ts +33 -0
  258. package/src/services/BootChecksService.ts +21 -0
  259. package/src/services/DatabaseCollationService.test.ts +18 -0
  260. package/src/services/DatabaseCollationService.ts +81 -0
  261. package/src/services/DocumentService.ts +1 -1
  262. package/src/services/EventNotificationService.ts +2 -1
  263. package/src/services/FileSignService.ts +1 -1
  264. package/src/services/MemberNumberService.ts +3 -1
  265. package/src/services/MemberRecordStore.ts +28 -19
  266. package/src/services/PaymentReallocationService.test.ts +2 -1
  267. package/src/services/PaymentReallocationService.ts +2 -1
  268. package/src/services/PaymentService.ts +5 -3
  269. package/src/services/RegistrationService.ts +65 -3
  270. package/src/services/SSOService.ts +8 -4
  271. package/src/services/STPackageService.ts +5 -3
  272. package/src/services/StartupHealthService.ts +15 -0
  273. package/src/services/uitpas/UitpasService.ts +6 -3
  274. package/src/sql-filters/audit-logs.ts +2 -1
  275. package/src/sql-filters/balance-item-payments.ts +2 -1
  276. package/src/sql-filters/balance-items.ts +2 -1
  277. package/src/sql-filters/base-registration-filter-compilers.ts +4 -2
  278. package/src/sql-filters/document-templates.ts +2 -1
  279. package/src/sql-filters/documents.ts +2 -1
  280. package/src/sql-filters/email-recipients.ts +2 -1
  281. package/src/sql-filters/emails.ts +2 -1
  282. package/src/sql-filters/event-notifications.ts +2 -1
  283. package/src/sql-filters/events.ts +2 -1
  284. package/src/sql-filters/groups.ts +2 -1
  285. package/src/sql-filters/invoiced-balance-items.ts +2 -1
  286. package/src/sql-filters/invoices.ts +2 -1
  287. package/src/sql-filters/member-responsibility-records.ts +2 -1
  288. package/src/sql-filters/members.ts +2 -1
  289. package/src/sql-filters/orders.ts +2 -1
  290. package/src/sql-filters/organization-registration-periods.ts +2 -1
  291. package/src/sql-filters/organizations.ts +2 -1
  292. package/src/sql-filters/payments.ts +2 -1
  293. package/src/sql-filters/platform-memberships.ts +72 -0
  294. package/src/sql-filters/receivable-balances.ts +2 -1
  295. package/src/sql-filters/registration-periods.ts +2 -1
  296. package/src/sql-filters/registrations.ts +2 -1
  297. package/src/sql-filters/tickets.ts +2 -1
  298. package/src/sql-filters/users.ts +2 -1
  299. package/src/sql-filters/webshops.ts +38 -0
  300. package/src/sql-sorters/audit-logs.ts +3 -2
  301. package/src/sql-sorters/balance-items.ts +3 -2
  302. package/src/sql-sorters/document-templates.ts +3 -2
  303. package/src/sql-sorters/documents.ts +3 -2
  304. package/src/sql-sorters/email-recipients.ts +3 -2
  305. package/src/sql-sorters/emails.ts +3 -2
  306. package/src/sql-sorters/event-notifications.ts +3 -2
  307. package/src/sql-sorters/events.ts +3 -2
  308. package/src/sql-sorters/groups.ts +3 -2
  309. package/src/sql-sorters/invoices.ts +3 -2
  310. package/src/sql-sorters/members.ts +3 -2
  311. package/src/sql-sorters/orders.ts +3 -2
  312. package/src/sql-sorters/organization-registration-periods.ts +3 -2
  313. package/src/sql-sorters/organizations.ts +3 -2
  314. package/src/sql-sorters/payments.ts +3 -2
  315. package/src/sql-sorters/platform-memberships.ts +40 -0
  316. package/src/sql-sorters/receivable-balances.ts +3 -2
  317. package/src/sql-sorters/registration-periods.ts +3 -2
  318. package/src/sql-sorters/registrations.ts +3 -2
  319. package/src/sql-sorters/tickets.ts +3 -2
  320. package/src/sql-sorters/webshops.ts +40 -0
  321. package/tests/actions/patchOrganizationMember.ts +5 -4
  322. package/tests/actions/patchPaymentStatus.ts +2 -2
  323. package/tests/actions/patchUserMember.ts +6 -4
  324. package/tests/e2e/api-rate-limits.test.ts +4 -5
  325. package/tests/e2e/bundle-discounts.test.ts +3 -2
  326. package/tests/e2e/charge-members.test.ts +7 -5
  327. package/tests/e2e/documents.test.ts +3 -2
  328. package/tests/e2e/private-files.test.ts +11 -13
  329. package/tests/e2e/register.test.ts +6 -5
  330. package/tests/e2e/stock.test.ts +6 -8
  331. package/tests/e2e/tickets.test.ts +4 -2
  332. package/tests/helpers/StripeMocker.ts +3 -3
  333. package/tests/init/initAdmin.ts +4 -2
  334. package/tests/init/initBundleDiscount.ts +3 -2
  335. package/tests/init/initPayconiq.ts +1 -1
  336. package/tests/init/initPermissionRole.ts +4 -2
  337. package/tests/init/initPlatformRecordCategory.ts +1 -1
  338. package/tests/init/initStripe.ts +1 -1
  339. package/tests/vitest.global.setup.ts +26 -0
  340. package/tests/{jest.setup.ts → vitest.setup.ts} +4 -3
  341. package/tsconfig.build.json +17 -0
  342. package/tsconfig.json +10 -41
  343. package/tsconfig.test.json +17 -0
  344. package/vitest.config.js +13 -0
  345. package/eslint.config.mjs +0 -5
  346. package/jest.config.cjs +0 -27
  347. package/tests/jest.global.setup.ts +0 -33
  348. package/tests/toMatchMap.ts +0 -68
@@ -1,7 +1,8 @@
1
1
  import { PatchMap } from '@simonbackx/simple-encoding';
2
2
  import { Request } from '@simonbackx/simple-endpoints';
3
3
  import { EmailMocker } from '@stamhoofd/email';
4
- import { BalanceItemFactory, Group, GroupFactory, Member, MemberFactory, MemberWithUsersRegistrationsAndGroups, Organization, OrganizationFactory, OrganizationRegistrationPeriodFactory, Registration, RegistrationFactory, RegistrationPeriod, RegistrationPeriodFactory, Token, UserFactory } from '@stamhoofd/models';
4
+ import type { MemberWithUsersRegistrationsAndGroups, Organization, RegistrationPeriod} from '@stamhoofd/models';
5
+ import { BalanceItemFactory, Group, GroupFactory, Member, MemberFactory, OrganizationFactory, OrganizationRegistrationPeriodFactory, Registration, RegistrationFactory, RegistrationPeriodFactory, Token, UserFactory } from '@stamhoofd/models';
5
6
  import { AccessRight, BalanceItemCartItem, BalanceItemStatus, BalanceItemType, BooleanStatus, Company, GroupOption, GroupOptionMenu, IDRegisterCart, IDRegisterCheckout, IDRegisterItem, OrganizationPackages, PaymentCustomer, PaymentMethod, PermissionLevel, Permissions, PermissionsResourceType, ReduceablePrice, RegisterItemOption, ResourcePermissions, STPackageStatus, STPackageType, UitpasNumberDetails, UitpasSocialTariff, UitpasSocialTariffStatus, UserPermissions, Version } from '@stamhoofd/structures';
6
7
  import { STExpect, TestUtils } from '@stamhoofd/test-utils';
7
8
  import { v4 as uuidv4 } from 'uuid';
@@ -46,8 +47,8 @@ describe('Endpoint.RegisterMembers', () => {
46
47
  });
47
48
 
48
49
  afterEach(() => {
49
- jest.restoreAllMocks();
50
- jest.useRealTimers();
50
+ vitest.restoreAllMocks();
51
+ vitest.useRealTimers();
51
52
  });
52
53
 
53
54
  const initOrganization = async (registrationPeriod: RegistrationPeriod = period) => {
@@ -274,9 +275,9 @@ describe('Endpoint.RegisterMembers', () => {
274
275
 
275
276
  await balanceItem1.delete();
276
277
 
277
- await expect(async () => await post(body, organization, token))
278
+ await expect(post(body, organization, token))
278
279
  .rejects
279
- .toThrow(new RegExp('Oeps, één of meerdere openstaande bedragen in jouw winkelmandje zijn aangepast'));
280
+ .toThrow('Oeps, één of meerdere openstaande bedragen in jouw winkelmandje zijn aangepast');
280
281
  });
281
282
 
282
283
  test('Should fail if balance item price difference', async () => {
@@ -348,9 +349,9 @@ describe('Endpoint.RegisterMembers', () => {
348
349
  // #endregion
349
350
 
350
351
  // #region act and assert
351
- await expect(async () => await post(body, organization, token))
352
+ await expect(post(body, organization, token))
352
353
  .rejects
353
- .toThrow(new RegExp('Member not found'));
354
+ .toThrow('Member not found');
354
355
  // #endregion
355
356
  });
356
357
 
@@ -387,9 +388,9 @@ describe('Endpoint.RegisterMembers', () => {
387
388
  // #region act and assert
388
389
  await balanceItem1.delete();
389
390
 
390
- await expect(async () => await post(body, organization, token))
391
+ await expect(post(body, organization, token))
391
392
  .rejects
392
- .toThrow(new RegExp('Oeps, jouw mandje is leeg.'));
393
+ .toThrow('Oeps, jouw mandje is leeg.');
393
394
  // #endregion
394
395
  });
395
396
 
@@ -418,7 +419,7 @@ describe('Endpoint.RegisterMembers', () => {
418
419
  customer: null,
419
420
  });
420
421
 
421
- await expect(async () => await post(body, organization, token))
422
+ await expect(post(body, organization, token))
422
423
  .rejects
423
424
  .toThrow(STExpect.simpleError({ code: 'changed_price' }));
424
425
  });
@@ -454,7 +455,7 @@ describe('Endpoint.RegisterMembers', () => {
454
455
  await post(body, organization, token);
455
456
 
456
457
  // second time should fail
457
- await expect(async () => await post(body, organization, token))
458
+ await expect(post(body, organization, token))
458
459
  .rejects
459
460
  .toThrow(STExpect.simpleError({ code: 'already_registered' }));
460
461
  });
@@ -492,7 +493,7 @@ describe('Endpoint.RegisterMembers', () => {
492
493
  customer: null,
493
494
  });
494
495
 
495
- await expect(async () => await post(body, organization, token))
496
+ await expect(post(body, organization, token))
496
497
  .rejects
497
498
  .toThrow(STExpect.simpleErrors([
498
499
  { code: 'duplicate_register_item' },
@@ -530,9 +531,9 @@ describe('Endpoint.RegisterMembers', () => {
530
531
  // #endregion
531
532
 
532
533
  // #region act and assert
533
- await expect(async () => await post(body, organization, token))
534
+ await expect(post(body, organization, token))
534
535
  .rejects
535
- .toThrow(new RegExp('Oeps, je hebt geen geldige betaalmethode geselecteerd'));
536
+ .toThrow('Oeps, je hebt geen geldige betaalmethode geselecteerd');
536
537
  // #endregion
537
538
  });
538
539
 
@@ -569,9 +570,9 @@ describe('Endpoint.RegisterMembers', () => {
569
570
  // #endregion
570
571
 
571
572
  // #region act and assert
572
- await expect(async () => await post(body, organization, token))
573
+ await expect(post(body, organization, token))
573
574
  .rejects
574
- .toThrow(new RegExp('redirectUrl or cancelUrl is missing'));
575
+ .toThrow('redirectUrl or cancelUrl is missing');
575
576
  // #endregion
576
577
  });
577
578
 
@@ -602,9 +603,9 @@ describe('Endpoint.RegisterMembers', () => {
602
603
  customer: null,
603
604
  });
604
605
 
605
- await expect(async () => await post(body, organization, token))
606
+ await expect(post(body, organization, token))
606
607
  .rejects
607
- .toThrow(new RegExp('redirectUrl or cancelUrl is missing'));
608
+ .toThrow('redirectUrl or cancelUrl is missing');
608
609
  });
609
610
 
610
611
  test('Should not reserve for point of sale payment method if group has max members', async () => {
@@ -880,7 +881,7 @@ describe('Endpoint.RegisterMembers', () => {
880
881
  test('Register for group with trial should set trial period', async () => {
881
882
  // #region arrange
882
883
  const date = new Date('2023-05-14');
883
- jest.useFakeTimers({ advanceTimers: true, doNotFake: ['setTimeout', 'clearTimeout', 'hrtime', 'nextTick', 'performance', 'queueMicrotask', 'setImmediate', 'clearImmediate'] }).setSystemTime(date);
884
+ vitest.useFakeTimers({ shouldAdvanceTime: true, toFake: ['Date'] }).setSystemTime(date);
884
885
 
885
886
  try {
886
887
  const { member, group, groupPrice, organization, token } = await initData();
@@ -926,7 +927,7 @@ describe('Endpoint.RegisterMembers', () => {
926
927
  expect(trialUntil!.getDate()).toBe(19);
927
928
  }
928
929
  finally {
929
- jest.useRealTimers();
930
+ vitest.useRealTimers();
930
931
  }
931
932
  }, 20_00000);
932
933
 
@@ -1013,9 +1014,9 @@ describe('Endpoint.RegisterMembers', () => {
1013
1014
  // #region act and assert
1014
1015
  expect(group?.stockReservations.length).toBe(0);
1015
1016
 
1016
- await expect(async () => await post(body, organization, token))
1017
+ await expect(post(body, organization, token))
1017
1018
  .rejects
1018
- .toThrow(new RegExp('Maximum reached'));
1019
+ .toThrow('Maximum reached');
1019
1020
  // #endregion
1020
1021
  });
1021
1022
 
@@ -1090,9 +1091,9 @@ describe('Endpoint.RegisterMembers', () => {
1090
1091
  // #endregion
1091
1092
 
1092
1093
  // #region act and assert
1093
- await expect(async () => await post(body, organization, token))
1094
+ await expect(post(body, organization, token))
1094
1095
  .rejects
1095
- .toThrow(new RegExp('Stock empty'));
1096
+ .toThrow('Stock empty');
1096
1097
  // #endregion
1097
1098
  });
1098
1099
 
@@ -1168,9 +1169,9 @@ describe('Endpoint.RegisterMembers', () => {
1168
1169
  customer: null,
1169
1170
  });
1170
1171
 
1171
- await expect(async () => await post(body, organization, token))
1172
+ await expect(post(body, organization, token))
1172
1173
  .rejects
1173
- .toThrow(new RegExp('Option maximum exceeded'));
1174
+ .toThrow('Option maximum exceeded');
1174
1175
  });
1175
1176
 
1176
1177
  test('Should not fail if max option not exceeded', async () => {
@@ -1295,7 +1296,7 @@ describe('Endpoint.RegisterMembers', () => {
1295
1296
  // act
1296
1297
 
1297
1298
  // should throw error
1298
- await expect(async () => await post(body, organization, token))
1299
+ await expect(post(body, organization, token))
1299
1300
  .rejects
1300
1301
  .toThrow(STExpect.errorWithCode('changed_price'));
1301
1302
 
@@ -2005,7 +2006,7 @@ describe('Endpoint.RegisterMembers', () => {
2005
2006
  });
2006
2007
 
2007
2008
  // send request and check occupancy
2008
- await expect(async () => await post(body, organization, token)).rejects.toThrow('No permission to register in this group');
2009
+ await expect(post(body, organization, token)).rejects.toThrow('No permission to register in this group');
2009
2010
  });
2010
2011
 
2011
2012
  test('Cannot register a member with only read permissions even when having full permissions to the specific member', async () => {
@@ -2041,7 +2042,7 @@ describe('Endpoint.RegisterMembers', () => {
2041
2042
  });
2042
2043
 
2043
2044
  // send request and check occupancy
2044
- await expect(async () => await post(body, organization, token)).rejects.toThrow('No permission to register in this group');
2045
+ await expect(post(body, organization, token)).rejects.toThrow('No permission to register in this group');
2045
2046
  });
2046
2047
  });
2047
2048
 
@@ -2165,7 +2166,7 @@ describe('Endpoint.RegisterMembers', () => {
2165
2166
  asOrganizationId: organization2.id,
2166
2167
  });
2167
2168
 
2168
- await expect(async () => await post(body, organization, token))
2169
+ await expect(post(body, organization, token))
2169
2170
  .rejects
2170
2171
  .toThrow(STExpect.simpleError({ code: 'forbidden' }));
2171
2172
  });
@@ -2201,7 +2202,7 @@ describe('Endpoint.RegisterMembers', () => {
2201
2202
  asOrganizationId: organization2.id,
2202
2203
  });
2203
2204
 
2204
- await expect(async () => await post(body, organization, token))
2205
+ await expect(post(body, organization, token))
2205
2206
  .rejects
2206
2207
  .toThrow(STExpect.simpleError({ code: 'as_organization_disabled' }));
2207
2208
  });
@@ -2234,9 +2235,9 @@ describe('Endpoint.RegisterMembers', () => {
2234
2235
  asOrganizationId: organization2.id,
2235
2236
  });
2236
2237
 
2237
- await expect(async () => await post(body, organization, token))
2238
+ await expect(post(body, organization, token))
2238
2239
  .rejects
2239
- .toThrow(new RegExp('customer is required when paying as an organization'));
2240
+ .toThrow('customer is required when paying as an organization');
2240
2241
  });
2241
2242
 
2242
2243
  test('Deleting registrations is not allowed', async () => {
@@ -2272,7 +2273,7 @@ describe('Endpoint.RegisterMembers', () => {
2272
2273
  customer: null,
2273
2274
  });
2274
2275
 
2275
- await expect(async () => await post(body, organization, token))
2276
+ await expect(post(body, organization, token))
2276
2277
  .rejects
2277
2278
  .toThrow(STExpect.simpleError({ code: 'forbidden' }));
2278
2279
  });
@@ -2307,9 +2308,9 @@ describe('Endpoint.RegisterMembers', () => {
2307
2308
  asOrganizationId: organization2.id,
2308
2309
  });
2309
2310
 
2310
- await expect(async () => await post(body, organization, token))
2311
+ await expect(post(body, organization, token))
2311
2312
  .rejects
2312
- .toThrow(new RegExp('customer.company is required'));
2313
+ .toThrow('customer.company is required');
2313
2314
  });
2314
2315
 
2315
2316
  test('Should fail if company does not exist on organization', async () => {
@@ -2344,9 +2345,9 @@ describe('Endpoint.RegisterMembers', () => {
2344
2345
  asOrganizationId: organization2.id,
2345
2346
  });
2346
2347
 
2347
- await expect(async () => await post(body, organization, token))
2348
+ await expect(post(body, organization, token))
2348
2349
  .rejects
2349
- .toThrow(new RegExp('Oeps, de facturatiegegevens die je probeerde te selecteren lijken niet meer te bestaan.'));
2350
+ .toThrow('Oeps, de facturatiegegevens die je probeerde te selecteren lijken niet meer te bestaan.');
2350
2351
  });
2351
2352
  });
2352
2353
 
@@ -2609,9 +2610,9 @@ describe('Endpoint.RegisterMembers', () => {
2609
2610
  // #endregion
2610
2611
 
2611
2612
  // #region act and assert
2612
- await expect(async () => await post(body, organization, token))
2613
+ await expect(post(body, organization, token))
2613
2614
  .rejects
2614
- .toThrow(new RegExp('Registration not found'));
2615
+ .toThrow('Registration not found');
2615
2616
  // #endregion
2616
2617
  });
2617
2618
 
@@ -2660,7 +2661,7 @@ describe('Endpoint.RegisterMembers', () => {
2660
2661
  });
2661
2662
 
2662
2663
  // send request and check occupancy
2663
- await expect(async () => await post(body, organization, token)).rejects.toThrow('Not allowed to move registrations');
2664
+ await expect(post(body, organization, token)).rejects.toThrow('Not allowed to move registrations');
2664
2665
  });
2665
2666
  });
2666
2667
 
@@ -2783,7 +2784,7 @@ describe('Endpoint.RegisterMembers', () => {
2783
2784
  customer: null,
2784
2785
  });
2785
2786
 
2786
- await expect(async () => await post(body, organization1, token)).rejects.toThrow('Permission denied: you are not allowed to delete registrations');
2787
+ await expect(post(body, organization1, token)).rejects.toThrow('Permission denied: you are not allowed to delete registrations');
2787
2788
  });
2788
2789
 
2789
2790
  test('Should deactivate registration', async () => {
@@ -2936,7 +2937,7 @@ describe('Endpoint.RegisterMembers', () => {
2936
2937
  customer: null,
2937
2938
  });
2938
2939
 
2939
- await expect(async () => await post(body2, organization, token))
2940
+ await expect(post(body2, organization, token))
2940
2941
  .rejects
2941
2942
  .toThrow(STExpect.simpleError({
2942
2943
  field: 'cancellationFeePercentage',
@@ -2987,9 +2988,9 @@ describe('Endpoint.RegisterMembers', () => {
2987
2988
  customer: null,
2988
2989
  });
2989
2990
 
2990
- await expect(async () => await post(body, organization, token))
2991
+ await expect(post(body, organization, token))
2991
2992
  .rejects
2992
- .toThrow(new RegExp('Permission denied: you are not allowed to delete registrations'));
2993
+ .toThrow('Permission denied: you are not allowed to delete registrations');
2993
2994
  });
2994
2995
 
2995
2996
  test('Cannot delete registrations as admin if no write permission to group', async () => {
@@ -3020,7 +3021,7 @@ describe('Endpoint.RegisterMembers', () => {
3020
3021
  asOrganizationId: organization.id,
3021
3022
  });
3022
3023
 
3023
- await expect(async () => await post(body, organization, token)).rejects.toThrow(/No permission to delete this registration/);
3024
+ await expect(post(body, organization, token)).rejects.toThrow(/No permission to delete this registration/);
3024
3025
  });
3025
3026
 
3026
3027
  /**
@@ -3052,7 +3053,7 @@ describe('Endpoint.RegisterMembers', () => {
3052
3053
  asOrganizationId: organization.id,
3053
3054
  });
3054
3055
 
3055
- await expect(async () => await post(body, organization, token)).rejects.toThrow(/No permission to delete this registration/);
3056
+ await expect(post(body, organization, token)).rejects.toThrow(/No permission to delete this registration/);
3056
3057
  });
3057
3058
 
3058
3059
  test('Should fail if registration does not exist anymore', async () => {
@@ -3100,7 +3101,7 @@ describe('Endpoint.RegisterMembers', () => {
3100
3101
 
3101
3102
  // #region act and assert
3102
3103
  await registration.delete();
3103
- await expect(async () => await post(body, organization, token)).rejects.toThrow(new RegExp('Registration not found'));
3104
+ await expect(post(body, organization, token)).rejects.toThrow('Registration not found');
3104
3105
  // #endregion
3105
3106
  });
3106
3107
 
@@ -3181,7 +3182,7 @@ describe('Endpoint.RegisterMembers', () => {
3181
3182
 
3182
3183
  // #region act and assert
3183
3184
  await post(body1, organization, token);
3184
- await expect(async () => await post(body2, organization, token)).rejects.toThrow(/No permission to delete this registration/);
3185
+ await expect(post(body2, organization, token)).rejects.toThrow(/No permission to delete this registration/);
3185
3186
  // #endregion
3186
3187
  });
3187
3188
  });
@@ -1,11 +1,14 @@
1
1
  import { createMollieClient, PaymentMethod as molliePaymentMethod } from '@mollie/api-client';
2
2
  import { ManyToOneRelation } from '@simonbackx/simple-database';
3
- import { Decoder } from '@simonbackx/simple-encoding';
4
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
3
+ import type { Decoder } from '@simonbackx/simple-encoding';
4
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
5
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
5
6
  import { SimpleError } from '@simonbackx/simple-errors';
6
7
  import { Email } from '@stamhoofd/email';
7
- import { BalanceItem, BalanceItemPayment, CachedBalance, Group, Member, MemberWithUsersRegistrationsAndGroups, MolliePayment, MollieToken, Organization, PayconiqPayment, Payment, Platform, RateLimiter, Registration, User } from '@stamhoofd/models';
8
- import { BalanceItemRelation, BalanceItemRelationType, BalanceItemStatus, BalanceItem as BalanceItemStruct, BalanceItemType, IDRegisterCheckout, PaymentCustomer, PaymentMethod, PaymentMethodHelper, PaymentProvider, PaymentStatus, Payment as PaymentStruct, PaymentType, PermissionLevel, PlatformFamily, PlatformMember, ReceivableBalanceType, RegisterItem, RegisterResponse, TranslatedString, Version } from '@stamhoofd/structures';
8
+ import type { MemberWithUsersRegistrationsAndGroups, Organization, Payment} from '@stamhoofd/models';
9
+ import { BalanceItem, BalanceItemPayment, CachedBalance, Group, Member, MolliePayment, MollieToken, PayconiqPayment, Platform, RateLimiter, Registration, User } from '@stamhoofd/models';
10
+ import type { BalanceItem as BalanceItemStruct, PlatformMember, RegisterItem} from '@stamhoofd/structures';
11
+ import { BalanceItemRelation, BalanceItemRelationType, BalanceItemStatus, BalanceItemType, IDRegisterCheckout, PaymentCustomer, PaymentMethod, PaymentMethodHelper, PaymentProvider, PaymentStatus, Payment as PaymentStruct, PaymentType, PermissionLevel, PlatformFamily, ReceivableBalanceType, RegisterResponse, TranslatedString, Version } from '@stamhoofd/structures';
9
12
  import { Formatter, sleep } from '@stamhoofd/utility';
10
13
 
11
14
  import { AuthenticatedStructures } from '../../../helpers/AuthenticatedStructures.js';
@@ -1,10 +1,13 @@
1
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
2
- import { assertSort, CountFilteredRequest, getSortFilter, LimitedFilteredRequest, PaginatedResponse, RegistrationPeriod as RegistrationPeriodStruct, StamhoofdFilter } from '@stamhoofd/structures';
1
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
2
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
+ import type { CountFilteredRequest, RegistrationPeriod as RegistrationPeriodStruct, StamhoofdFilter } from '@stamhoofd/structures';
4
+ import { assertSort, getSortFilter, LimitedFilteredRequest, PaginatedResponse } from '@stamhoofd/structures';
3
5
 
4
- import { Decoder } from '@simonbackx/simple-encoding';
6
+ import type { Decoder } from '@simonbackx/simple-encoding';
5
7
  import { SimpleError } from '@simonbackx/simple-errors';
6
8
  import { RegistrationPeriod } from '@stamhoofd/models';
7
- import { applySQLSorter, compileToSQLFilter, SQLFilterDefinitions, SQLSortDefinitions } from '@stamhoofd/sql';
9
+ import type { SQLFilterDefinitions, SQLSortDefinitions } from '@stamhoofd/sql';
10
+ import { applySQLSorter, compileToSQLFilter } from '@stamhoofd/sql';
8
11
  import { Context } from '../../../helpers/Context.js';
9
12
  import { registrationPeriodFilterCompilers } from '../../../sql-filters/registration-periods.js';
10
13
  import { registrationPeriodSorters } from '../../../sql-sorters/registration-periods.js';
@@ -1,5 +1,7 @@
1
- import { ConvertArrayToPatchableArray, Decoder, PatchableArrayAutoEncoder, PatchableArrayDecoder, StringDecoder, patchObject } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { ConvertArrayToPatchableArray, Decoder, PatchableArrayAutoEncoder} from '@simonbackx/simple-encoding';
2
+ import { PatchableArrayDecoder, StringDecoder, patchObject } from '@simonbackx/simple-encoding';
3
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
4
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
5
  import { RegistrationPeriod as RegistrationPeriodStruct } from '@stamhoofd/structures';
4
6
 
5
7
  import { SimpleError } from '@simonbackx/simple-errors';
@@ -1,9 +1,11 @@
1
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
2
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
2
3
  import { LoginProviderType, OpenIDClientConfiguration } from '@stamhoofd/structures';
3
4
 
4
5
  import { Context } from '../../../helpers/Context.js';
5
6
  import { Platform } from '@stamhoofd/models';
6
- import { AutoEncoder, Decoder, EnumDecoder, field } from '@simonbackx/simple-encoding';
7
+ import type { Decoder} from '@simonbackx/simple-encoding';
8
+ import { AutoEncoder, EnumDecoder, field } from '@simonbackx/simple-encoding';
7
9
  import { SSOService } from '../../../services/SSOService.js';
8
10
 
9
11
  type Params = Record<string, never>;
@@ -1,5 +1,6 @@
1
- import { AutoEncoderPatchType, Decoder } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { AutoEncoderPatchType, Decoder } from '@simonbackx/simple-encoding';
2
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
3
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
4
  import { OpenIDClientConfiguration } from '@stamhoofd/structures';
4
5
 
5
6
  import { Context } from '../../../helpers/Context.js';
@@ -1,5 +1,7 @@
1
- import { AutoEncoder, Decoder, field, StringDecoder } from '@simonbackx/simple-encoding';
2
- import { DecodedRequest, Endpoint, Request, Response } from '@simonbackx/simple-endpoints';
1
+ import type { Decoder} from '@simonbackx/simple-encoding';
2
+ import { AutoEncoder, field, StringDecoder } from '@simonbackx/simple-encoding';
3
+ import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
4
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
3
5
  import { SimpleError } from '@simonbackx/simple-errors';
4
6
  import { Organization } from '@stamhoofd/models';
5
7
  import { Webshop } from '@stamhoofd/models';
@@ -0,0 +1,43 @@
1
+ import type { Decoder } from '@simonbackx/simple-encoding';
2
+ import type { DecodedRequest, Request } from '@simonbackx/simple-endpoints';
3
+ import { Endpoint, Response } from '@simonbackx/simple-endpoints';
4
+ import { CountFilteredRequest, CountResponse } from '@stamhoofd/structures';
5
+
6
+ import { Context } from '../../../helpers/Context.js';
7
+ import { GetWebshopsEndpoint } from './GetWebshopsEndpoint.js';
8
+
9
+ type Params = Record<string, never>;
10
+ type Query = CountFilteredRequest;
11
+ type Body = undefined;
12
+ type ResponseBody = CountResponse;
13
+
14
+ export class GetWebshopsCountEndpoint extends Endpoint<Params, Query, Body, ResponseBody> {
15
+ queryDecoder = CountFilteredRequest as Decoder<CountFilteredRequest>;
16
+
17
+ protected doesMatch(request: Request): [true, Params] | [false] {
18
+ if (request.method !== 'GET') {
19
+ return [false];
20
+ }
21
+
22
+ const params = Endpoint.parseParameters(request.url, '/webshops/count', {});
23
+
24
+ if (params) {
25
+ return [true, params as Params];
26
+ }
27
+ return [false];
28
+ }
29
+
30
+ async handle(request: DecodedRequest<Params, Query, Body>) {
31
+ await Context.setOptionalOrganizationScope();
32
+ await Context.authenticate();
33
+
34
+ const query = await GetWebshopsEndpoint.buildQuery(request.query);
35
+ const count = await query.count();
36
+
37
+ return new Response(
38
+ CountResponse.create({
39
+ count,
40
+ }),
41
+ );
42
+ }
43
+ }