@stamhoofd/backend 2.114.1 → 2.115.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.
- package/index.ts +1 -0
- package/package.json +11 -10
- package/src/boot.ts +31 -20
- package/src/email-recipient-loaders/documents.ts +1 -14
- package/src/email-recipient-loaders/payments.ts +344 -49
- package/src/email-recipient-loaders/receivable-balances.ts +2 -11
- package/src/endpoints/global/email/CreateEmailEndpoint.ts +1 -1
- package/src/endpoints/global/members/PatchOrganizationMembersEndpoint.ts +2 -2
- package/src/endpoints/global/registration/PatchUserMembersEndpoint.ts +2 -2
- package/src/endpoints/organization/dashboard/documents/GetDocumentsEndpoint.ts +6 -5
- package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.ts +15 -0
- package/src/endpoints/system/HealthEndpoint.ts +77 -0
- package/src/helpers/email-html-helpers.ts +144 -0
- package/src/seeds/data/default-email-templates.sql +2 -1
- package/src/services/CpuService.ts +123 -0
- package/src/sql-sorters/document-templates.ts +1 -1
- package/src/sql-sorters/documents.ts +1 -1
- package/src/sql-sorters/orders.ts +0 -84
- package/src/sql-sorters/organizations.ts +3 -3
package/index.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stamhoofd/backend",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.115.1",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
"license": "UNLICENCED",
|
|
20
20
|
"scripts": {
|
|
21
21
|
"dev": "wait-on ../../shared/middleware/dist/index.js && concurrently -r 'yarn -s build --watch --preserveWatchOutput' \"yarn -s dev:watch\"",
|
|
22
|
+
"dev:full": "yarn -s dev",
|
|
22
23
|
"dev:watch": "wait-on ./dist/index.js && nodemon --quiet --inspect=5858 --watch dist --watch '../../../shared/*/dist/' --watch '../../shared/*/dist/' --ext .ts,.json,.sql,.js --delay 2000ms --exec 'node --enable-source-maps ./dist/index.js' --signal SIGTERM",
|
|
23
24
|
"dev:backend": "yarn -s dev",
|
|
24
25
|
"build": "rm -rf ./dist/src/migrations && rm -rf ./dist/src/seeds && yarn -s copy-assets && tsc -b",
|
|
@@ -54,14 +55,14 @@
|
|
|
54
55
|
"@simonbackx/simple-encoding": "2.23.1",
|
|
55
56
|
"@simonbackx/simple-endpoints": "1.20.1",
|
|
56
57
|
"@simonbackx/simple-logging": "^1.0.1",
|
|
57
|
-
"@stamhoofd/backend-i18n": "2.
|
|
58
|
-
"@stamhoofd/backend-middleware": "2.
|
|
59
|
-
"@stamhoofd/email": "2.
|
|
60
|
-
"@stamhoofd/models": "2.
|
|
61
|
-
"@stamhoofd/queues": "2.
|
|
62
|
-
"@stamhoofd/sql": "2.
|
|
63
|
-
"@stamhoofd/structures": "2.
|
|
64
|
-
"@stamhoofd/utility": "2.
|
|
58
|
+
"@stamhoofd/backend-i18n": "2.115.1",
|
|
59
|
+
"@stamhoofd/backend-middleware": "2.115.1",
|
|
60
|
+
"@stamhoofd/email": "2.115.1",
|
|
61
|
+
"@stamhoofd/models": "2.115.1",
|
|
62
|
+
"@stamhoofd/queues": "2.115.1",
|
|
63
|
+
"@stamhoofd/sql": "2.115.1",
|
|
64
|
+
"@stamhoofd/structures": "2.115.1",
|
|
65
|
+
"@stamhoofd/utility": "2.115.1",
|
|
65
66
|
"archiver": "^7.0.1",
|
|
66
67
|
"axios": "^1.13.2",
|
|
67
68
|
"cookie": "^0.7.0",
|
|
@@ -79,5 +80,5 @@
|
|
|
79
80
|
"publishConfig": {
|
|
80
81
|
"access": "public"
|
|
81
82
|
},
|
|
82
|
-
"gitHead": "
|
|
83
|
+
"gitHead": "4b692d62820d095e00524e3c0214e8f73a69506e"
|
|
83
84
|
}
|
package/src/boot.ts
CHANGED
|
@@ -10,17 +10,19 @@ import { SimpleError } from '@simonbackx/simple-errors';
|
|
|
10
10
|
import { startCrons, stopCrons, waitForCrons } from '@stamhoofd/crons';
|
|
11
11
|
import { Platform } from '@stamhoofd/models';
|
|
12
12
|
import { QueueHandler } from '@stamhoofd/queues';
|
|
13
|
-
import { resumeEmails } from './helpers/EmailResumer';
|
|
14
|
-
import { GlobalHelper } from './helpers/GlobalHelper';
|
|
15
|
-
import { SetupStepUpdater } from './helpers/SetupStepUpdater';
|
|
16
|
-
import { ContextMiddleware } from './middleware/ContextMiddleware';
|
|
17
|
-
import { AuditLogService } from './services/AuditLogService';
|
|
18
|
-
import { BalanceItemService } from './services/BalanceItemService';
|
|
19
|
-
import { DocumentService } from './services/DocumentService';
|
|
20
|
-
import { FileSignService } from './services/FileSignService';
|
|
21
|
-
import { PlatformMembershipService } from './services/PlatformMembershipService';
|
|
22
|
-
import { UitpasService } from './services/uitpas/UitpasService';
|
|
23
|
-
import { UniqueUserService } from './services/UniqueUserService';
|
|
13
|
+
import { resumeEmails } from './helpers/EmailResumer.js';
|
|
14
|
+
import { GlobalHelper } from './helpers/GlobalHelper.js';
|
|
15
|
+
import { SetupStepUpdater } from './helpers/SetupStepUpdater.js';
|
|
16
|
+
import { ContextMiddleware } from './middleware/ContextMiddleware.js';
|
|
17
|
+
import { AuditLogService } from './services/AuditLogService.js';
|
|
18
|
+
import { BalanceItemService } from './services/BalanceItemService.js';
|
|
19
|
+
import { DocumentService } from './services/DocumentService.js';
|
|
20
|
+
import { FileSignService } from './services/FileSignService.js';
|
|
21
|
+
import { PlatformMembershipService } from './services/PlatformMembershipService.js';
|
|
22
|
+
import { UitpasService } from './services/uitpas/UitpasService.js';
|
|
23
|
+
import { UniqueUserService } from './services/UniqueUserService.js';
|
|
24
|
+
import { CpuService } from './services/CpuService.js';
|
|
25
|
+
import { SQLLogger } from '@stamhoofd/sql';
|
|
24
26
|
|
|
25
27
|
process.on('unhandledRejection', (error: Error) => {
|
|
26
28
|
console.error('unhandledRejection');
|
|
@@ -88,6 +90,7 @@ export const boot = async (options: { killProcess: boolean }) => {
|
|
|
88
90
|
await router.loadAllEndpoints(__dirname + '/endpoints/organization/webshops');
|
|
89
91
|
await router.loadAllEndpoints(__dirname + '/endpoints/organization/shared');
|
|
90
92
|
await router.loadAllEndpoints(__dirname + '/endpoints/organization/shared/*');
|
|
93
|
+
await router.loadAllEndpoints(__dirname + '/endpoints/system');
|
|
91
94
|
|
|
92
95
|
router.endpoints.push(new CORSPreflightEndpoint());
|
|
93
96
|
|
|
@@ -123,16 +126,16 @@ export const boot = async (options: { killProcess: boolean }) => {
|
|
|
123
126
|
productionLog('Loading loaders...');
|
|
124
127
|
|
|
125
128
|
// Register Excel loaders
|
|
126
|
-
await import('./excel-loaders');
|
|
129
|
+
await import('./excel-loaders/index.js');
|
|
127
130
|
|
|
128
131
|
// Register Email Recipient loaders
|
|
129
|
-
await import('./email-recipient-loaders/members');
|
|
130
|
-
await import('./email-recipient-loaders/registrations');
|
|
131
|
-
await import('./email-recipient-loaders/orders');
|
|
132
|
-
await import('./email-recipient-loaders/receivable-balances');
|
|
133
|
-
await import('./excel-loaders/registrations');
|
|
134
|
-
await import('./email-recipient-loaders/documents');
|
|
135
|
-
await import ('./email-recipient-loaders/payments');
|
|
132
|
+
await import('./email-recipient-loaders/members.js');
|
|
133
|
+
await import('./email-recipient-loaders/registrations.js');
|
|
134
|
+
await import('./email-recipient-loaders/orders.js');
|
|
135
|
+
await import('./email-recipient-loaders/receivable-balances.js');
|
|
136
|
+
await import('./excel-loaders/registrations.js');
|
|
137
|
+
await import('./email-recipient-loaders/documents.js');
|
|
138
|
+
await import ('./email-recipient-loaders/payments.js');
|
|
136
139
|
|
|
137
140
|
productionLog('Opening port...');
|
|
138
141
|
routerServer.listen(STAMHOOFD.PORT ?? 9090);
|
|
@@ -142,6 +145,14 @@ export const boot = async (options: { killProcess: boolean }) => {
|
|
|
142
145
|
|
|
143
146
|
resumeEmails().catch(console.error);
|
|
144
147
|
|
|
148
|
+
if (STAMHOOFD.environment !== 'development' && STAMHOOFD.environment !== 'test') {
|
|
149
|
+
CpuService.startMonitoring();
|
|
150
|
+
}
|
|
151
|
+
else if (STAMHOOFD.environment === 'development') {
|
|
152
|
+
SQLLogger.slowQueryThresholdMs = 200;
|
|
153
|
+
SQLLogger.explainAllAndLogInefficient = true;
|
|
154
|
+
}
|
|
155
|
+
|
|
145
156
|
if (routerServer.server) {
|
|
146
157
|
// Default timeout is a bit too short
|
|
147
158
|
routerServer.server.timeout = 61000;
|
|
@@ -235,7 +246,7 @@ export const boot = async (options: { killProcess: boolean }) => {
|
|
|
235
246
|
}
|
|
236
247
|
|
|
237
248
|
// Register crons
|
|
238
|
-
await import('./crons');
|
|
249
|
+
await import('./crons.js');
|
|
239
250
|
|
|
240
251
|
AuditLogService.listen();
|
|
241
252
|
PlatformMembershipService.listen();
|
|
@@ -47,20 +47,7 @@ async function fetch(query: LimitedFilteredRequest) {
|
|
|
47
47
|
async function count(request: LimitedFilteredRequest) {
|
|
48
48
|
const query = await GetDocumentsEndpoint.buildQuery(request);
|
|
49
49
|
const uniqueMemberIds = await query.count(SQL.distinct(SQL.column('memberId')));
|
|
50
|
-
|
|
51
|
-
if (uniqueMemberIds > 100 || uniqueMemberIds === 0) {
|
|
52
|
-
return uniqueMemberIds; // rough estimate
|
|
53
|
-
}
|
|
54
|
-
// do full count
|
|
55
|
-
request.limit = 100;
|
|
56
|
-
let count = 0;
|
|
57
|
-
let req: LimitedFilteredRequest | null = request;
|
|
58
|
-
while (req) {
|
|
59
|
-
const result = await fetch(request);
|
|
60
|
-
count += result.results.length;
|
|
61
|
-
req = result.next ?? null;
|
|
62
|
-
}
|
|
63
|
-
return count;
|
|
50
|
+
return uniqueMemberIds;
|
|
64
51
|
};
|
|
65
52
|
|
|
66
53
|
Email.recipientLoaders.set(EmailRecipientFilterType.Documents, { fetch, count });
|