@stamhoofd/backend 2.121.0 → 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.
- package/output-2.txt +1 -0
- package/output.txt +1 -0
- package/package.json +69 -52
- package/src/audit-logs/EventNotificationLogger.ts +40 -0
- package/src/audit-logs/ModelLogger.ts +19 -15
- package/src/audit-logs/OrganizationLogger.ts +1 -1
- package/src/audit-logs/RegistrationInvitationLogger.ts +24 -24
- package/src/audit-logs/init.ts +8 -2
- package/src/boot.ts +19 -18
- package/src/crons/amazon-ses.ts +13 -26
- package/src/crons/balance-emails.ts +3 -5
- package/src/crons/clearExcelCache.test.ts +1 -1
- package/src/crons/clearExcelCache.ts +1 -2
- package/src/crons/drip-emails.ts +42 -0
- package/src/crons/endFunctionsOfUsersWithoutRegistration.ts +4 -0
- package/src/crons/helpers/isOutside.ts +11 -0
- package/src/crons/helpers/useSavedIterator.ts +32 -0
- package/src/crons/index.ts +5 -0
- package/src/crons/invoices.ts +32 -38
- package/src/crons/members-fees.ts +50 -0
- package/src/crons/mollie-chargebacks.ts +14 -15
- package/src/crons/service-fees.ts +152 -0
- package/src/crons/stripe-invoices.ts +48 -0
- package/src/crons/transfer-fees.ts +176 -0
- package/src/crons/update-cached-balances.ts +4 -4
- package/src/crons.ts +7 -64
- package/src/debug.ts +4 -2
- package/src/email-recipient-loaders/documents.ts +1 -1
- package/src/email-recipient-loaders/members.ts +1 -1
- package/src/email-recipient-loaders/payments.ts +4 -6
- package/src/email-recipient-loaders/registrations.ts +1 -1
- package/src/email-replacements/getEmailReplacementsForPayment.ts +5 -9
- package/src/endpoints/admin/members/ChargeMembersEndpoint.ts +1 -1
- package/src/endpoints/admin/memberships/ChargeMembershipsEndpoint.ts +1 -1
- package/src/endpoints/admin/memberships/GetChargeMembershipsSummaryEndpoint.ts +3 -5
- package/src/endpoints/admin/organizations/ChargeOrganizationsEndpoint.ts +1 -1
- package/src/endpoints/admin/organizations/GetOrganizationsCountEndpoint.ts +1 -1
- package/src/endpoints/admin/organizations/GetOrganizationsEndpoint.ts +13 -7
- package/src/endpoints/admin/organizations/PatchOrganizationsEndpoint.ts +4 -6
- package/src/endpoints/admin/organizations/PatchPackagesEndpoint.test.ts +10 -6
- package/src/endpoints/admin/organizations/PatchPackagesEndpoint.ts +39 -21
- package/src/endpoints/admin/registrations/ChargeRegistrationsEndpoint.ts +1 -1
- package/src/endpoints/auth/CreateAdminEndpoint.ts +23 -5
- package/src/endpoints/auth/CreateTokenEndpoint.ts +2 -2
- package/src/endpoints/auth/DeleteTokenEndpoint.ts +1 -1
- package/src/endpoints/auth/DeleteUserEndpoint.ts +3 -3
- package/src/endpoints/auth/ForgotPasswordEndpoint.ts +1 -1
- package/src/endpoints/auth/GetOtherUserEndpoint.ts +1 -1
- package/src/endpoints/auth/GetUserEndpoint.ts +1 -1
- package/src/endpoints/auth/OpenIDConnectAuthTokenEndpoint.ts +1 -1
- package/src/endpoints/auth/OpenIDConnectStartEndpoint.ts +1 -1
- package/src/endpoints/auth/PatchUserEndpoint.ts +5 -8
- package/src/endpoints/auth/PollEmailVerificationEndpoint.ts +1 -1
- package/src/endpoints/auth/RetryEmailVerificationEndpoint.ts +1 -1
- package/src/endpoints/auth/SignupEndpoint.ts +2 -3
- package/src/endpoints/auth/VerifyEmailEndpoint.ts +20 -3
- package/src/endpoints/frontend/FrontendEnvironmentEndpoint.ts +2 -1
- package/src/endpoints/global/addresses/SearchRegionsEndpoint.ts +2 -4
- package/src/endpoints/global/addresses/ValidateAddressEndpoint.ts +1 -1
- package/src/endpoints/global/audit-logs/GetAuditLogsEndpoint.ts +5 -7
- package/src/endpoints/global/caddy/CheckDomainCertEndpoint.ts +2 -2
- package/src/endpoints/global/email/CreateEmailEndpoint.ts +3 -4
- package/src/endpoints/global/email/GetAdminEmailsEndpoint.test.ts +1 -1
- package/src/endpoints/global/email/GetAdminEmailsEndpoint.ts +1 -2
- package/src/endpoints/global/email/GetEmailAddressEndpoint.ts +4 -6
- package/src/endpoints/global/email/GetEmailEndpoint.ts +1 -1
- package/src/endpoints/global/email/GetUserEmailsEndpoint.test.ts +1 -1
- package/src/endpoints/global/email/GetUserEmailsEndpoint.ts +1 -1
- package/src/endpoints/global/email/ManageEmailAddressEndpoint.ts +6 -10
- package/src/endpoints/global/email/PatchEmailEndpoint.test.ts +4 -7
- package/src/endpoints/global/email/PatchEmailEndpoint.ts +6 -9
- package/src/endpoints/global/email-recipients/GetEmailRecipientsCountEndpoint.ts +1 -1
- package/src/endpoints/global/email-recipients/GetEmailRecipientsEndpoint.test.ts +1 -1
- package/src/endpoints/global/email-recipients/GetEmailRecipientsEndpoint.ts +1 -1
- package/src/endpoints/global/email-recipients/RetryEmailRecipientEndpoint.ts +2 -2
- package/src/endpoints/global/events/GetEventNotificationsCountEndpoint.ts +1 -1
- package/src/endpoints/global/events/GetEventNotificationsEndpoint.ts +3 -3
- package/src/endpoints/global/events/GetEventsEndpoint.ts +3 -3
- package/src/endpoints/global/events/PatchEventNotificationsEndpoint.test.ts +49 -4
- package/src/endpoints/global/events/PatchEventNotificationsEndpoint.ts +5 -8
- package/src/endpoints/global/events/PatchEventsEndpoint.test.ts +12 -44
- package/src/endpoints/global/events/PatchEventsEndpoint.ts +128 -127
- package/src/endpoints/global/files/ExportToExcelEndpoint.ts +9 -9
- package/src/endpoints/global/files/GetFileCache.ts +3 -4
- package/src/endpoints/global/files/UploadFile.ts +3 -4
- package/src/endpoints/global/files/UploadImage.ts +3 -4
- package/src/endpoints/global/groups/GetGroupsCountEndpoint.ts +1 -1
- package/src/endpoints/global/groups/GetGroupsEndpoint.test.ts +1 -1
- package/src/endpoints/global/groups/GetGroupsEndpoint.ts +4 -2
- package/src/endpoints/global/members/GetMemberFamilyEndpoint.ts +2 -3
- package/src/endpoints/global/members/GetMembersCountEndpoint.ts +1 -1
- package/src/endpoints/global/members/GetMembersEndpoint.test.ts +2 -2
- package/src/endpoints/global/members/GetMembersEndpoint.ts +10 -12
- package/src/endpoints/global/members/PatchOrganizationMembersEndpoint.test.ts +195 -12
- package/src/endpoints/global/members/PatchOrganizationMembersEndpoint.ts +16 -22
- package/src/endpoints/global/members/helpers/validateGroupFilter.ts +6 -30
- package/src/endpoints/global/members/shouldCheckIfMemberIsDuplicate.ts +1 -1
- package/src/endpoints/global/organizations/CheckRegisterCodeEndpoint.ts +1 -1
- package/src/endpoints/global/organizations/CreateOrganizationEndpoint.ts +40 -8
- package/src/endpoints/global/organizations/GetOrganizationFromDomainEndpoint.ts +2 -2
- package/src/endpoints/global/organizations/GetOrganizationFromUriEndpoint.ts +2 -2
- package/src/endpoints/global/organizations/SearchOrganizationEndpoint.test.ts +4 -1
- package/src/endpoints/global/organizations/SearchOrganizationEndpoint.ts +4 -5
- package/src/endpoints/global/payments/StripeWebhookEndpoint.ts +9 -16
- package/src/endpoints/global/platform/GetPlatformAdminsEndpoint.ts +1 -1
- package/src/endpoints/global/platform/GetPlatformEndpoint.ts +1 -1
- package/src/endpoints/global/platform/PatchPlatformEnpoint.test.ts +1 -1
- package/src/endpoints/global/platform/PatchPlatformEnpoint.ts +11 -11
- package/src/endpoints/global/platform-memberships/GetPlatformMembershipsCountEndpoint.ts +31 -31
- package/src/endpoints/global/platform-memberships/GetPlatformMembershipsEndpoint.ts +18 -20
- package/src/endpoints/global/registration/GetRegistrationsCountEndpoint.ts +1 -1
- package/src/endpoints/global/registration/GetRegistrationsEndpoint.test.ts +1 -1
- package/src/endpoints/global/registration/GetRegistrationsEndpoint.ts +6 -10
- package/src/endpoints/global/registration/GetUserDetailedPayableBalanceEndpoint.ts +35 -6
- package/src/endpoints/global/registration/GetUserDocumentsEndpoint.ts +2 -2
- package/src/endpoints/global/registration/GetUserMembersEndpoint.ts +1 -1
- package/src/endpoints/global/registration/GetUserPayableBalanceEndpoint.ts +1 -1
- package/src/endpoints/global/registration/PatchUserMembersEndpoint.test.ts +2 -2
- package/src/endpoints/global/registration/PatchUserMembersEndpoint.ts +3 -3
- package/src/endpoints/global/registration/RegisterMembersEndpoint.test.ts +90 -6
- package/src/endpoints/global/registration/RegisterMembersEndpoint.ts +35 -34
- package/src/endpoints/global/registration-invitations/GetRegistrationInvitationsCountEndpoint.ts +1 -1
- package/src/endpoints/global/registration-invitations/GetRegistrationInvitationsEndpoint.test.ts +62 -63
- package/src/endpoints/global/registration-invitations/GetRegistrationInvitationsEndpoint.ts +6 -9
- package/src/endpoints/global/registration-invitations/PatchRegistrationInvitationsEndpoint.test.ts +51 -52
- package/src/endpoints/global/registration-invitations/PatchRegistrationInvitationsEndpoint.ts +6 -7
- package/src/endpoints/global/registration-periods/GetRegistrationPeriodsCountEndpoint.ts +43 -0
- package/src/endpoints/global/registration-periods/GetRegistrationPeriodsEndpoint.ts +1 -1
- package/src/endpoints/global/registration-periods/PatchRegistrationPeriodsEndpoint.ts +13 -5
- package/src/endpoints/global/sso/GetSSOEndpoint.ts +2 -3
- package/src/endpoints/global/sso/SetSSOEndpoint.ts +1 -1
- package/src/endpoints/global/webshops/GetWebshopFromDomainEndpoint.ts +2 -2
- package/src/endpoints/global/webshops/GetWebshopsEndpoint.test.ts +1 -2
- package/src/endpoints/global/webshops/GetWebshopsEndpoint.ts +2 -4
- package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemsCountEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemsEndpoint.ts +3 -4
- package/src/endpoints/organization/dashboard/balance-items/PatchBalanceItemsEndpoint.ts +7 -9
- package/src/endpoints/organization/dashboard/billing/ApplyRegisterCodeEndpoint.test.ts +73 -0
- package/src/endpoints/organization/dashboard/billing/ApplyRegisterCodeEndpoint.ts +89 -0
- package/src/endpoints/organization/dashboard/billing/DeactivatePackageEndpoint.ts +1 -5
- package/src/endpoints/organization/dashboard/billing/DeleteOrganizationMandateEndpoint.ts +11 -11
- package/src/endpoints/organization/dashboard/billing/GetOrganizationDetailedPayableBalanceCollectionEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/billing/GetOrganizationDetailedPayableBalanceEndpoint.ts +8 -8
- package/src/endpoints/organization/dashboard/billing/GetOrganizationMandatesEndpoint.ts +9 -9
- package/src/endpoints/organization/dashboard/billing/GetOrganizationPayableBalanceEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/billing/GetOrganizationPayableInvoicesEndpoint.ts +68 -0
- package/src/endpoints/organization/dashboard/billing/GetPackagesEndpoint.ts +4 -4
- package/src/endpoints/organization/dashboard/billing/GetRegisterCodeEndpoint.ts +66 -0
- package/src/endpoints/organization/dashboard/billing/OrganizationCheckoutEndpoint.test.ts +949 -0
- package/src/endpoints/organization/dashboard/billing/OrganizationCheckoutEndpoint.ts +60 -57
- package/src/endpoints/organization/dashboard/billing/PatchOrganizationMandatesEndpoint.ts +20 -20
- package/src/endpoints/organization/dashboard/documents/GetDocumentTemplateXML.ts +1 -1
- package/src/endpoints/organization/dashboard/documents/GetDocumentTemplatesCountEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/documents/GetDocumentTemplatesEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/documents/GetDocumentsCountEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/documents/GetDocumentsEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/documents/PatchDocumentEndpoint.ts +10 -2
- package/src/endpoints/organization/dashboard/documents/PatchDocumentTemplatesEndpoint.test.ts +2 -2
- package/src/endpoints/organization/dashboard/documents/PatchDocumentTemplatesEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/email/CheckEmailBouncesEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/email-templates/GetEmailTemplatesEndpoint.test.ts +1 -1
- package/src/endpoints/organization/dashboard/email-templates/GetEmailTemplatesEndpoint.ts +10 -8
- package/src/endpoints/organization/dashboard/email-templates/PatchEmailTemplatesEndpoint.test.ts +1 -1
- package/src/endpoints/organization/dashboard/email-templates/PatchEmailTemplatesEndpoint.ts +5 -6
- package/src/endpoints/organization/dashboard/invoices/GetInvoicesCountEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/invoices/GetInvoicesEndpoint.ts +10 -6
- package/src/endpoints/organization/dashboard/invoices/PatchInvoicesEndpoint.ts +11 -2
- package/src/endpoints/organization/dashboard/mollie/CheckMollieEndpoint.ts +4 -5
- package/src/endpoints/organization/dashboard/mollie/ConnectMollieEndpoint.ts +5 -5
- package/src/endpoints/organization/dashboard/mollie/DisconnectMollieEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/mollie/GetMollieDashboardEndpoint.ts +7 -7
- package/src/endpoints/organization/dashboard/nolt/CreateNoltTokenEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/organization/GetOrganizationArchivedGroups.ts +2 -2
- package/src/endpoints/organization/dashboard/organization/GetOrganizationDeletedGroups.ts +1 -1
- package/src/endpoints/organization/dashboard/organization/GetUitpasClientIdEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.test.ts +2 -2
- package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.ts +50 -12
- package/src/endpoints/organization/dashboard/organization/SearchUitpasOrganizersEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/organization/SetOrganizationDomainEndpoint.ts +5 -10
- package/src/endpoints/organization/dashboard/organization/SetUitpasClientCredentialsEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/payments/GetPaymentsCountEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/payments/GetPaymentsEndpoint.ts +3 -4
- package/src/endpoints/organization/dashboard/payments/PatchPaymentsEndpoint.ts +21 -14
- package/src/endpoints/organization/dashboard/receivable-balances/ChargeReceivableBalancesEndpoint.ts +35 -28
- package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalanceEndpoint.ts +2 -3
- package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalancesCountEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalancesEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/registration-periods/GetOrganizationRegistrationPeriodsEndpoint.test.ts +1 -1
- package/src/endpoints/organization/dashboard/registration-periods/GetOrganizationRegistrationPeriodsEndpoint.ts +2 -3
- package/src/endpoints/organization/dashboard/registration-periods/MoveRegistrationPeriods.test.ts +1 -1
- package/src/endpoints/organization/dashboard/registration-periods/PatchOrganizationRegistrationPeriodsEndpoint.test.ts +1 -1
- package/src/endpoints/organization/dashboard/registration-periods/PatchOrganizationRegistrationPeriodsEndpoint.ts +19 -18
- package/src/endpoints/organization/dashboard/registration-periods/SetupStepReviewEndpoint.ts +4 -5
- package/src/endpoints/organization/dashboard/stripe/ConnectStripeEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/stripe/DeleteStripeAccountEndpoint.ts +2 -3
- package/src/endpoints/organization/dashboard/stripe/GetStripeAccountLinkEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/stripe/GetStripeAccountsEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/stripe/GetStripeLoginLinkEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/stripe/UpdateStripeAccountEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/users/CreateApiUserEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/users/DeleteUserEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/users/GetApiUsersEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/users/GetOrganizationAdminsEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/users/PatchApiUserEndpoint.ts +4 -6
- package/src/endpoints/organization/dashboard/webshops/CreateWebshopEndpoint.ts +10 -15
- package/src/endpoints/organization/dashboard/webshops/DeleteWebshopEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/webshops/GetDiscountCodesEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/webshops/GetWebshopOrdersCountEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/webshops/GetWebshopOrdersEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/webshops/GetWebshopTicketsEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/webshops/GetWebshopUriAvailabilityEndpoint.ts +11 -2
- package/src/endpoints/organization/dashboard/webshops/PatchDiscountCodesEndpoint.ts +4 -6
- package/src/endpoints/organization/dashboard/webshops/PatchWebshopEndpoint.ts +22 -7
- package/src/endpoints/organization/dashboard/webshops/PatchWebshopOrdersEndpoint.ts +20 -27
- package/src/endpoints/organization/dashboard/webshops/PatchWebshopTicketsEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/webshops/SearchUitpasEventsEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/webshops/VerifyWebshopDomainEndpoint.ts +2 -3
- package/src/endpoints/organization/dashboard/webshops/WebshopReservedPathSegments.test.ts +95 -0
- package/src/endpoints/organization/shared/ExchangePaymentEndpoint.ts +2 -2
- package/src/endpoints/organization/shared/GetDocumentHtml.ts +1 -1
- package/src/endpoints/organization/shared/GetPaymentEndpoint.ts +1 -1
- package/src/endpoints/organization/shared/GetUitpasNumberDetailsEndpoint.ts +3 -5
- package/src/endpoints/organization/shared/auth/GetOrganizationEndpoint.ts +1 -1
- package/src/endpoints/organization/webshops/CheckWebshopDiscountCodesEndpoint.ts +4 -1
- package/src/endpoints/organization/webshops/GetOrderByPaymentEndpoint.ts +14 -3
- package/src/endpoints/organization/webshops/GetOrderEndpoint.ts +14 -2
- package/src/endpoints/organization/webshops/GetTicketsEndpoint.ts +37 -16
- package/src/endpoints/organization/webshops/GetWebshopEndpoint.test.ts +34 -2
- package/src/endpoints/organization/webshops/GetWebshopEndpoint.ts +4 -2
- package/src/endpoints/organization/webshops/PlaceOrderEndpoint.test.ts +74 -3
- package/src/endpoints/organization/webshops/PlaceOrderEndpoint.ts +16 -33
- package/src/endpoints/organization/webshops/RetrieveUitpasSocialTariffPriceEndpoint.ts +3 -5
- package/src/endpoints/organization/webshops/WebshopAuthHelper.ts +36 -0
- package/src/endpoints/system/HealthEndpoint.ts +1 -1
- package/src/excel-loaders/balance-items.ts +1 -1
- package/src/excel-loaders/event-notifications.ts +1 -1
- package/src/excel-loaders/members.ts +1 -1
- package/src/excel-loaders/organizations.ts +3 -3
- package/src/excel-loaders/payments.ts +31 -1
- package/src/excel-loaders/platform-memberships.ts +13 -14
- package/src/excel-loaders/receivable-balances.ts +2 -2
- package/src/excel-loaders/registrations.ts +2 -3
- package/src/helpers/AddressValidator.ts +7 -14
- package/src/helpers/AdminPermissionChecker.ts +50 -63
- package/src/helpers/AuthenticatedStructures.ts +69 -55
- package/src/helpers/BalanceItemRelationsBackfiller.test.ts +174 -0
- package/src/helpers/BalanceItemRelationsBackfiller.ts +163 -0
- package/src/helpers/BuckarooHelper.ts +2 -4
- package/src/helpers/CheckSettlements.ts +12 -24
- package/src/helpers/Context.ts +15 -10
- package/src/helpers/CookieHelper.ts +1 -2
- package/src/helpers/EmailResumer.ts +1 -2
- package/src/helpers/FileCache.ts +2 -3
- package/src/helpers/FinancialSupportHelper.ts +2 -2
- package/src/helpers/FlagMomentCleanup.ts +1 -2
- package/src/helpers/ForwardHandler.ts +5 -10
- package/src/helpers/GlobalHelper.ts +3 -3
- package/src/helpers/LegacyBillingConverter.ts +787 -0
- package/src/helpers/MemberMerger.test.ts +782 -0
- package/src/helpers/MemberMerger.ts +600 -0
- package/src/helpers/MemberUserSyncer.ts +6 -12
- package/src/helpers/MembershipCharger.ts +2 -4
- package/src/helpers/PaymentCustomerResolver.test.ts +203 -0
- package/src/helpers/PaymentCustomerResolver.ts +144 -0
- package/src/helpers/PeriodHelper.ts +2 -3
- package/src/helpers/RecordAnswerHelper.test.ts +105 -110
- package/src/helpers/RecordAnswerHelper.ts +7 -7
- package/src/helpers/SeedTools.ts +106 -0
- package/src/helpers/ServiceFeeHelper.ts +125 -15
- package/src/helpers/SetupStepUpdater.ts +38 -32
- package/src/helpers/StamhoofdFilterAccessHelper.ts +52 -0
- package/src/helpers/StripeHelper.ts +14 -36
- package/src/helpers/StripeInvoicer.ts +419 -0
- package/src/helpers/StripePayoutChecker.ts +5 -10
- package/src/helpers/TagHelper.ts +7 -8
- package/src/helpers/TemporaryMemberAccess.ts +1 -2
- package/src/helpers/ThrottledQueue.ts +1 -2
- package/src/helpers/UitpasTokenRepository.ts +1 -2
- package/src/helpers/ViesHelper.ts +7 -11
- package/src/helpers/XlsxTransformerColumnHelper.ts +1 -1
- package/src/helpers/outstandingBalanceJoin.ts +2 -2
- package/src/helpers/updateMemberDetailsUitpasNumber.ts +3 -5
- package/src/migrate.ts +12 -5
- package/src/{seeds → migrations}/0000000004-single-organization.ts +10 -1
- package/src/migrations/0000000006-default-organization.ts +139 -0
- package/src/{seeds → migrations}/1715028563-user-permissions.ts +17 -27
- package/src/{seeds/1765896674-document-update-year.test.ts → migrations/1750090029-document-update-year.test.ts} +27 -26
- package/src/migrations/1750090029-document-update-year.ts +103 -0
- package/src/{seeds → migrations}/1750090030-records-configuration.ts +33 -32
- package/src/migrations/1750090031-records-configuration-webshops.ts +36 -0
- package/src/migrations/1752848540-national-numbers.ts +585 -0
- package/src/migrations/1752848550-records-configuration-group-filter.ts +1064 -0
- package/src/{seeds → migrations}/1752848561-groups-registration-periods.ts +70 -26
- package/src/{seeds → migrations}/1754560914-groups-prices.test.ts +1 -1
- package/src/{seeds → migrations}/1754560914-groups-prices.ts +9 -15
- package/src/{seeds → migrations}/1756293699-fill-previous-next-period-id.ts +1 -2
- package/src/migrations/1761665607-sync-member-users.ts +40 -0
- package/src/migrations/1779121240-invoice-email-template.sql +6 -0
- package/src/migrations/1779986893-default-payment-failed-email-templates.sql +4 -0
- package/src/migrations/1780578166-convert-legacy-billing.ts +13 -0
- package/src/{seeds/1755876819-remove-duplicate-members.ts → migrations/1780665426-remove-duplicate-members.ts} +23 -4
- package/src/migrations/1780933598-document-groups.ts +88 -0
- package/src/migrations/1781692342-balance-item-relations.ts +13 -0
- package/src/migrations/1781857866-platform-admins.ts +103 -0
- package/src/migrations/1781857867-rm-old-platform-admins.ts +25 -0
- package/src/seeds/0000000001-throw.ts +5 -0
- package/src/seeds/1760702452-update-balance-price-paid.ts +19 -0
- package/src/seeds/1760702453-update-balance-invoiced.ts +19 -0
- package/src/seeds/1760702454-update-cached-outstanding-balance-from-items.ts +51 -14
- package/src/seeds/1773754928-force-save-members.ts +41 -8
- package/src/seeds/1780665427-schedule-stock-updates.ts +45 -0
- package/src/seeds/1780665428-group-update-occupancy.ts +31 -0
- package/src/seeds/1780915001-fill-payment-customer.ts +70 -0
- package/src/seeds/1780915002-update-orders.ts +39 -0
- package/src/seeds/1782047708-organization-company-address.ts +44 -0
- package/src/seeds-temporary/1769088653-uitpas-status.ts +1 -2
- package/src/seeds-temporary/1780416000-migrate-audit-log-legacy-enums.test.ts +69 -0
- package/src/seeds-temporary/1780416000-migrate-audit-log-legacy-enums.ts +85 -0
- package/src/services/AuditLogService.test.ts +51 -0
- package/src/services/AuditLogService.ts +45 -0
- package/src/services/BalanceItemService.ts +141 -44
- package/src/services/CpuService.ts +3 -6
- package/src/services/DatabaseCollationService.test.ts +1 -2
- package/src/services/DocumentService.ts +1 -2
- package/src/services/EventNotificationService.ts +1 -1
- package/src/services/FileSignService.ts +2 -4
- package/src/services/InvoicePdfService.ts +286 -0
- package/src/services/InvoiceService.ts +204 -251
- package/src/services/InvoiceXMLService.ts +424 -0
- package/src/services/MemberNumberService.ts +6 -11
- package/src/services/MemberRecordStore.ts +8 -10
- package/src/services/MollieService.ts +114 -121
- package/src/services/PaymentMandateService.ts +45 -45
- package/src/services/PaymentReallocationService.test.ts +1 -1
- package/src/services/PaymentReallocationService.ts +7 -9
- package/src/services/PaymentService.ts +444 -308
- package/src/services/PlatformMembershipService.ts +4 -8
- package/src/services/ReferralService.ts +223 -0
- package/src/services/RegistrationService.ts +63 -53
- package/src/services/SSOService.test.ts +119 -0
- package/src/services/SSOService.ts +56 -49
- package/src/services/STPackageService.ts +97 -61
- package/src/services/UniqueMemberNumberService.ts +69 -0
- package/src/services/UniqueUserService.ts +3 -6
- package/src/services/VATService.ts +85 -0
- package/src/services/uitpas/PassholderEndpoints.ts +3 -6
- package/src/services/uitpas/UitpasService.ts +6 -10
- package/src/services/uitpas/checkUitpasNumbers.ts +2 -4
- package/src/services/uitpas/getSocialTariffForUitpasNumbers.ts +3 -6
- package/src/services/uitpas/searchUitpasEvents.ts +1 -2
- package/src/sql-filters/audit-logs.ts +1 -1
- package/src/sql-filters/balance-item-payments.ts +1 -1
- package/src/sql-filters/balance-items.ts +1 -1
- package/src/sql-filters/base-registration-filter-compilers.ts +5 -33
- package/src/sql-filters/document-templates.ts +1 -1
- package/src/sql-filters/documents.ts +1 -1
- package/src/sql-filters/email-recipients.ts +1 -1
- package/src/sql-filters/emails.ts +1 -1
- package/src/sql-filters/event-notifications.ts +1 -1
- package/src/sql-filters/events.ts +6 -1
- package/src/sql-filters/groups.ts +5 -0
- package/src/sql-filters/invoiced-balance-items.ts +1 -1
- package/src/sql-filters/invoices.ts +1 -1
- package/src/sql-filters/member-responsibility-records.ts +1 -1
- package/src/sql-filters/members.ts +1 -1
- package/src/sql-filters/orders.ts +4 -4
- package/src/sql-filters/organization-registration-periods.ts +1 -1
- package/src/sql-filters/organizations.ts +1 -1
- package/src/sql-filters/platform-memberships.ts +3 -3
- package/src/sql-filters/receivable-balances.ts +1 -1
- package/src/sql-filters/registration-periods.ts +1 -1
- package/src/sql-filters/registrations.ts +1 -1
- package/src/sql-filters/tickets.ts +1 -1
- package/src/sql-filters/users.ts +1 -1
- package/src/sql-sorters/groups.ts +23 -0
- package/src/sql-sorters/platform-memberships.ts +16 -16
- package/src/sql-sorters/registration-invitations.ts +2 -2
- package/tests/actions/patchOrganizationMember.ts +1 -1
- package/tests/actions/patchUserMember.ts +1 -1
- package/tests/assertions/assertBalances.ts +6 -12
- package/tests/e2e/api-rate-limits.test.ts +12 -24
- package/tests/e2e/bundle-discounts.test.ts +4 -1
- package/tests/e2e/charge-members.test.ts +13 -11
- package/tests/e2e/documents.test.ts +4 -1
- package/tests/e2e/register.test.ts +7 -9
- package/tests/e2e/stock.test.ts +4 -3
- package/tests/e2e/tickets.test.ts +1 -1
- package/tests/helpers/MollieMocker.ts +462 -0
- package/tests/helpers/PayconiqMocker.ts +138 -45
- package/tests/helpers/StripeMocker.ts +9 -6
- package/tests/helpers/index.ts +4 -0
- package/tests/init/initAdmin.ts +2 -2
- package/tests/init/initBundleDiscount.ts +1 -1
- package/tests/init/initMembershipOrganization.ts +13 -0
- package/tests/init/initPermissionRole.ts +3 -4
- package/tests/vitest.global.setup.ts +1 -1
- package/vitest.config.js +6 -0
- package/.nvmrc +0 -1
- package/src/helpers/GroupBuilder.ts +0 -418
- package/src/seeds/0000000000-example.ts +0 -11
- package/src/seeds/1722256498-group-update-occupancy.ts +0 -52
- package/src/seeds/1726572303-schedule-stock-updates.ts +0 -52
- package/src/seeds/1726847064-setup-steps.ts +0 -16
- package/src/seeds/1728928974-update-cached-outstanding-balance-from-items.ts +0 -31
- package/src/seeds/1729253172-update-orders.ts +0 -21
- package/src/seeds/1733319079-fill-paying-organization-ids.ts +0 -68
- package/src/seeds/1733748412-update-deleted-order-numbers.ts +0 -109
- package/src/seeds/1733994455-balance-item-status-open.ts +0 -30
- package/src/seeds/1740046783-update-membership.ts +0 -17
- package/src/seeds/1741008870-fix-auditlog-description.ts +0 -50
- package/src/seeds/1741011468-fix-auditlog-description-uft16.ts +0 -88
- package/src/seeds/1741268179-fix-group-dates-of-events.ts +0 -32
- package/src/seeds/1751445358-upload-email-attachments.ts +0 -106
- package/src/seeds/1755532883-update-email-sender-ids.ts +0 -47
- package/src/seeds/1755790070-fill-email-recipient-errors.ts +0 -96
- package/src/seeds/1756115432-remove-old-drafts.ts +0 -16
- package/src/seeds/1756115433-fill-email-recipient-organization-id.ts +0 -30
- package/src/seeds/1756303697-update-email-counts.ts +0 -76
- package/src/seeds/1761665607-sync-member-users.ts +0 -59
- package/src/seeds/1765896674-document-update-year.ts +0 -66
- /package/src/{seeds → migrations}/0000000001-development-user.ts +0 -0
- /package/src/{seeds → migrations}/0000000002-clear-stamhoofd-email-templates.ts +0 -0
- /package/src/{seeds → migrations}/0000000003-default-email-templates.ts +0 -0
- /package/src/{seeds → migrations}/1752848561-groups-registration-periods.test.ts +0 -0
- /package/src/{seeds → migrations}/1766150402-document-published-at.test.ts +0 -0
- /package/src/{seeds → migrations}/1766150402-document-published-at.ts +0 -0
- /package/src/{seeds → migrations}/1779121239-default-invoice-email-template.sql +0 -0
- /package/src/{seeds → migrations}/data/default-email-templates.sql +0 -0
|
@@ -1,21 +1,17 @@
|
|
|
1
|
-
import { createMollieClient, PaymentMethod as molliePaymentMethod } from '@mollie/api-client';
|
|
2
1
|
import { ManyToOneRelation } from '@simonbackx/simple-database';
|
|
3
2
|
import type { Decoder } from '@simonbackx/simple-encoding';
|
|
4
|
-
import type { DecodedRequest, Request} from '@simonbackx/simple-endpoints';
|
|
3
|
+
import type { DecodedRequest, Request } from '@simonbackx/simple-endpoints';
|
|
5
4
|
import { Endpoint, Response } from '@simonbackx/simple-endpoints';
|
|
6
5
|
import { SimpleError } from '@simonbackx/simple-errors';
|
|
7
6
|
import { Email } from '@stamhoofd/email';
|
|
8
|
-
import type { MemberWithUsersRegistrationsAndGroups, Organization, Payment} from '@stamhoofd/models';
|
|
9
|
-
import { BalanceItem,
|
|
10
|
-
import type { BalanceItem as BalanceItemStruct, PlatformMember, RegisterItem} from '@stamhoofd/structures';
|
|
11
|
-
import { BalanceItemRelation, BalanceItemRelationType, BalanceItemStatus, BalanceItemType, IDRegisterCheckout,
|
|
12
|
-
import { Formatter
|
|
7
|
+
import type { MemberWithUsersRegistrationsAndGroups, Organization, Payment } from '@stamhoofd/models';
|
|
8
|
+
import { BalanceItem, CachedBalance, Group, Member, Platform, RateLimiter, Registration } from '@stamhoofd/models';
|
|
9
|
+
import type { BalanceItem as BalanceItemStruct, PlatformMember, RegisterItem } from '@stamhoofd/structures';
|
|
10
|
+
import { BalanceItemRelation, BalanceItemRelationType, BalanceItemStatus, BalanceItemType, IDRegisterCheckout, Payment as PaymentStruct, PermissionLevel, PlatformFamily, ReceivableBalanceType, RegisterResponse, TranslatedString } from '@stamhoofd/structures';
|
|
11
|
+
import { Formatter } from '@stamhoofd/utility';
|
|
13
12
|
|
|
14
13
|
import { AuthenticatedStructures } from '../../../helpers/AuthenticatedStructures.js';
|
|
15
|
-
import { BuckarooHelper } from '../../../helpers/BuckarooHelper.js';
|
|
16
14
|
import { Context } from '../../../helpers/Context.js';
|
|
17
|
-
import { ServiceFeeHelper } from '../../../helpers/ServiceFeeHelper.js';
|
|
18
|
-
import { StripeHelper } from '../../../helpers/StripeHelper.js';
|
|
19
15
|
import { updateMemberDetailsUitpasNumber } from '../../../helpers/updateMemberDetailsUitpasNumber.js';
|
|
20
16
|
import { BalanceItemService } from '../../../services/BalanceItemService.js';
|
|
21
17
|
import { PaymentService } from '../../../services/PaymentService.js';
|
|
@@ -88,8 +84,7 @@ export class RegisterMembersEndpoint extends Endpoint<Params, Query, Body, Respo
|
|
|
88
84
|
|
|
89
85
|
// We won't create a payment. The balance will get added to the outstanding amount of the member / already paying organization
|
|
90
86
|
whoWillPayNow = 'nobody';
|
|
91
|
-
}
|
|
92
|
-
else if (request.body.asOrganizationId && request.body.asOrganizationId !== organization.id) {
|
|
87
|
+
} else if (request.body.asOrganizationId && request.body.asOrganizationId !== organization.id) {
|
|
93
88
|
// Paying balance to a different organization requires finance permissions
|
|
94
89
|
// we'll check later if you are also registering members, which requires full permissions
|
|
95
90
|
if (!await Context.auth.canManageFinances(request.body.asOrganizationId)) {
|
|
@@ -111,8 +106,7 @@ export class RegisterMembersEndpoint extends Endpoint<Params, Query, Body, Respo
|
|
|
111
106
|
|
|
112
107
|
try {
|
|
113
108
|
limiter.track(organization.id, 1);
|
|
114
|
-
}
|
|
115
|
-
catch (e) {
|
|
109
|
+
} catch (e) {
|
|
116
110
|
Email.sendWebmaster({
|
|
117
111
|
subject: '[Limiet] Limiet bereikt voor aantal inschrijvingen',
|
|
118
112
|
text: 'Beste, \nDe limiet werd bereikt voor het aantal inschrijvingen per dag. \nVereniging: ' + organization.id + ' (' + organization.name + ')' + '\n\n' + e.message + '\n\nStamhoofd',
|
|
@@ -135,6 +129,7 @@ export class RegisterMembersEndpoint extends Endpoint<Params, Query, Body, Respo
|
|
|
135
129
|
|
|
136
130
|
// Validate balance items (can only happen serverside)
|
|
137
131
|
const balanceItemIds = request.body.cart.balanceItems.map(i => i.item.id);
|
|
132
|
+
console.log('cart ids', balanceItemIds);
|
|
138
133
|
let memberBalanceItemsStructs: BalanceItemStruct[] = [];
|
|
139
134
|
let balanceItemsModels: BalanceItem[] = [];
|
|
140
135
|
if (balanceItemIds.length > 0) {
|
|
@@ -154,8 +149,7 @@ export class RegisterMembersEndpoint extends Endpoint<Params, Query, Body, Respo
|
|
|
154
149
|
[...request.body.memberIds, ...deleteRegistrationModels.map(i => i.memberId), ...balanceItemsModels.map(i => i.memberId).filter(m => m !== null)],
|
|
155
150
|
);
|
|
156
151
|
members = await Member.getBlobByIds(...memberIds);
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
152
|
+
} else {
|
|
159
153
|
// Load the user family (required to correctly calculate discounts across family members)
|
|
160
154
|
members = await Member.getMembersWithRegistrationForUser(user);
|
|
161
155
|
}
|
|
@@ -194,8 +188,7 @@ export class RegisterMembersEndpoint extends Endpoint<Params, Query, Body, Respo
|
|
|
194
188
|
|
|
195
189
|
try {
|
|
196
190
|
isUpdated = await updateMemberDetailsUitpasNumber(member.details);
|
|
197
|
-
}
|
|
198
|
-
catch (e) {
|
|
191
|
+
} catch (e) {
|
|
199
192
|
// catch all errors
|
|
200
193
|
}
|
|
201
194
|
|
|
@@ -250,8 +243,7 @@ export class RegisterMembersEndpoint extends Endpoint<Params, Query, Body, Respo
|
|
|
250
243
|
});
|
|
251
244
|
}
|
|
252
245
|
}
|
|
253
|
-
}
|
|
254
|
-
else {
|
|
246
|
+
} else {
|
|
255
247
|
const blob = await AuthenticatedStructures.membersBlob(members, true);
|
|
256
248
|
const family = PlatformFamily.create(blob, {
|
|
257
249
|
platform: await Platform.getSharedStruct(),
|
|
@@ -295,8 +287,7 @@ export class RegisterMembersEndpoint extends Endpoint<Params, Query, Body, Respo
|
|
|
295
287
|
// Safe and important to ignore: we are only updating the outstanding amounts
|
|
296
288
|
// If we would throw here, that could leak personal data (e.g. that the user uses financial support)
|
|
297
289
|
request.body.totalPrice = totalPrice;
|
|
298
|
-
}
|
|
299
|
-
else {
|
|
290
|
+
} else {
|
|
300
291
|
// when whoWillPay = organization/member, we should throw or the payment amount could be different / incorrect.
|
|
301
292
|
// This never leaks information because in this case the user already has full access to the organization (asOrganizationId) or the member
|
|
302
293
|
throw new SimpleError({
|
|
@@ -419,8 +410,7 @@ export class RegisterMembersEndpoint extends Endpoint<Params, Query, Body, Respo
|
|
|
419
410
|
|
|
420
411
|
if (checkout.isAdminFromSameOrganization) {
|
|
421
412
|
registration.sendConfirmationEmail = checkout.sendConfirmationEmail;
|
|
422
|
-
}
|
|
423
|
-
else {
|
|
413
|
+
} else {
|
|
424
414
|
registration.sendConfirmationEmail = true;
|
|
425
415
|
if (checkout.asOrganizationId) {
|
|
426
416
|
// use group default
|
|
@@ -550,8 +540,7 @@ export class RegisterMembersEndpoint extends Endpoint<Params, Query, Body, Respo
|
|
|
550
540
|
if (registration.payingOrganizationId) {
|
|
551
541
|
// We no longer also charge the member. This has been removed, ref STA-288
|
|
552
542
|
balanceItem.payingOrganizationId = registration.payingOrganizationId;
|
|
553
|
-
}
|
|
554
|
-
else {
|
|
543
|
+
} else {
|
|
555
544
|
balanceItem.memberId = registration.memberId;
|
|
556
545
|
|
|
557
546
|
if (!checkout.asOrganizationId) {
|
|
@@ -782,8 +771,7 @@ export class RegisterMembersEndpoint extends Endpoint<Params, Query, Body, Respo
|
|
|
782
771
|
|
|
783
772
|
if (request.body.asOrganizationId) {
|
|
784
773
|
balanceItem.payingOrganizationId = request.body.asOrganizationId;
|
|
785
|
-
}
|
|
786
|
-
else {
|
|
774
|
+
} else {
|
|
787
775
|
balanceItem.userId = user.id;
|
|
788
776
|
|
|
789
777
|
// Connect this to the oldest member
|
|
@@ -832,6 +820,21 @@ export class RegisterMembersEndpoint extends Endpoint<Params, Query, Body, Respo
|
|
|
832
820
|
createdBalanceItems.push(balanceItem);
|
|
833
821
|
}
|
|
834
822
|
|
|
823
|
+
// Apply discounts
|
|
824
|
+
// Automatically add discounts
|
|
825
|
+
/* const { price: totalPriceBefore, roundingAmount: roundingAmountBefore } = PaymentService.calculateTotalPrice({
|
|
826
|
+
balanceItems: mappedBalanceItems,
|
|
827
|
+
organization
|
|
828
|
+
})
|
|
829
|
+
|
|
830
|
+
await BalanceItemService.applyDiscountsToCheckout({
|
|
831
|
+
totalPrice: totalPriceBefore - roundingAmountBefore,
|
|
832
|
+
balanceItems: mappedBalanceItems,
|
|
833
|
+
sellingOrganizationId: organization.id,
|
|
834
|
+
payingOrganizationId: payingOrganization?.id,
|
|
835
|
+
payingUserId: user?.id
|
|
836
|
+
}); */
|
|
837
|
+
|
|
835
838
|
try {
|
|
836
839
|
const response = await PaymentService.createPayment({
|
|
837
840
|
balanceItems: mappedBalanceItems,
|
|
@@ -844,7 +847,7 @@ export class RegisterMembersEndpoint extends Endpoint<Params, Query, Body, Respo
|
|
|
844
847
|
createMandate: null,
|
|
845
848
|
useMandate: null,
|
|
846
849
|
paymentConfiguration: organization.meta.registrationPaymentConfiguration,
|
|
847
|
-
privatePaymentConfiguration: organization.privateMeta.registrationPaymentConfiguration
|
|
850
|
+
privatePaymentConfiguration: organization.privateMeta.registrationPaymentConfiguration,
|
|
848
851
|
});
|
|
849
852
|
|
|
850
853
|
if (response) {
|
|
@@ -852,13 +855,11 @@ export class RegisterMembersEndpoint extends Endpoint<Params, Query, Body, Respo
|
|
|
852
855
|
paymentQRCode = response.paymentQRCode;
|
|
853
856
|
payment = response.payment;
|
|
854
857
|
}
|
|
855
|
-
}
|
|
856
|
-
finally {
|
|
858
|
+
} finally {
|
|
857
859
|
// Update cached balance items pending amount (only created balance items, because those are involved in the payment)
|
|
858
860
|
await BalanceItemService.updatePaidAndPending(createdBalanceItems);
|
|
859
861
|
}
|
|
860
|
-
}
|
|
861
|
-
else {
|
|
862
|
+
} else {
|
|
862
863
|
// Mark as paid/valid without creating a payment
|
|
863
864
|
for (const balanceItem of markValidList) {
|
|
864
865
|
await BalanceItemService.markPaid(balanceItem, null, organization);
|
|
@@ -884,7 +885,7 @@ export class RegisterMembersEndpoint extends Endpoint<Params, Query, Body, Respo
|
|
|
884
885
|
await Member.loadRegistrations(members, true);
|
|
885
886
|
|
|
886
887
|
return new Response(RegisterResponse.create({
|
|
887
|
-
payment: payment ?
|
|
888
|
+
payment: payment ? await AuthenticatedStructures.paymentGeneral(payment, true) : null,
|
|
888
889
|
members: await AuthenticatedStructures.membersBlob(members),
|
|
889
890
|
registrations: registrations.map(r => Member.getRegistrationWithTinyMemberStructure(r)),
|
|
890
891
|
paymentUrl,
|
package/src/endpoints/global/registration-invitations/GetRegistrationInvitationsCountEndpoint.ts
CHANGED
|
@@ -30,7 +30,7 @@ export class GetRegistrationInvitationsCountEndpoint extends Endpoint<Params, Qu
|
|
|
30
30
|
async handle(request: DecodedRequest<Params, Query, Body>) {
|
|
31
31
|
await Context.setOptionalOrganizationScope();
|
|
32
32
|
await Context.authenticate();
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
const query = await GetRegistrationInvitationsEndpoint.buildQuery(request.query);
|
|
35
35
|
|
|
36
36
|
const count = await query
|
package/src/endpoints/global/registration-invitations/GetRegistrationInvitationsEndpoint.test.ts
CHANGED
|
@@ -30,7 +30,7 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
30
30
|
},
|
|
31
31
|
});
|
|
32
32
|
|
|
33
|
-
return testServer.test<PaginatedResponse<RegistrationInvitationStruct[], LimitedFilteredRequest>>(endpoint, request)
|
|
33
|
+
return testServer.test<PaginatedResponse<RegistrationInvitationStruct[], LimitedFilteredRequest>>(endpoint, request);
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
afterEach(async () => {
|
|
@@ -46,7 +46,7 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
46
46
|
const group2 = await new GroupFactory({ organization, name: new TranslatedString(groupName) }).create();
|
|
47
47
|
|
|
48
48
|
const resources = new Map();
|
|
49
|
-
|
|
49
|
+
|
|
50
50
|
resources.set(
|
|
51
51
|
PermissionsResourceType.Groups, new Map([[
|
|
52
52
|
group.id,
|
|
@@ -55,31 +55,31 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
55
55
|
}),
|
|
56
56
|
]]),
|
|
57
57
|
);
|
|
58
|
-
|
|
58
|
+
|
|
59
59
|
const user = await new UserFactory({
|
|
60
60
|
organization,
|
|
61
61
|
permissions: Permissions.create({
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
level: PermissionLevel.None,
|
|
63
|
+
resources,
|
|
64
|
+
}),
|
|
65
65
|
}).create();
|
|
66
66
|
|
|
67
67
|
const member = await new MemberFactory({
|
|
68
68
|
organization, user,
|
|
69
69
|
firstName: 'John',
|
|
70
70
|
lastName: 'Doe',
|
|
71
|
-
birthDay: {year: 1994, month: 6, day: 24}
|
|
71
|
+
birthDay: { year: 1994, month: 6, day: 24 },
|
|
72
72
|
}).create();
|
|
73
73
|
|
|
74
74
|
const member2 = await new MemberFactory({
|
|
75
75
|
organization, user,
|
|
76
76
|
firstName: 'Test1',
|
|
77
77
|
lastName: 'Test1',
|
|
78
|
-
birthDay: {year: 1998, month: 3, day: 1}
|
|
78
|
+
birthDay: { year: 1998, month: 3, day: 1 },
|
|
79
79
|
}).create();
|
|
80
80
|
|
|
81
81
|
// invitations for group
|
|
82
|
-
await new RegistrationInvitationFactory({ group, member, organization
|
|
82
|
+
await new RegistrationInvitationFactory({ group, member, organization }).create();
|
|
83
83
|
await new RegistrationInvitationFactory({ group, member: member2, organization }).create();
|
|
84
84
|
|
|
85
85
|
// invitations for other group
|
|
@@ -94,7 +94,7 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
94
94
|
// assert
|
|
95
95
|
expect(response.status).toBe(200);
|
|
96
96
|
expect(response.body.results).toHaveLength(2);
|
|
97
|
-
expect(response.body.results.map(
|
|
97
|
+
expect(response.body.results.map(r => r.id)).not.toContain(invitationForOtherGroup.id);
|
|
98
98
|
});
|
|
99
99
|
|
|
100
100
|
test('cannot read invitations for other group', async () => {
|
|
@@ -104,7 +104,7 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
104
104
|
const group2 = await new GroupFactory({ organization, name: new TranslatedString(groupName) }).create();
|
|
105
105
|
|
|
106
106
|
const resources = new Map();
|
|
107
|
-
|
|
107
|
+
|
|
108
108
|
resources.set(
|
|
109
109
|
PermissionsResourceType.Groups, new Map([[
|
|
110
110
|
group.id,
|
|
@@ -113,31 +113,31 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
113
113
|
}),
|
|
114
114
|
]]),
|
|
115
115
|
);
|
|
116
|
-
|
|
116
|
+
|
|
117
117
|
const user = await new UserFactory({
|
|
118
118
|
organization,
|
|
119
119
|
permissions: Permissions.create({
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
120
|
+
level: PermissionLevel.None,
|
|
121
|
+
resources,
|
|
122
|
+
}),
|
|
123
123
|
}).create();
|
|
124
124
|
|
|
125
125
|
const member = await new MemberFactory({
|
|
126
126
|
organization, user,
|
|
127
127
|
firstName: 'John',
|
|
128
128
|
lastName: 'Doe',
|
|
129
|
-
birthDay: {year: 1994, month: 6, day: 24}
|
|
129
|
+
birthDay: { year: 1994, month: 6, day: 24 },
|
|
130
130
|
}).create();
|
|
131
131
|
|
|
132
132
|
const member2 = await new MemberFactory({
|
|
133
133
|
organization, user,
|
|
134
134
|
firstName: 'Test1',
|
|
135
135
|
lastName: 'Test1',
|
|
136
|
-
birthDay: {year: 1998, month: 3, day: 1}
|
|
136
|
+
birthDay: { year: 1998, month: 3, day: 1 },
|
|
137
137
|
}).create();
|
|
138
138
|
|
|
139
139
|
// invitations for group
|
|
140
|
-
await new RegistrationInvitationFactory({ group, member, organization
|
|
140
|
+
await new RegistrationInvitationFactory({ group, member, organization }).create();
|
|
141
141
|
await new RegistrationInvitationFactory({ group, member: member2, organization }).create();
|
|
142
142
|
|
|
143
143
|
// invitations for other group
|
|
@@ -146,7 +146,7 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
146
146
|
// assert
|
|
147
147
|
await expect(getInvitations({
|
|
148
148
|
filter: {
|
|
149
|
-
groupId: group2.id
|
|
149
|
+
groupId: group2.id,
|
|
150
150
|
},
|
|
151
151
|
organization,
|
|
152
152
|
user,
|
|
@@ -160,7 +160,7 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
160
160
|
const groupName = 'test groep';
|
|
161
161
|
const group = await new GroupFactory({ organization, name: new TranslatedString(groupName) }).create();
|
|
162
162
|
const group2 = await new GroupFactory({ organization, name: new TranslatedString(groupName) }).create();
|
|
163
|
-
|
|
163
|
+
|
|
164
164
|
const user = await new UserFactory({
|
|
165
165
|
organization,
|
|
166
166
|
permissions: Permissions.create({ level: PermissionLevel.Read }),
|
|
@@ -170,21 +170,21 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
170
170
|
organization, user,
|
|
171
171
|
firstName: 'John',
|
|
172
172
|
lastName: 'Doe',
|
|
173
|
-
birthDay: {year: 1994, month: 6, day: 24}
|
|
173
|
+
birthDay: { year: 1994, month: 6, day: 24 },
|
|
174
174
|
}).create();
|
|
175
175
|
|
|
176
176
|
const member2 = await new MemberFactory({
|
|
177
177
|
organization, user,
|
|
178
178
|
firstName: 'Test1',
|
|
179
179
|
lastName: 'Test1',
|
|
180
|
-
birthDay: {year: 1998, month: 3, day: 1}
|
|
180
|
+
birthDay: { year: 1998, month: 3, day: 1 },
|
|
181
181
|
}).create();
|
|
182
182
|
|
|
183
183
|
const organization2 = await new OrganizationFactory({}).create();
|
|
184
184
|
const groupOfOtherOrganization = await new GroupFactory({ organization: organization2 }).create();
|
|
185
185
|
|
|
186
186
|
// invitations for group
|
|
187
|
-
await new RegistrationInvitationFactory({ group, member, organization
|
|
187
|
+
await new RegistrationInvitationFactory({ group, member, organization }).create();
|
|
188
188
|
await new RegistrationInvitationFactory({ group, member: member2, organization }).create();
|
|
189
189
|
|
|
190
190
|
// invitations for other group
|
|
@@ -194,7 +194,7 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
194
194
|
const invitationForOtherOrganization = await new RegistrationInvitationFactory({
|
|
195
195
|
group: groupOfOtherOrganization,
|
|
196
196
|
member,
|
|
197
|
-
organization: organization2
|
|
197
|
+
organization: organization2,
|
|
198
198
|
}).create();
|
|
199
199
|
|
|
200
200
|
const response = await getInvitations({
|
|
@@ -207,15 +207,15 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
207
207
|
expect(response.status).toBe(200);
|
|
208
208
|
// should only include registrations for organization of user
|
|
209
209
|
expect(response.body.results).toHaveLength(3);
|
|
210
|
-
expect(response.body.results.map(
|
|
210
|
+
expect(response.body.results.map(r => r.id)).not.toContain(invitationForOtherOrganization.id);
|
|
211
211
|
});
|
|
212
212
|
|
|
213
213
|
test('cannot read invitations for other organization', async () => {
|
|
214
|
-
|
|
214
|
+
const organization = await new OrganizationFactory({}).create();
|
|
215
215
|
const groupName = 'test groep';
|
|
216
216
|
const group = await new GroupFactory({ organization, name: new TranslatedString(groupName) }).create();
|
|
217
217
|
const group2 = await new GroupFactory({ organization, name: new TranslatedString(groupName) }).create();
|
|
218
|
-
|
|
218
|
+
|
|
219
219
|
const user = await new UserFactory({
|
|
220
220
|
organization,
|
|
221
221
|
permissions: Permissions.create({ level: PermissionLevel.Read }),
|
|
@@ -225,21 +225,21 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
225
225
|
organization, user,
|
|
226
226
|
firstName: 'John',
|
|
227
227
|
lastName: 'Doe',
|
|
228
|
-
birthDay: {year: 1994, month: 6, day: 24}
|
|
228
|
+
birthDay: { year: 1994, month: 6, day: 24 },
|
|
229
229
|
}).create();
|
|
230
230
|
|
|
231
231
|
const member2 = await new MemberFactory({
|
|
232
232
|
organization, user,
|
|
233
233
|
firstName: 'Test1',
|
|
234
234
|
lastName: 'Test1',
|
|
235
|
-
birthDay: {year: 1998, month: 3, day: 1}
|
|
235
|
+
birthDay: { year: 1998, month: 3, day: 1 },
|
|
236
236
|
}).create();
|
|
237
237
|
|
|
238
238
|
const organization2 = await new OrganizationFactory({}).create();
|
|
239
239
|
const groupOfOtherOrganization = await new GroupFactory({ organization: organization2 }).create();
|
|
240
240
|
|
|
241
241
|
// invitations for group
|
|
242
|
-
await new RegistrationInvitationFactory({ group, member, organization
|
|
242
|
+
await new RegistrationInvitationFactory({ group, member, organization }).create();
|
|
243
243
|
await new RegistrationInvitationFactory({ group, member: member2, organization }).create();
|
|
244
244
|
|
|
245
245
|
// invitations for other group
|
|
@@ -249,12 +249,12 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
249
249
|
await new RegistrationInvitationFactory({
|
|
250
250
|
group: groupOfOtherOrganization,
|
|
251
251
|
member,
|
|
252
|
-
organization: organization2
|
|
252
|
+
organization: organization2,
|
|
253
253
|
}).create();
|
|
254
254
|
|
|
255
255
|
const response = await getInvitations({
|
|
256
256
|
filter: {
|
|
257
|
-
organizationId: organization2.id
|
|
257
|
+
organizationId: organization2.id,
|
|
258
258
|
},
|
|
259
259
|
organization,
|
|
260
260
|
user,
|
|
@@ -270,13 +270,13 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
270
270
|
beforeEach(async () => {
|
|
271
271
|
TestUtils.setEnvironment('userMode', 'platform');
|
|
272
272
|
});
|
|
273
|
-
|
|
273
|
+
|
|
274
274
|
test('can read all invitations for read access for platform', async () => {
|
|
275
275
|
const organization = await new OrganizationFactory({}).create();
|
|
276
276
|
const groupName = 'test groep';
|
|
277
277
|
const group = await new GroupFactory({ organization, name: new TranslatedString(groupName) }).create();
|
|
278
278
|
const group2 = await new GroupFactory({ organization, name: new TranslatedString(groupName) }).create();
|
|
279
|
-
|
|
279
|
+
|
|
280
280
|
const user = await new UserFactory({
|
|
281
281
|
globalPermissions: Permissions.create({ level: PermissionLevel.Read }),
|
|
282
282
|
}).create();
|
|
@@ -285,21 +285,21 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
285
285
|
organization, user,
|
|
286
286
|
firstName: 'John',
|
|
287
287
|
lastName: 'Doe',
|
|
288
|
-
birthDay: {year: 1994, month: 6, day: 24}
|
|
288
|
+
birthDay: { year: 1994, month: 6, day: 24 },
|
|
289
289
|
}).create();
|
|
290
290
|
|
|
291
291
|
const member2 = await new MemberFactory({
|
|
292
292
|
organization, user,
|
|
293
293
|
firstName: 'Test1',
|
|
294
294
|
lastName: 'Test1',
|
|
295
|
-
birthDay: {year: 1998, month: 3, day: 1}
|
|
295
|
+
birthDay: { year: 1998, month: 3, day: 1 },
|
|
296
296
|
}).create();
|
|
297
297
|
|
|
298
298
|
const organization2 = await new OrganizationFactory({}).create();
|
|
299
299
|
const groupOfOtherOrganization = await new GroupFactory({ organization: organization2 }).create();
|
|
300
300
|
|
|
301
301
|
// invitations for group
|
|
302
|
-
await new RegistrationInvitationFactory({ group, member, organization
|
|
302
|
+
await new RegistrationInvitationFactory({ group, member, organization }).create();
|
|
303
303
|
await new RegistrationInvitationFactory({ group, member: member2, organization }).create();
|
|
304
304
|
|
|
305
305
|
// invitations for other group
|
|
@@ -309,7 +309,7 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
309
309
|
const invitationForOtherOrganization = await new RegistrationInvitationFactory({
|
|
310
310
|
group: groupOfOtherOrganization,
|
|
311
311
|
member,
|
|
312
|
-
organization: organization2
|
|
312
|
+
organization: organization2,
|
|
313
313
|
}).create();
|
|
314
314
|
|
|
315
315
|
const response = await getInvitations({
|
|
@@ -322,7 +322,7 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
322
322
|
expect(response.status).toBe(200);
|
|
323
323
|
// should only include registrations for organization of user
|
|
324
324
|
expect(response.body.results).toHaveLength(4);
|
|
325
|
-
expect(response.body.results.map(
|
|
325
|
+
expect(response.body.results.map(r => r.id)).toContain(invitationForOtherOrganization.id);
|
|
326
326
|
});
|
|
327
327
|
|
|
328
328
|
test('can only read invitations for group with tag if only access to groups with tags', async () => {
|
|
@@ -335,7 +335,7 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
335
335
|
|
|
336
336
|
organization1.periodId = period.id;
|
|
337
337
|
await organization1.save();
|
|
338
|
-
|
|
338
|
+
|
|
339
339
|
const groupName = 'test groep';
|
|
340
340
|
const group = await new GroupFactory({ organization: organization1, name: new TranslatedString(groupName), period }).create();
|
|
341
341
|
const group2 = await new GroupFactory({ organization: organization1, name: new TranslatedString(groupName), period }).create();
|
|
@@ -353,34 +353,34 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
353
353
|
}),
|
|
354
354
|
]]),
|
|
355
355
|
);
|
|
356
|
-
|
|
356
|
+
|
|
357
357
|
const user = await new UserFactory({
|
|
358
358
|
globalPermissions: Permissions.create({
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
359
|
+
level: PermissionLevel.None,
|
|
360
|
+
roles: [],
|
|
361
|
+
resources,
|
|
362
|
+
}),
|
|
363
363
|
}).create();
|
|
364
364
|
|
|
365
365
|
const member = await new MemberFactory({
|
|
366
366
|
organization: organization1, user,
|
|
367
367
|
firstName: 'John',
|
|
368
368
|
lastName: 'Doe',
|
|
369
|
-
birthDay: {year: 1994, month: 6, day: 24}
|
|
369
|
+
birthDay: { year: 1994, month: 6, day: 24 },
|
|
370
370
|
}).create();
|
|
371
371
|
|
|
372
372
|
const member2 = await new MemberFactory({
|
|
373
373
|
organization: organization1, user,
|
|
374
374
|
firstName: 'Test1',
|
|
375
375
|
lastName: 'Test1',
|
|
376
|
-
birthDay: {year: 1998, month: 3, day: 1}
|
|
376
|
+
birthDay: { year: 1998, month: 3, day: 1 },
|
|
377
377
|
}).create();
|
|
378
378
|
|
|
379
|
-
const organization2 = await new OrganizationFactory({tags: [tag], period}).create();
|
|
379
|
+
const organization2 = await new OrganizationFactory({ tags: [tag], period }).create();
|
|
380
380
|
const groupOfOtherOrganization = await new GroupFactory({ organization: organization2, period }).create();
|
|
381
381
|
|
|
382
382
|
// invitations for group
|
|
383
|
-
await new RegistrationInvitationFactory({ group, member, organization: organization1
|
|
383
|
+
await new RegistrationInvitationFactory({ group, member, organization: organization1 }).create();
|
|
384
384
|
await new RegistrationInvitationFactory({ group, member: member2, organization: organization1 }).create();
|
|
385
385
|
|
|
386
386
|
// invitations for other group
|
|
@@ -390,7 +390,7 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
390
390
|
const invitationForOtherOrganization = await new RegistrationInvitationFactory({
|
|
391
391
|
group: groupOfOtherOrganization,
|
|
392
392
|
member,
|
|
393
|
-
organization: organization2
|
|
393
|
+
organization: organization2,
|
|
394
394
|
}).create();
|
|
395
395
|
|
|
396
396
|
const response = await getInvitations({
|
|
@@ -404,7 +404,7 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
404
404
|
expect(response.status).toBe(200);
|
|
405
405
|
// should only include registrations for organization of user
|
|
406
406
|
expect(response.body.results).toHaveLength(1);
|
|
407
|
-
expect(response.body.results.map(
|
|
407
|
+
expect(response.body.results.map(r => r.id)).toContain(invitationForOtherOrganization.id);
|
|
408
408
|
|
|
409
409
|
// should not have access to all invitations of organization1
|
|
410
410
|
await expect(getInvitations({
|
|
@@ -425,7 +425,7 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
425
425
|
|
|
426
426
|
organization.periodId = period.id;
|
|
427
427
|
await organization.save();
|
|
428
|
-
|
|
428
|
+
|
|
429
429
|
const groupName = 'test groep';
|
|
430
430
|
const group = await new GroupFactory({ organization, name: new TranslatedString(groupName), period }).create();
|
|
431
431
|
const group2 = await new GroupFactory({ organization, name: new TranslatedString(groupName), period }).create();
|
|
@@ -443,34 +443,34 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
443
443
|
}),
|
|
444
444
|
]]),
|
|
445
445
|
);
|
|
446
|
-
|
|
446
|
+
|
|
447
447
|
const user = await new UserFactory({
|
|
448
448
|
globalPermissions: Permissions.create({
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
449
|
+
level: PermissionLevel.None,
|
|
450
|
+
roles: [],
|
|
451
|
+
resources,
|
|
452
|
+
}),
|
|
453
453
|
}).create();
|
|
454
454
|
|
|
455
455
|
const member = await new MemberFactory({
|
|
456
456
|
organization, user,
|
|
457
457
|
firstName: 'John',
|
|
458
458
|
lastName: 'Doe',
|
|
459
|
-
birthDay: {year: 1994, month: 6, day: 24}
|
|
459
|
+
birthDay: { year: 1994, month: 6, day: 24 },
|
|
460
460
|
}).create();
|
|
461
461
|
|
|
462
462
|
const member2 = await new MemberFactory({
|
|
463
463
|
organization, user,
|
|
464
464
|
firstName: 'Test1',
|
|
465
465
|
lastName: 'Test1',
|
|
466
|
-
birthDay: {year: 1998, month: 3, day: 1}
|
|
466
|
+
birthDay: { year: 1998, month: 3, day: 1 },
|
|
467
467
|
}).create();
|
|
468
468
|
|
|
469
|
-
const organization2 = await new OrganizationFactory({tags: [tag], period}).create();
|
|
469
|
+
const organization2 = await new OrganizationFactory({ tags: [tag], period }).create();
|
|
470
470
|
const groupOfOtherOrganization = await new GroupFactory({ organization: organization2, period }).create();
|
|
471
471
|
|
|
472
472
|
// invitations for group
|
|
473
|
-
await new RegistrationInvitationFactory({ group, member, organization
|
|
473
|
+
await new RegistrationInvitationFactory({ group, member, organization }).create();
|
|
474
474
|
await new RegistrationInvitationFactory({ group, member: member2, organization }).create();
|
|
475
475
|
|
|
476
476
|
// invitations for other group
|
|
@@ -480,7 +480,7 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
480
480
|
await new RegistrationInvitationFactory({
|
|
481
481
|
group: groupOfOtherOrganization,
|
|
482
482
|
member,
|
|
483
|
-
organization: organization2
|
|
483
|
+
organization: organization2,
|
|
484
484
|
}).create();
|
|
485
485
|
|
|
486
486
|
await expect(getInvitations({
|
|
@@ -491,5 +491,4 @@ describe('Endpoint.GetRegistrationInvitationsEndpoint', () => {
|
|
|
491
491
|
});
|
|
492
492
|
});
|
|
493
493
|
});
|
|
494
|
-
|
|
495
494
|
});
|
|
@@ -56,11 +56,11 @@ export class GetRegistrationInvitationsEndpoint extends Endpoint<Params, Query,
|
|
|
56
56
|
const platform = await Platform.getShared();
|
|
57
57
|
|
|
58
58
|
// Add organization scope filter
|
|
59
|
-
scopeFilter = {
|
|
59
|
+
scopeFilter = {
|
|
60
60
|
group: {
|
|
61
61
|
$elemMatch: {
|
|
62
62
|
periodId: platform.periodIdIfPlatform,
|
|
63
|
-
}
|
|
63
|
+
},
|
|
64
64
|
},
|
|
65
65
|
organization: {
|
|
66
66
|
$elemMatch: {
|
|
@@ -82,20 +82,18 @@ export class GetRegistrationInvitationsEndpoint extends Endpoint<Params, Query,
|
|
|
82
82
|
scopeFilter = {
|
|
83
83
|
organizationId: organization.id,
|
|
84
84
|
};
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
85
|
+
} else {
|
|
87
86
|
// Can only access current period
|
|
88
87
|
scopeFilter = {
|
|
89
88
|
organizationId: organization.id,
|
|
90
89
|
group: {
|
|
91
90
|
$elemMatch: {
|
|
92
91
|
periodId: organization.periodId,
|
|
93
|
-
}
|
|
92
|
+
},
|
|
94
93
|
},
|
|
95
94
|
};
|
|
96
95
|
}
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
96
|
+
} else {
|
|
99
97
|
const groups = await Group.getAll(organization.id, organization.periodId, true, [GroupType.Membership, GroupType.EventRegistration]);
|
|
100
98
|
Context.auth.cacheGroups(groups);
|
|
101
99
|
const groupIds: string[] = [];
|
|
@@ -163,8 +161,7 @@ export class GetRegistrationInvitationsEndpoint extends Endpoint<Params, Query,
|
|
|
163
161
|
|
|
164
162
|
try {
|
|
165
163
|
data = await query.fetch();
|
|
166
|
-
}
|
|
167
|
-
catch (error) {
|
|
164
|
+
} catch (error) {
|
|
168
165
|
if (error.message.includes('ER_QUERY_TIMEOUT')) {
|
|
169
166
|
throw new SimpleError({
|
|
170
167
|
code: 'timeout',
|