@stamhoofd/backend 2.114.0 → 2.115.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/index.ts +1 -0
- package/package.json +11 -10
- package/src/boot.ts +30 -19
- package/src/email-recipient-loaders/documents.ts +1 -14
- package/src/email-recipient-loaders/payments.ts +620 -0
- 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-filters/balance-item-payments.ts +5 -0
- package/src/sql-filters/member-responsibility-records.ts +16 -0
- package/src/sql-filters/payments.ts +5 -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/src/{seeds → seeds-temporary}/1769088653-uitpas-status.ts +0 -0
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.0",
|
|
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.0",
|
|
59
|
+
"@stamhoofd/backend-middleware": "2.115.0",
|
|
60
|
+
"@stamhoofd/email": "2.115.0",
|
|
61
|
+
"@stamhoofd/models": "2.115.0",
|
|
62
|
+
"@stamhoofd/queues": "2.115.0",
|
|
63
|
+
"@stamhoofd/sql": "2.115.0",
|
|
64
|
+
"@stamhoofd/structures": "2.115.0",
|
|
65
|
+
"@stamhoofd/utility": "2.115.0",
|
|
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": "b68983abee843a6d4f4460b7818d66a8780587cc"
|
|
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');
|
|
@@ -123,15 +125,16 @@ export const boot = async (options: { killProcess: boolean }) => {
|
|
|
123
125
|
productionLog('Loading loaders...');
|
|
124
126
|
|
|
125
127
|
// Register Excel loaders
|
|
126
|
-
await import('./excel-loaders');
|
|
128
|
+
await import('./excel-loaders/index.js');
|
|
127
129
|
|
|
128
130
|
// 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');
|
|
131
|
+
await import('./email-recipient-loaders/members.js');
|
|
132
|
+
await import('./email-recipient-loaders/registrations.js');
|
|
133
|
+
await import('./email-recipient-loaders/orders.js');
|
|
134
|
+
await import('./email-recipient-loaders/receivable-balances.js');
|
|
135
|
+
await import('./excel-loaders/registrations.js');
|
|
136
|
+
await import('./email-recipient-loaders/documents.js');
|
|
137
|
+
await import ('./email-recipient-loaders/payments.js');
|
|
135
138
|
|
|
136
139
|
productionLog('Opening port...');
|
|
137
140
|
routerServer.listen(STAMHOOFD.PORT ?? 9090);
|
|
@@ -141,6 +144,14 @@ export const boot = async (options: { killProcess: boolean }) => {
|
|
|
141
144
|
|
|
142
145
|
resumeEmails().catch(console.error);
|
|
143
146
|
|
|
147
|
+
if (STAMHOOFD.environment !== 'development' && STAMHOOFD.environment !== 'test') {
|
|
148
|
+
CpuService.startMonitoring();
|
|
149
|
+
}
|
|
150
|
+
else if (STAMHOOFD.environment === 'development') {
|
|
151
|
+
SQLLogger.slowQueryThresholdMs = 200;
|
|
152
|
+
SQLLogger.explainAllAndLogInefficient = true;
|
|
153
|
+
}
|
|
154
|
+
|
|
144
155
|
if (routerServer.server) {
|
|
145
156
|
// Default timeout is a bit too short
|
|
146
157
|
routerServer.server.timeout = 61000;
|
|
@@ -234,7 +245,7 @@ export const boot = async (options: { killProcess: boolean }) => {
|
|
|
234
245
|
}
|
|
235
246
|
|
|
236
247
|
// Register crons
|
|
237
|
-
await import('./crons');
|
|
248
|
+
await import('./crons.js');
|
|
238
249
|
|
|
239
250
|
AuditLogService.listen();
|
|
240
251
|
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 });
|