pp-command-bus 1.0.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/README.md +522 -0
- package/dist/command-bus/command-bus.spec.d.ts +1 -0
- package/dist/command-bus/command-bus.spec.js +398 -0
- package/dist/command-bus/command-bus.spec.js.map +1 -0
- package/dist/command-bus/command.d.ts +24 -0
- package/dist/command-bus/command.js +53 -0
- package/dist/command-bus/command.js.map +1 -0
- package/dist/command-bus/config/command-bus-config.d.ts +40 -0
- package/dist/command-bus/config/command-bus-config.js +59 -0
- package/dist/command-bus/config/command-bus-config.js.map +1 -0
- package/dist/command-bus/config/command-bus-config.spec.d.ts +1 -0
- package/dist/command-bus/config/command-bus-config.spec.js +162 -0
- package/dist/command-bus/config/command-bus-config.spec.js.map +1 -0
- package/dist/command-bus/config/index.d.ts +1 -0
- package/dist/command-bus/config/index.js +9 -0
- package/dist/command-bus/config/index.js.map +1 -0
- package/dist/command-bus/index.d.ts +79 -0
- package/dist/command-bus/index.js +169 -0
- package/dist/command-bus/index.js.map +1 -0
- package/dist/command-bus/job/index.d.ts +6 -0
- package/dist/command-bus/job/index.js +15 -0
- package/dist/command-bus/job/index.js.map +1 -0
- package/dist/command-bus/job/job-options-builder.d.ts +24 -0
- package/dist/command-bus/job/job-options-builder.js +68 -0
- package/dist/command-bus/job/job-options-builder.js.map +1 -0
- package/dist/command-bus/job/job-options-builder.spec.d.ts +1 -0
- package/dist/command-bus/job/job-options-builder.spec.js +163 -0
- package/dist/command-bus/job/job-options-builder.spec.js.map +1 -0
- package/dist/command-bus/job/job-processor.d.ts +33 -0
- package/dist/command-bus/job/job-processor.js +195 -0
- package/dist/command-bus/job/job-processor.js.map +1 -0
- package/dist/command-bus/job/job-processor.spec.d.ts +1 -0
- package/dist/command-bus/job/job-processor.spec.js +352 -0
- package/dist/command-bus/job/job-processor.spec.js.map +1 -0
- package/dist/command-bus/logging/command-logger.d.ts +21 -0
- package/dist/command-bus/logging/command-logger.js +79 -0
- package/dist/command-bus/logging/command-logger.js.map +1 -0
- package/dist/command-bus/logging/command-logger.spec.d.ts +1 -0
- package/dist/command-bus/logging/command-logger.spec.js +245 -0
- package/dist/command-bus/logging/command-logger.spec.js.map +1 -0
- package/dist/command-bus/logging/index.d.ts +5 -0
- package/dist/command-bus/logging/index.js +13 -0
- package/dist/command-bus/logging/index.js.map +1 -0
- package/dist/command-bus/queue/index.d.ts +5 -0
- package/dist/command-bus/queue/index.js +13 -0
- package/dist/command-bus/queue/index.js.map +1 -0
- package/dist/command-bus/queue/queue-manager.d.ts +24 -0
- package/dist/command-bus/queue/queue-manager.js +60 -0
- package/dist/command-bus/queue/queue-manager.js.map +1 -0
- package/dist/command-bus/queue/queue-manager.spec.d.ts +1 -0
- package/dist/command-bus/queue/queue-manager.spec.js +219 -0
- package/dist/command-bus/queue/queue-manager.spec.js.map +1 -0
- package/dist/command-bus/rpc/index.d.ts +5 -0
- package/dist/command-bus/rpc/index.js +13 -0
- package/dist/command-bus/rpc/index.js.map +1 -0
- package/dist/command-bus/rpc/rpc-coordinator.d.ts +45 -0
- package/dist/command-bus/rpc/rpc-coordinator.js +189 -0
- package/dist/command-bus/rpc/rpc-coordinator.js.map +1 -0
- package/dist/command-bus/rpc/rpc-coordinator.spec.d.ts +1 -0
- package/dist/command-bus/rpc/rpc-coordinator.spec.js +286 -0
- package/dist/command-bus/rpc/rpc-coordinator.spec.js.map +1 -0
- package/dist/command-bus/types/index.d.ts +57 -0
- package/dist/command-bus/types/index.js +3 -0
- package/dist/command-bus/types/index.js.map +1 -0
- package/dist/command-bus/worker/index.d.ts +5 -0
- package/dist/command-bus/worker/index.js +13 -0
- package/dist/command-bus/worker/index.js.map +1 -0
- package/dist/command-bus/worker/worker-orchestrator.d.ts +46 -0
- package/dist/command-bus/worker/worker-orchestrator.js +160 -0
- package/dist/command-bus/worker/worker-orchestrator.js.map +1 -0
- package/dist/command-bus/worker/worker-orchestrator.spec.d.ts +1 -0
- package/dist/command-bus/worker/worker-orchestrator.spec.js +293 -0
- package/dist/command-bus/worker/worker-orchestrator.spec.js.map +1 -0
- package/dist/examples/rpc.demo.d.ts +2 -0
- package/dist/examples/rpc.demo.js +235 -0
- package/dist/examples/rpc.demo.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/pp-command-bus-1.0.0.tgz +0 -0
- package/dist/shared/config/base-config.d.ts +43 -0
- package/dist/shared/config/base-config.js +100 -0
- package/dist/shared/config/base-config.js.map +1 -0
- package/dist/shared/config/base-config.spec.d.ts +1 -0
- package/dist/shared/config/base-config.spec.js +118 -0
- package/dist/shared/config/base-config.spec.js.map +1 -0
- package/dist/shared/config/index.d.ts +1 -0
- package/dist/shared/config/index.js +9 -0
- package/dist/shared/config/index.js.map +1 -0
- package/dist/shared/logging/index.d.ts +2 -0
- package/dist/shared/logging/index.js +8 -0
- package/dist/shared/logging/index.js.map +1 -0
- package/dist/shared/logging/log-level.d.ts +36 -0
- package/dist/shared/logging/log-level.js +53 -0
- package/dist/shared/logging/log-level.js.map +1 -0
- package/dist/shared/logging/logger.d.ts +42 -0
- package/dist/shared/logging/logger.js +63 -0
- package/dist/shared/logging/logger.js.map +1 -0
- package/dist/shared/logging/logger.spec.d.ts +1 -0
- package/dist/shared/logging/logger.spec.js +89 -0
- package/dist/shared/logging/logger.spec.js.map +1 -0
- package/dist/shared/types.d.ts +26 -0
- package/dist/shared/types.js +6 -0
- package/dist/shared/types.js.map +1 -0
- package/package.json +93 -0
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const bullmq_1 = require("bullmq");
|
|
16
|
+
const index_1 = __importDefault(require("./index"));
|
|
17
|
+
const command_bus_config_1 = __importDefault(require("./config/command-bus-config"));
|
|
18
|
+
const command_1 = __importDefault(require("./command"));
|
|
19
|
+
// Mock BullMQ
|
|
20
|
+
jest.mock('bullmq');
|
|
21
|
+
// Mock ioredis
|
|
22
|
+
jest.mock('ioredis', () => {
|
|
23
|
+
return {
|
|
24
|
+
Redis: jest.fn().mockImplementation(() => ({
|
|
25
|
+
quit: jest.fn().mockResolvedValue(undefined),
|
|
26
|
+
})),
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
// Przykładowa komenda testowa
|
|
30
|
+
class TestCommand extends command_1.default {
|
|
31
|
+
constructor(data) {
|
|
32
|
+
super();
|
|
33
|
+
this.data = data;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// Inna komenda do testowania
|
|
37
|
+
class AnotherTestCommand extends command_1.default {
|
|
38
|
+
constructor(value) {
|
|
39
|
+
super();
|
|
40
|
+
this.value = value;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Komenda do testowania RPC
|
|
44
|
+
class CalculateCommand extends command_1.default {
|
|
45
|
+
constructor(a, b, operation) {
|
|
46
|
+
super();
|
|
47
|
+
this.a = a;
|
|
48
|
+
this.b = b;
|
|
49
|
+
this.operation = operation;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
describe('CommandBus', () => {
|
|
53
|
+
let commandBus;
|
|
54
|
+
let config;
|
|
55
|
+
let mockQueue;
|
|
56
|
+
let mockWorker;
|
|
57
|
+
beforeEach(() => {
|
|
58
|
+
// Reset wszystkich mocków
|
|
59
|
+
jest.clearAllMocks();
|
|
60
|
+
// Konfiguracja testowa
|
|
61
|
+
config = new command_bus_config_1.default({
|
|
62
|
+
redisUrl: 'redis://localhost:6379',
|
|
63
|
+
concurrency: 5,
|
|
64
|
+
});
|
|
65
|
+
// Mock Queue
|
|
66
|
+
mockQueue = {
|
|
67
|
+
add: jest.fn().mockResolvedValue({ id: 'test-job-id' }),
|
|
68
|
+
close: jest.fn().mockResolvedValue(undefined),
|
|
69
|
+
obliterate: jest.fn().mockResolvedValue(undefined),
|
|
70
|
+
};
|
|
71
|
+
// Mock Worker
|
|
72
|
+
mockWorker = {
|
|
73
|
+
close: jest.fn().mockResolvedValue(undefined),
|
|
74
|
+
on: jest.fn().mockReturnThis(),
|
|
75
|
+
removeAllListeners: jest.fn().mockReturnThis(),
|
|
76
|
+
};
|
|
77
|
+
// Mock konstruktorów
|
|
78
|
+
bullmq_1.Queue.mockImplementation(() => mockQueue);
|
|
79
|
+
bullmq_1.Worker.mockImplementation(() => mockWorker);
|
|
80
|
+
commandBus = new index_1.default(config);
|
|
81
|
+
});
|
|
82
|
+
afterEach(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
83
|
+
// Dodaj timeout aby uniknąć unhandled rejections podczas close()
|
|
84
|
+
try {
|
|
85
|
+
yield commandBus.close();
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
// Ignoruj błędy związane z zamykaniem podczas testów RPC
|
|
89
|
+
if (!(error instanceof Error) || !error.message.includes('CommandBus is closing')) {
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}));
|
|
94
|
+
describe('dispatch', () => {
|
|
95
|
+
it('powinno dodać komendę do kolejki', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
96
|
+
// Given
|
|
97
|
+
const command = new TestCommand('test data');
|
|
98
|
+
// When
|
|
99
|
+
yield commandBus.dispatch(command);
|
|
100
|
+
// Then - sprawdź że Queue został utworzony z Redis connection
|
|
101
|
+
expect(bullmq_1.Queue).toHaveBeenCalledWith('{TestCommand}', expect.objectContaining({
|
|
102
|
+
connection: expect.any(Object),
|
|
103
|
+
}));
|
|
104
|
+
expect(mockQueue.add).toHaveBeenCalledWith('TestCommand', command, expect.objectContaining({
|
|
105
|
+
attempts: 3,
|
|
106
|
+
backoff: expect.objectContaining({
|
|
107
|
+
type: 'exponential',
|
|
108
|
+
delay: 2000,
|
|
109
|
+
}),
|
|
110
|
+
}));
|
|
111
|
+
}));
|
|
112
|
+
it('powinno używać tej samej kolejki dla tego samego typu komendy', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
113
|
+
// Given
|
|
114
|
+
const command1 = new TestCommand('data 1');
|
|
115
|
+
const command2 = new TestCommand('data 2');
|
|
116
|
+
// When
|
|
117
|
+
yield commandBus.dispatch(command1);
|
|
118
|
+
yield commandBus.dispatch(command2);
|
|
119
|
+
// Then
|
|
120
|
+
// Obie komendy powinny zostać dodane do tej samej kolejki
|
|
121
|
+
expect(mockQueue.add).toHaveBeenCalledTimes(2);
|
|
122
|
+
expect(mockQueue.add).toHaveBeenNthCalledWith(1, expect.any(String), expect.objectContaining({
|
|
123
|
+
__name: 'TestCommand',
|
|
124
|
+
data: 'data 1',
|
|
125
|
+
}), expect.any(Object));
|
|
126
|
+
expect(mockQueue.add).toHaveBeenNthCalledWith(2, expect.any(String), expect.objectContaining({
|
|
127
|
+
__name: 'TestCommand',
|
|
128
|
+
data: 'data 2',
|
|
129
|
+
}), expect.any(Object));
|
|
130
|
+
}));
|
|
131
|
+
it('powinno tworzyć osobne kolejki dla różnych typów komend', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
132
|
+
// Given
|
|
133
|
+
const testCommand = new TestCommand('test');
|
|
134
|
+
const anotherCommand = new AnotherTestCommand(42);
|
|
135
|
+
// When
|
|
136
|
+
yield commandBus.dispatch(testCommand);
|
|
137
|
+
yield commandBus.dispatch(anotherCommand);
|
|
138
|
+
// Then
|
|
139
|
+
// Obie komendy powinny zostać dodane (każda do swojej kolejki)
|
|
140
|
+
expect(mockQueue.add).toHaveBeenCalledTimes(2);
|
|
141
|
+
expect(mockQueue.add).toHaveBeenNthCalledWith(1, expect.any(String), expect.objectContaining({
|
|
142
|
+
__name: 'TestCommand',
|
|
143
|
+
data: 'test',
|
|
144
|
+
}), expect.any(Object));
|
|
145
|
+
expect(mockQueue.add).toHaveBeenNthCalledWith(2, expect.any(String), expect.objectContaining({
|
|
146
|
+
__name: 'AnotherTestCommand',
|
|
147
|
+
value: 42,
|
|
148
|
+
}), expect.any(Object));
|
|
149
|
+
}));
|
|
150
|
+
});
|
|
151
|
+
describe('handle', () => {
|
|
152
|
+
it('powinno utworzyć workera dla komendy', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
153
|
+
// Given
|
|
154
|
+
const handler = jest.fn();
|
|
155
|
+
// When
|
|
156
|
+
yield commandBus.handle(TestCommand, handler);
|
|
157
|
+
// Then
|
|
158
|
+
expect(bullmq_1.Worker).toHaveBeenCalledWith('{TestCommand}', expect.any(Function), expect.objectContaining({
|
|
159
|
+
connection: expect.any(Object),
|
|
160
|
+
concurrency: 5,
|
|
161
|
+
}));
|
|
162
|
+
}));
|
|
163
|
+
it('powinno przetworzyć komendę przez handler', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
164
|
+
// Given
|
|
165
|
+
const handler = jest.fn().mockResolvedValue(undefined);
|
|
166
|
+
const command = new TestCommand('test data');
|
|
167
|
+
let workerProcessor;
|
|
168
|
+
bullmq_1.Worker.mockImplementation((_name, processor) => {
|
|
169
|
+
workerProcessor = processor;
|
|
170
|
+
return mockWorker;
|
|
171
|
+
});
|
|
172
|
+
// When
|
|
173
|
+
yield commandBus.handle(TestCommand, handler);
|
|
174
|
+
// Symulacja przetworzenia zadania
|
|
175
|
+
yield workerProcessor({
|
|
176
|
+
data: command,
|
|
177
|
+
id: 'job-id',
|
|
178
|
+
name: 'TestCommand',
|
|
179
|
+
});
|
|
180
|
+
// Then
|
|
181
|
+
expect(handler).toHaveBeenCalledWith(command);
|
|
182
|
+
}));
|
|
183
|
+
it('powinno zezwalać tylko na jeden handler per komenda', () => {
|
|
184
|
+
// Given
|
|
185
|
+
const handler1 = jest.fn();
|
|
186
|
+
const handler2 = jest.fn();
|
|
187
|
+
// When
|
|
188
|
+
commandBus.handle(TestCommand, handler1);
|
|
189
|
+
// Then - drugi handler powinien rzucić błąd
|
|
190
|
+
expect(() => commandBus.handle(TestCommand, handler2)).toThrow('Handler dla komendy TestCommand już istnieje');
|
|
191
|
+
});
|
|
192
|
+
it('powinno obsłużyć błąd gdy brak handlera dla komendy', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
193
|
+
// Given
|
|
194
|
+
const command = new TestCommand('test');
|
|
195
|
+
const handler = jest.fn().mockResolvedValue(undefined);
|
|
196
|
+
let workerProcessor;
|
|
197
|
+
bullmq_1.Worker.mockImplementation((_name, processor) => {
|
|
198
|
+
workerProcessor = processor;
|
|
199
|
+
return mockWorker;
|
|
200
|
+
});
|
|
201
|
+
// Zarejestruj handler normalnie
|
|
202
|
+
yield commandBus.handle(TestCommand, handler);
|
|
203
|
+
// Następnie usuń handler z internal commandHandlers aby symulować brak handlera
|
|
204
|
+
const commandHandlers = commandBus.commandHandlers;
|
|
205
|
+
delete commandHandlers['TestCommand'];
|
|
206
|
+
// When & Then
|
|
207
|
+
yield expect(workerProcessor({
|
|
208
|
+
data: command,
|
|
209
|
+
id: 'job-id',
|
|
210
|
+
name: 'TestCommand',
|
|
211
|
+
})).rejects.toThrow('Brak handlera dla komendy TestCommand');
|
|
212
|
+
}));
|
|
213
|
+
});
|
|
214
|
+
describe('close', () => {
|
|
215
|
+
it('powinno zamknąć wszystkie kolejki i workery', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
216
|
+
// Given
|
|
217
|
+
const command = new TestCommand('test');
|
|
218
|
+
yield commandBus.dispatch(command);
|
|
219
|
+
yield commandBus.handle(TestCommand, jest.fn());
|
|
220
|
+
// When
|
|
221
|
+
yield commandBus.close();
|
|
222
|
+
// Then
|
|
223
|
+
// CommandBus nie zarządza cyklem życia kolejek - tylko zamyka workery
|
|
224
|
+
expect(mockWorker.close).toHaveBeenCalled();
|
|
225
|
+
}));
|
|
226
|
+
});
|
|
227
|
+
describe('połączenie z Redis', () => {
|
|
228
|
+
it('powinno obsłużyć błąd połączenia', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
229
|
+
// Given
|
|
230
|
+
mockQueue.add.mockRejectedValueOnce(new Error('Connection failed'));
|
|
231
|
+
const command = new TestCommand('test');
|
|
232
|
+
// When & Then
|
|
233
|
+
yield expect(commandBus.dispatch(command)).rejects.toThrow('Connection failed');
|
|
234
|
+
}));
|
|
235
|
+
});
|
|
236
|
+
describe('obsługa błędów workera', () => {
|
|
237
|
+
it('powinno logować błędy przetwarzania', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
238
|
+
// Given
|
|
239
|
+
const consoleSpy = jest.spyOn(console, 'error').mockImplementation();
|
|
240
|
+
const handler = jest.fn().mockRejectedValue(new Error('Processing failed'));
|
|
241
|
+
let workerProcessor = null;
|
|
242
|
+
bullmq_1.Worker.mockImplementation((_name, processor) => {
|
|
243
|
+
workerProcessor = processor;
|
|
244
|
+
return mockWorker;
|
|
245
|
+
});
|
|
246
|
+
// When
|
|
247
|
+
yield commandBus.handle(TestCommand, handler);
|
|
248
|
+
const command = new TestCommand('test');
|
|
249
|
+
expect(workerProcessor).not.toBeNull();
|
|
250
|
+
const processor = workerProcessor;
|
|
251
|
+
yield expect(processor({
|
|
252
|
+
data: command,
|
|
253
|
+
id: 'job-id',
|
|
254
|
+
name: 'TestCommand',
|
|
255
|
+
})).rejects.toThrow('Processing failed');
|
|
256
|
+
// Then
|
|
257
|
+
expect(handler).toHaveBeenCalledWith(command);
|
|
258
|
+
// Cleanup
|
|
259
|
+
consoleSpy.mockRestore();
|
|
260
|
+
}));
|
|
261
|
+
});
|
|
262
|
+
describe('RPC - Unikalne kolejki per wywołanie', () => {
|
|
263
|
+
it('RpcCoordinator nie powinien mieć globalnej reply queue', () => {
|
|
264
|
+
// Given & When
|
|
265
|
+
const commandBus1 = new index_1.default(config);
|
|
266
|
+
// Then - RpcCoordinator nie ma już globalnej kolejki/workera
|
|
267
|
+
const rpcCoordinator = commandBus1
|
|
268
|
+
.rpcCoordinator;
|
|
269
|
+
expect(rpcCoordinator.replyQueue).toBeUndefined();
|
|
270
|
+
expect(rpcCoordinator.replyWorker).toBeUndefined();
|
|
271
|
+
// CommandBus nie ma już replyQueueName
|
|
272
|
+
expect(commandBus1.replyQueueName).toBeUndefined();
|
|
273
|
+
// Cleanup
|
|
274
|
+
commandBus1.close().catch(() => undefined);
|
|
275
|
+
});
|
|
276
|
+
it('RPC call() powinno dodać __rpcMetadata z unikalną replyQueue per wywołanie', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
277
|
+
// Given
|
|
278
|
+
const handler = jest.fn().mockResolvedValue(42);
|
|
279
|
+
const command = new CalculateCommand(5, 3, 'add');
|
|
280
|
+
mockQueue.add.mockResolvedValue({
|
|
281
|
+
id: 'test-job-id-123',
|
|
282
|
+
opts: {},
|
|
283
|
+
});
|
|
284
|
+
yield commandBus.handle(CalculateCommand, handler);
|
|
285
|
+
// When
|
|
286
|
+
const callPromise = commandBus.call(command, 100);
|
|
287
|
+
// Then - replyQueue zawiera correlationId (unikalny per wywołanie)
|
|
288
|
+
expect(mockQueue.add).toHaveBeenCalledWith('CalculateCommand', expect.objectContaining({
|
|
289
|
+
__rpcMetadata: expect.objectContaining({
|
|
290
|
+
correlationId: command.__id,
|
|
291
|
+
replyQueue: `rpc-reply-${command.__id}`, // Unikalna kolejka per wywołanie
|
|
292
|
+
timestamp: expect.any(Number),
|
|
293
|
+
}),
|
|
294
|
+
}), expect.any(Object));
|
|
295
|
+
// Cleanup - czekaj na timeout
|
|
296
|
+
callPromise.catch(() => undefined);
|
|
297
|
+
}));
|
|
298
|
+
});
|
|
299
|
+
describe('RPC - call()', () => {
|
|
300
|
+
beforeEach(() => {
|
|
301
|
+
// Mock job z ID dla RPC
|
|
302
|
+
mockQueue.add.mockResolvedValue({
|
|
303
|
+
id: 'test-job-id-123',
|
|
304
|
+
opts: {},
|
|
305
|
+
});
|
|
306
|
+
});
|
|
307
|
+
it('powinno obsłużyć timeout RPC', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
308
|
+
// Given
|
|
309
|
+
const handler = jest.fn().mockResolvedValue(42);
|
|
310
|
+
const command = new CalculateCommand(5, 3, 'add');
|
|
311
|
+
yield commandBus.handle(CalculateCommand, handler);
|
|
312
|
+
// When & Then
|
|
313
|
+
yield expect(commandBus.call(command, 100)) // 100ms timeout
|
|
314
|
+
.rejects.toThrow('RPC timeout for command CalculateCommand');
|
|
315
|
+
}));
|
|
316
|
+
it('powinno mieć metodę call() zaimplementowaną', () => {
|
|
317
|
+
// Given
|
|
318
|
+
const command = new CalculateCommand(1, 2, 'add');
|
|
319
|
+
// When & Then - metoda call() powinna istnieć
|
|
320
|
+
expect(typeof commandBus.call).toBe('function');
|
|
321
|
+
// Test że metoda zwraca Promise (ale nie czekamy na wynik)
|
|
322
|
+
const result = commandBus.call(command, 100);
|
|
323
|
+
expect(result).toBeInstanceOf(Promise);
|
|
324
|
+
// Anuluj Promise żeby nie zaburzyć afterEach
|
|
325
|
+
result.catch(() => undefined); // Ignoruj timeout error
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
describe('logLevel filtering', () => {
|
|
329
|
+
it('powinno filtrować logi zgodnie z logLevel=error', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
330
|
+
// Given - spy na prawdziwy console
|
|
331
|
+
const logSpy = jest.spyOn(console, 'log');
|
|
332
|
+
const warnSpy = jest.spyOn(console, 'warn');
|
|
333
|
+
const debugSpy = jest.spyOn(console, 'debug');
|
|
334
|
+
// Wyczyść poprzednie wywołania
|
|
335
|
+
logSpy.mockClear();
|
|
336
|
+
warnSpy.mockClear();
|
|
337
|
+
debugSpy.mockClear();
|
|
338
|
+
try {
|
|
339
|
+
// When - utwórz konfigurację z logLevel='error'
|
|
340
|
+
const errorLevelConfig = new command_bus_config_1.default({
|
|
341
|
+
redisUrl: 'redis://localhost:6379',
|
|
342
|
+
concurrency: 1,
|
|
343
|
+
logLevel: 'error',
|
|
344
|
+
});
|
|
345
|
+
const busWithErrorLevel = new index_1.default(errorLevelConfig);
|
|
346
|
+
// Then - log(), warn(), debug() NIE powinny być wywołane
|
|
347
|
+
expect(logSpy).not.toHaveBeenCalled();
|
|
348
|
+
expect(warnSpy).not.toHaveBeenCalled();
|
|
349
|
+
expect(debugSpy).not.toHaveBeenCalled();
|
|
350
|
+
// Cleanup
|
|
351
|
+
yield busWithErrorLevel.close();
|
|
352
|
+
}
|
|
353
|
+
finally {
|
|
354
|
+
// Przywróć spy
|
|
355
|
+
logSpy.mockRestore();
|
|
356
|
+
warnSpy.mockRestore();
|
|
357
|
+
debugSpy.mockRestore();
|
|
358
|
+
}
|
|
359
|
+
}));
|
|
360
|
+
it('powinno logować wszystkie poziomy przy logLevel=debug', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
361
|
+
// Given - spy na prawdziwy console.debug (konstruktor używa logger.debug)
|
|
362
|
+
const debugSpy = jest.spyOn(console, 'debug');
|
|
363
|
+
// Wyczyść poprzednie wywołania
|
|
364
|
+
debugSpy.mockClear();
|
|
365
|
+
try {
|
|
366
|
+
// When - utwórz konfigurację z logLevel='debug'
|
|
367
|
+
const debugLevelConfig = new command_bus_config_1.default({
|
|
368
|
+
redisUrl: 'redis://localhost:6379',
|
|
369
|
+
concurrency: 1,
|
|
370
|
+
logLevel: 'debug',
|
|
371
|
+
});
|
|
372
|
+
const busWithDebugLevel = new index_1.default(debugLevelConfig);
|
|
373
|
+
// Then - debug() powinno być wywołane (konstruktor loguje debug)
|
|
374
|
+
expect(debugSpy).toHaveBeenCalled();
|
|
375
|
+
// Cleanup
|
|
376
|
+
yield busWithDebugLevel.close();
|
|
377
|
+
}
|
|
378
|
+
finally {
|
|
379
|
+
// Przywróć spy
|
|
380
|
+
debugSpy.mockRestore();
|
|
381
|
+
}
|
|
382
|
+
}));
|
|
383
|
+
it('powinno używać Logger wrapper z BaseConfig', () => {
|
|
384
|
+
// Given - konfiguracja domyślna
|
|
385
|
+
const testConfig = new command_bus_config_1.default({
|
|
386
|
+
redisUrl: 'redis://localhost:6379',
|
|
387
|
+
logLevel: 'error',
|
|
388
|
+
});
|
|
389
|
+
// When - utwórz CommandBus
|
|
390
|
+
const testBus = new index_1.default(testConfig);
|
|
391
|
+
// Then - logger powinien pochodzić z konfiguracji (nie console)
|
|
392
|
+
expect(testBus['logger']).toBe(testConfig.logger);
|
|
393
|
+
// Cleanup - bez await żeby test był szybki
|
|
394
|
+
testBus.close().catch(() => undefined);
|
|
395
|
+
});
|
|
396
|
+
});
|
|
397
|
+
});
|
|
398
|
+
//# sourceMappingURL=command-bus.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-bus.spec.js","sourceRoot":"","sources":["../../src/command-bus/command-bus.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bazowa klasa dla komend
|
|
3
|
+
* Komendy są przetwarzane przez dokładnie jeden handler (1:1)
|
|
4
|
+
*/
|
|
5
|
+
export default abstract class Command {
|
|
6
|
+
/**
|
|
7
|
+
* Nazwa komendy (nazwa klasy)
|
|
8
|
+
*/
|
|
9
|
+
readonly __name: string;
|
|
10
|
+
/**
|
|
11
|
+
* Unikalny identyfikator komendy
|
|
12
|
+
*/
|
|
13
|
+
readonly __id: string;
|
|
14
|
+
/**
|
|
15
|
+
* Czas utworzenia komendy (timestamp)
|
|
16
|
+
*/
|
|
17
|
+
readonly __time: number;
|
|
18
|
+
constructor();
|
|
19
|
+
/**
|
|
20
|
+
* Przywraca obiekty Date z serializowanych danych
|
|
21
|
+
* Reconstructs Date objects from serialized data
|
|
22
|
+
*/
|
|
23
|
+
static reconstructDates(obj: unknown): unknown;
|
|
24
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const crypto_1 = require("crypto");
|
|
4
|
+
/**
|
|
5
|
+
* Bazowa klasa dla komend
|
|
6
|
+
* Komendy są przetwarzane przez dokładnie jeden handler (1:1)
|
|
7
|
+
*/
|
|
8
|
+
class Command {
|
|
9
|
+
constructor() {
|
|
10
|
+
/**
|
|
11
|
+
* Czas utworzenia komendy (timestamp)
|
|
12
|
+
*/
|
|
13
|
+
this.__time = Date.now();
|
|
14
|
+
this.__name = this.constructor.name;
|
|
15
|
+
this.__id = (0, crypto_1.randomUUID)();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Przywraca obiekty Date z serializowanych danych
|
|
19
|
+
* Reconstructs Date objects from serialized data
|
|
20
|
+
*/
|
|
21
|
+
static reconstructDates(obj) {
|
|
22
|
+
if (obj === null || obj === undefined) {
|
|
23
|
+
return obj;
|
|
24
|
+
}
|
|
25
|
+
if (typeof obj === 'string') {
|
|
26
|
+
// Sprawdź czy string to data ISO
|
|
27
|
+
// Check if string is an ISO date
|
|
28
|
+
const isoDateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z?$/;
|
|
29
|
+
if (isoDateRegex.test(obj)) {
|
|
30
|
+
const date = new Date(obj);
|
|
31
|
+
if (!isNaN(date.getTime())) {
|
|
32
|
+
return date;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return obj;
|
|
36
|
+
}
|
|
37
|
+
if (Array.isArray(obj)) {
|
|
38
|
+
return obj.map((item) => Command.reconstructDates(item));
|
|
39
|
+
}
|
|
40
|
+
if (typeof obj === 'object') {
|
|
41
|
+
const result = {};
|
|
42
|
+
for (const key in obj) {
|
|
43
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
44
|
+
result[key] = Command.reconstructDates(obj[key]);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
return obj;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.default = Command;
|
|
53
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/command-bus/command.ts"],"names":[],"mappings":";;AAAA,mCAAoC;AAEpC;;;GAGG;AACH,MAA8B,OAAO;IAgBnC;QALA;;WAEG;QACa,WAAM,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;QAG1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,IAAA,mBAAU,GAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,gBAAgB,CAAC,GAAY;QACzC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,GAAG,CAAC;QACb,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,iCAAiC;YACjC,iCAAiC;YACjC,MAAM,YAAY,GAAG,mDAAmD,CAAC;YACzE,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;oBAC3B,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,MAAM,GAA4B,EAAE,CAAC;YAC3C,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;gBACtB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;oBACnD,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAE,GAA+B,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AA3DD,0BA2DC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import BaseConfig from '../../shared/config/base-config';
|
|
2
|
+
/**
|
|
3
|
+
* Konfiguracja dla CommandBus (BullMQ)
|
|
4
|
+
*/
|
|
5
|
+
export default class CommandBusConfig extends BaseConfig {
|
|
6
|
+
/**
|
|
7
|
+
* Liczba równoległych workerów do przetwarzania komend
|
|
8
|
+
*/
|
|
9
|
+
concurrency: number;
|
|
10
|
+
/**
|
|
11
|
+
* Concurrency dla Reply Worker (obsługa odpowiedzi RPC)
|
|
12
|
+
* Domyślnie 50 - wystarczająco wysokie dla szybkiej obsługi, ale nie prowadzi do eksplozji pamięci
|
|
13
|
+
*/
|
|
14
|
+
replyWorkerConcurrency: number;
|
|
15
|
+
/**
|
|
16
|
+
* Maksymalna liczba prób przetworzenia zadania
|
|
17
|
+
*/
|
|
18
|
+
maxAttempts: number;
|
|
19
|
+
/**
|
|
20
|
+
* Opóźnienie między próbami (ms)
|
|
21
|
+
*/
|
|
22
|
+
backoffDelay: number;
|
|
23
|
+
/**
|
|
24
|
+
* Tryb przetwarzania zadań w kolejce (FIFO - First In First Out, LIFO - Last In First Out)
|
|
25
|
+
*/
|
|
26
|
+
queueMode: 'fifo' | 'lifo';
|
|
27
|
+
/**
|
|
28
|
+
* Ścieżka do katalogu logów komend
|
|
29
|
+
*/
|
|
30
|
+
commandLog: string;
|
|
31
|
+
/**
|
|
32
|
+
* TTL dla Reply Queue jobs w milisekundach (domyślnie: 60000 = 1 minuta)
|
|
33
|
+
*/
|
|
34
|
+
rpcReplyTtl: number;
|
|
35
|
+
constructor(params?: Partial<CommandBusConfig>);
|
|
36
|
+
/**
|
|
37
|
+
* Waliduje konfigurację specyficzną dla CommandBus
|
|
38
|
+
*/
|
|
39
|
+
private validateCommandBusConfig;
|
|
40
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const base_config_1 = __importDefault(require("../../shared/config/base-config"));
|
|
7
|
+
/**
|
|
8
|
+
* Konfiguracja dla CommandBus (BullMQ)
|
|
9
|
+
*/
|
|
10
|
+
class CommandBusConfig extends base_config_1.default {
|
|
11
|
+
constructor(params) {
|
|
12
|
+
var _a, _b, _c, _d, _e, _f;
|
|
13
|
+
super(params);
|
|
14
|
+
// Wczytaj konfigurację z nowym prefiksem COMMAND_BUS_ z fallbackiem do starych nazw
|
|
15
|
+
this.concurrency = this.parseIntWithDefault((_a = process.env.COMMAND_BUS_CONCURRENCY) !== null && _a !== void 0 ? _a : process.env.EVENT_BUS_CONCURRENCY, 1);
|
|
16
|
+
this.replyWorkerConcurrency = this.parseIntWithDefault(process.env.COMMAND_BUS_REPLY_WORKER_CONCURRENCY, 50);
|
|
17
|
+
this.maxAttempts = this.parseIntWithDefault((_b = process.env.COMMAND_BUS_MAX_ATTEMPTS) !== null && _b !== void 0 ? _b : process.env.EVENT_BUS_MAX_ATTEMPTS, 3);
|
|
18
|
+
this.backoffDelay = this.parseIntWithDefault((_c = process.env.COMMAND_BUS_BACKOFF_DELAY) !== null && _c !== void 0 ? _c : process.env.EVENT_BUS_BACKOFF_DELAY, 2000);
|
|
19
|
+
const queueModeValue = (_d = process.env.COMMAND_BUS_QUEUE_MODE) !== null && _d !== void 0 ? _d : process.env.EVENT_BUS_QUEUE_MODE;
|
|
20
|
+
this.queueMode = queueModeValue === 'lifo' ? 'lifo' : 'fifo';
|
|
21
|
+
this.commandLog = (_f = (_e = process.env.COMMAND_BUS_LOG) !== null && _e !== void 0 ? _e : process.env.EVENT_BUS_LOG) !== null && _f !== void 0 ? _f : '';
|
|
22
|
+
this.rpcReplyTtl = this.parseIntWithDefault(process.env.COMMAND_BUS_RPC_REPLY_TTL, 60000);
|
|
23
|
+
// Nadpisz wartościami z parametrów konstruktora
|
|
24
|
+
if (params) {
|
|
25
|
+
Object.keys(params).forEach((key) => {
|
|
26
|
+
if (key !== 'redisUrl' && key !== 'logger') {
|
|
27
|
+
this[key] = params[key];
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
// Dodatkowa walidacja specyficzna dla CommandBus
|
|
32
|
+
this.validateCommandBusConfig();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Waliduje konfigurację specyficzną dla CommandBus
|
|
36
|
+
*/
|
|
37
|
+
validateCommandBusConfig() {
|
|
38
|
+
if (this.concurrency < 1) {
|
|
39
|
+
throw new Error('concurrency must be at least 1');
|
|
40
|
+
}
|
|
41
|
+
if (this.replyWorkerConcurrency < 1) {
|
|
42
|
+
throw new Error('replyWorkerConcurrency must be at least 1');
|
|
43
|
+
}
|
|
44
|
+
if (this.replyWorkerConcurrency > 1000) {
|
|
45
|
+
throw new Error('replyWorkerConcurrency should not exceed 1000 (memory safety)');
|
|
46
|
+
}
|
|
47
|
+
if (this.maxAttempts < 1) {
|
|
48
|
+
throw new Error('maxAttempts must be at least 1');
|
|
49
|
+
}
|
|
50
|
+
if (this.backoffDelay < 100) {
|
|
51
|
+
throw new Error('backoffDelay must be at least 100ms');
|
|
52
|
+
}
|
|
53
|
+
if (this.queueMode !== 'fifo' && this.queueMode !== 'lifo') {
|
|
54
|
+
throw new Error("queueMode must be either 'fifo' or 'lifo'");
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.default = CommandBusConfig;
|
|
59
|
+
//# sourceMappingURL=command-bus-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-bus-config.js","sourceRoot":"","sources":["../../../src/command-bus/config/command-bus-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|