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,352 @@
|
|
|
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 job_processor_1 = __importDefault(require("./job-processor"));
|
|
16
|
+
const command_1 = __importDefault(require("../command"));
|
|
17
|
+
// Przykładowa komenda testowa
|
|
18
|
+
class TestCommand extends command_1.default {
|
|
19
|
+
constructor(data) {
|
|
20
|
+
super();
|
|
21
|
+
this.data = data;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
describe('JobProcessor', () => {
|
|
25
|
+
let jobProcessor;
|
|
26
|
+
let mockCommandHandlers;
|
|
27
|
+
let mockQueueManager;
|
|
28
|
+
let mockLogger;
|
|
29
|
+
let mockJobOptionsBuilder;
|
|
30
|
+
let mockCommandLogger;
|
|
31
|
+
let mockReplyQueue;
|
|
32
|
+
beforeEach(() => {
|
|
33
|
+
jest.clearAllMocks();
|
|
34
|
+
mockLogger = {
|
|
35
|
+
log: jest.fn(),
|
|
36
|
+
error: jest.fn(),
|
|
37
|
+
warn: jest.fn(),
|
|
38
|
+
debug: jest.fn(),
|
|
39
|
+
};
|
|
40
|
+
mockReplyQueue = {
|
|
41
|
+
add: jest.fn().mockResolvedValue({ id: 'reply-job-id' }),
|
|
42
|
+
};
|
|
43
|
+
mockQueueManager = {
|
|
44
|
+
createQueue: jest.fn().mockReturnValue(mockReplyQueue),
|
|
45
|
+
queueExists: jest.fn().mockResolvedValue(true), // Domyślnie kolejka istnieje
|
|
46
|
+
};
|
|
47
|
+
mockJobOptionsBuilder = {
|
|
48
|
+
buildRpcReplyOptions: jest.fn().mockReturnValue({}),
|
|
49
|
+
};
|
|
50
|
+
mockCommandLogger = {
|
|
51
|
+
logCommand: jest.fn().mockResolvedValue(undefined),
|
|
52
|
+
};
|
|
53
|
+
mockCommandHandlers = {};
|
|
54
|
+
jobProcessor = new job_processor_1.default(mockCommandHandlers, mockQueueManager, mockLogger, mockJobOptionsBuilder, mockCommandLogger);
|
|
55
|
+
});
|
|
56
|
+
describe('process - standardowy job', () => {
|
|
57
|
+
it('powinno przetworzyć komendę i wywołać handler', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
58
|
+
// Given
|
|
59
|
+
const command = new TestCommand('test data');
|
|
60
|
+
const commandName = 'TestCommand';
|
|
61
|
+
const mockHandler = jest.fn().mockResolvedValue({ success: true });
|
|
62
|
+
mockCommandHandlers[commandName] = mockHandler;
|
|
63
|
+
const job = {
|
|
64
|
+
id: 'job-123',
|
|
65
|
+
data: command,
|
|
66
|
+
attemptsMade: 0,
|
|
67
|
+
opts: { attempts: 3 },
|
|
68
|
+
};
|
|
69
|
+
// When
|
|
70
|
+
const result = yield jobProcessor.process(job, commandName);
|
|
71
|
+
// Then
|
|
72
|
+
expect(result).toEqual({ success: true });
|
|
73
|
+
expect(mockHandler).toHaveBeenCalledWith(command);
|
|
74
|
+
expect(mockLogger.debug).toHaveBeenCalledWith('Rozpoczynam przetwarzanie komendy', expect.objectContaining({
|
|
75
|
+
commandName,
|
|
76
|
+
commandId: command.__id,
|
|
77
|
+
jobId: 'job-123',
|
|
78
|
+
}));
|
|
79
|
+
expect(mockLogger.debug).toHaveBeenCalledWith('Handler komendy wykonany pomyślnie', expect.objectContaining({
|
|
80
|
+
commandName,
|
|
81
|
+
commandId: command.__id,
|
|
82
|
+
jobId: 'job-123',
|
|
83
|
+
}));
|
|
84
|
+
}));
|
|
85
|
+
it('powinno zalogować komendę gdy commandLogger jest dostępny', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
86
|
+
// Given
|
|
87
|
+
const command = new TestCommand('test data');
|
|
88
|
+
const commandName = 'TestCommand';
|
|
89
|
+
const mockHandler = jest.fn().mockResolvedValue(undefined);
|
|
90
|
+
mockCommandHandlers[commandName] = mockHandler;
|
|
91
|
+
const job = {
|
|
92
|
+
id: 'job-123',
|
|
93
|
+
data: command,
|
|
94
|
+
attemptsMade: 0,
|
|
95
|
+
};
|
|
96
|
+
// When
|
|
97
|
+
yield jobProcessor.process(job, commandName);
|
|
98
|
+
// Then
|
|
99
|
+
expect(mockCommandLogger.logCommand).toHaveBeenCalledWith(command);
|
|
100
|
+
}));
|
|
101
|
+
it('powinno rzucić błąd gdy brak handlera dla komendy', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
102
|
+
// Given
|
|
103
|
+
const command = new TestCommand('test data');
|
|
104
|
+
const commandName = 'TestCommand';
|
|
105
|
+
const job = {
|
|
106
|
+
id: 'job-123',
|
|
107
|
+
data: command,
|
|
108
|
+
attemptsMade: 0,
|
|
109
|
+
};
|
|
110
|
+
// When & Then
|
|
111
|
+
yield expect(jobProcessor.process(job, commandName)).rejects.toThrow(`Brak handlera dla komendy ${commandName}`);
|
|
112
|
+
expect(mockLogger.error).toHaveBeenCalledWith('Brak handlera dla komendy', expect.objectContaining({
|
|
113
|
+
commandName,
|
|
114
|
+
commandId: command.__id,
|
|
115
|
+
}));
|
|
116
|
+
}));
|
|
117
|
+
it('powinno obsłużyć błąd z handlera', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
118
|
+
// Given
|
|
119
|
+
const command = new TestCommand('test data');
|
|
120
|
+
const commandName = 'TestCommand';
|
|
121
|
+
const handlerError = new Error('Handler error');
|
|
122
|
+
const mockHandler = jest.fn().mockRejectedValue(handlerError);
|
|
123
|
+
mockCommandHandlers[commandName] = mockHandler;
|
|
124
|
+
const job = {
|
|
125
|
+
id: 'job-123',
|
|
126
|
+
data: command,
|
|
127
|
+
attemptsMade: 1,
|
|
128
|
+
opts: { attempts: 3 },
|
|
129
|
+
};
|
|
130
|
+
// When & Then
|
|
131
|
+
yield expect(jobProcessor.process(job, commandName)).rejects.toThrow('Handler error');
|
|
132
|
+
expect(mockLogger.error).toHaveBeenCalledWith('Błąd podczas wykonywania handlera komendy', expect.objectContaining({
|
|
133
|
+
commandName,
|
|
134
|
+
commandId: command.__id,
|
|
135
|
+
error: 'Handler error',
|
|
136
|
+
attempt: 2,
|
|
137
|
+
}));
|
|
138
|
+
}));
|
|
139
|
+
});
|
|
140
|
+
describe('process - RPC job', () => {
|
|
141
|
+
it('powinno wysłać odpowiedź RPC po pomyślnym wykonaniu', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
142
|
+
// Given
|
|
143
|
+
const command = new TestCommand('test data');
|
|
144
|
+
const commandName = 'TestCommand';
|
|
145
|
+
const result = { success: true, data: 42 };
|
|
146
|
+
const mockHandler = jest.fn().mockResolvedValue(result);
|
|
147
|
+
mockCommandHandlers[commandName] = mockHandler;
|
|
148
|
+
const rpcMetadata = {
|
|
149
|
+
correlationId: 'correlation-123',
|
|
150
|
+
replyQueue: 'rpc-reply-test',
|
|
151
|
+
timestamp: Date.now(),
|
|
152
|
+
};
|
|
153
|
+
const job = {
|
|
154
|
+
id: 'job-123',
|
|
155
|
+
data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
|
|
156
|
+
attemptsMade: 0,
|
|
157
|
+
};
|
|
158
|
+
// When
|
|
159
|
+
const actualResult = yield jobProcessor.process(job, commandName);
|
|
160
|
+
// Then
|
|
161
|
+
expect(actualResult).toEqual(result);
|
|
162
|
+
expect(mockQueueManager.createQueue).toHaveBeenCalledWith('rpc-reply-test');
|
|
163
|
+
expect(mockReplyQueue.add).toHaveBeenCalledWith('rpc-response', {
|
|
164
|
+
correlationId: 'correlation-123',
|
|
165
|
+
result,
|
|
166
|
+
error: null,
|
|
167
|
+
}, {});
|
|
168
|
+
expect(mockLogger.debug).toHaveBeenCalledWith('Odpowiedź RPC wysłana', expect.objectContaining({
|
|
169
|
+
commandName,
|
|
170
|
+
correlationId: 'correlation-123',
|
|
171
|
+
}));
|
|
172
|
+
}));
|
|
173
|
+
it('powinno wysłać błąd RPC gdy handler rzuci błąd', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
174
|
+
// Given
|
|
175
|
+
const command = new TestCommand('test data');
|
|
176
|
+
const commandName = 'TestCommand';
|
|
177
|
+
const handlerError = new Error('Handler failed');
|
|
178
|
+
const mockHandler = jest.fn().mockRejectedValue(handlerError);
|
|
179
|
+
mockCommandHandlers[commandName] = mockHandler;
|
|
180
|
+
const rpcMetadata = {
|
|
181
|
+
correlationId: 'correlation-123',
|
|
182
|
+
replyQueue: 'rpc-reply-test',
|
|
183
|
+
timestamp: Date.now(),
|
|
184
|
+
};
|
|
185
|
+
const job = {
|
|
186
|
+
id: 'job-123',
|
|
187
|
+
data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
|
|
188
|
+
attemptsMade: 0,
|
|
189
|
+
};
|
|
190
|
+
// When & Then
|
|
191
|
+
yield expect(jobProcessor.process(job, commandName)).rejects.toThrow('Handler failed');
|
|
192
|
+
expect(mockReplyQueue.add).toHaveBeenCalledWith('rpc-response', {
|
|
193
|
+
correlationId: 'correlation-123',
|
|
194
|
+
result: null,
|
|
195
|
+
error: 'Handler failed',
|
|
196
|
+
}, {});
|
|
197
|
+
expect(mockLogger.error).toHaveBeenCalledWith('Błąd RPC wysłany do nadawcy', expect.objectContaining({
|
|
198
|
+
commandName,
|
|
199
|
+
correlationId: 'correlation-123',
|
|
200
|
+
error: 'Handler failed',
|
|
201
|
+
}));
|
|
202
|
+
}));
|
|
203
|
+
it('powinno zalogować błąd gdy nie udało się wysłać odpowiedzi RPC', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
204
|
+
// Given
|
|
205
|
+
const command = new TestCommand('test data');
|
|
206
|
+
const commandName = 'TestCommand';
|
|
207
|
+
const result = { success: true };
|
|
208
|
+
const mockHandler = jest.fn().mockResolvedValue(result);
|
|
209
|
+
mockCommandHandlers[commandName] = mockHandler;
|
|
210
|
+
const replyError = new Error('Reply queue error');
|
|
211
|
+
mockReplyQueue.add.mockRejectedValueOnce(replyError);
|
|
212
|
+
const rpcMetadata = {
|
|
213
|
+
correlationId: 'correlation-123',
|
|
214
|
+
replyQueue: 'rpc-reply-test',
|
|
215
|
+
timestamp: Date.now(),
|
|
216
|
+
};
|
|
217
|
+
const job = {
|
|
218
|
+
id: 'job-123',
|
|
219
|
+
data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
|
|
220
|
+
attemptsMade: 0,
|
|
221
|
+
};
|
|
222
|
+
// When
|
|
223
|
+
yield jobProcessor.process(job, commandName);
|
|
224
|
+
// Then
|
|
225
|
+
expect(mockLogger.error).toHaveBeenCalledWith('Nie udało się wysłać odpowiedzi RPC', expect.objectContaining({
|
|
226
|
+
commandName,
|
|
227
|
+
correlationId: 'correlation-123',
|
|
228
|
+
error: 'Reply queue error',
|
|
229
|
+
}));
|
|
230
|
+
}));
|
|
231
|
+
it('NIE powinno wysyłać odpowiedzi RPC gdy kolejka odpowiedzi już nie istnieje', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
232
|
+
// Given
|
|
233
|
+
const command = new TestCommand('test data');
|
|
234
|
+
const commandName = 'TestCommand';
|
|
235
|
+
const result = { success: true };
|
|
236
|
+
const mockHandler = jest.fn().mockResolvedValue(result);
|
|
237
|
+
mockCommandHandlers[commandName] = mockHandler;
|
|
238
|
+
// Mock queueExists - kolejka nie istnieje (timeout usunął)
|
|
239
|
+
mockQueueManager.queueExists = jest.fn().mockResolvedValue(false);
|
|
240
|
+
const rpcMetadata = {
|
|
241
|
+
correlationId: 'correlation-timeout',
|
|
242
|
+
replyQueue: 'rpc-reply-timeout',
|
|
243
|
+
timestamp: Date.now(),
|
|
244
|
+
};
|
|
245
|
+
const job = {
|
|
246
|
+
id: 'job-123',
|
|
247
|
+
data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
|
|
248
|
+
attemptsMade: 0,
|
|
249
|
+
};
|
|
250
|
+
// When
|
|
251
|
+
const actualResult = yield jobProcessor.process(job, commandName);
|
|
252
|
+
// Then
|
|
253
|
+
expect(actualResult).toEqual(result);
|
|
254
|
+
expect(mockQueueManager.queueExists).toHaveBeenCalledWith('rpc-reply-timeout');
|
|
255
|
+
// Nie powinno próbować tworzyć kolejki
|
|
256
|
+
expect(mockQueueManager.createQueue).not.toHaveBeenCalled();
|
|
257
|
+
// Nie powinno próbować wysyłać odpowiedzi
|
|
258
|
+
expect(mockReplyQueue.add).not.toHaveBeenCalled();
|
|
259
|
+
// Powinno zalogować warning
|
|
260
|
+
expect(mockLogger.warn).toHaveBeenCalledWith('Kolejka odpowiedzi RPC już nie istnieje - pomijam wysyłkę', expect.objectContaining({
|
|
261
|
+
commandName,
|
|
262
|
+
correlationId: 'correlation-timeout',
|
|
263
|
+
replyQueue: 'rpc-reply-timeout',
|
|
264
|
+
}));
|
|
265
|
+
}));
|
|
266
|
+
it('NIE powinno wysyłać błędu RPC gdy kolejka odpowiedzi już nie istnieje', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
267
|
+
// Given
|
|
268
|
+
const command = new TestCommand('test data');
|
|
269
|
+
const commandName = 'TestCommand';
|
|
270
|
+
const handlerError = new Error('Handler failed');
|
|
271
|
+
const mockHandler = jest.fn().mockRejectedValue(handlerError);
|
|
272
|
+
mockCommandHandlers[commandName] = mockHandler;
|
|
273
|
+
// Mock queueExists - kolejka nie istnieje (timeout usunął)
|
|
274
|
+
mockQueueManager.queueExists = jest.fn().mockResolvedValue(false);
|
|
275
|
+
const rpcMetadata = {
|
|
276
|
+
correlationId: 'correlation-timeout',
|
|
277
|
+
replyQueue: 'rpc-reply-timeout',
|
|
278
|
+
timestamp: Date.now(),
|
|
279
|
+
};
|
|
280
|
+
const job = {
|
|
281
|
+
id: 'job-123',
|
|
282
|
+
data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
|
|
283
|
+
attemptsMade: 0,
|
|
284
|
+
};
|
|
285
|
+
// When & Then
|
|
286
|
+
yield expect(jobProcessor.process(job, commandName)).rejects.toThrow('Handler failed');
|
|
287
|
+
expect(mockQueueManager.queueExists).toHaveBeenCalledWith('rpc-reply-timeout');
|
|
288
|
+
// Nie powinno próbować tworzyć kolejki
|
|
289
|
+
expect(mockQueueManager.createQueue).not.toHaveBeenCalled();
|
|
290
|
+
// Nie powinno próbować wysyłać błędu
|
|
291
|
+
expect(mockReplyQueue.add).not.toHaveBeenCalled();
|
|
292
|
+
// Powinno zalogować warning
|
|
293
|
+
expect(mockLogger.warn).toHaveBeenCalledWith('Kolejka odpowiedzi RPC już nie istnieje - pomijam wysyłkę błędu', expect.objectContaining({
|
|
294
|
+
commandName,
|
|
295
|
+
correlationId: 'correlation-timeout',
|
|
296
|
+
replyQueue: 'rpc-reply-timeout',
|
|
297
|
+
}));
|
|
298
|
+
}));
|
|
299
|
+
});
|
|
300
|
+
describe('rekonstrukcja dat', () => {
|
|
301
|
+
it('powinno zrekonstruować daty w komendzie', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
302
|
+
// Given
|
|
303
|
+
const commandName = 'TestCommand';
|
|
304
|
+
const serializedDate = new Date('2025-01-01').toISOString();
|
|
305
|
+
const mockHandler = jest.fn().mockResolvedValue(undefined);
|
|
306
|
+
mockCommandHandlers[commandName] = mockHandler;
|
|
307
|
+
// Spy na Command.reconstructDates
|
|
308
|
+
const reconstructDatesSpy = jest.spyOn(command_1.default, 'reconstructDates');
|
|
309
|
+
const job = {
|
|
310
|
+
id: 'job-123',
|
|
311
|
+
data: {
|
|
312
|
+
__name: 'TestCommand',
|
|
313
|
+
__id: 'cmd-123',
|
|
314
|
+
__time: Date.now(),
|
|
315
|
+
data: 'test',
|
|
316
|
+
someDate: serializedDate,
|
|
317
|
+
},
|
|
318
|
+
attemptsMade: 0,
|
|
319
|
+
};
|
|
320
|
+
// When
|
|
321
|
+
yield jobProcessor.process(job, commandName);
|
|
322
|
+
// Then
|
|
323
|
+
expect(reconstructDatesSpy).toHaveBeenCalledWith(job.data);
|
|
324
|
+
// Sprawdź że handler został wywołany z przekonwertowanymi datami
|
|
325
|
+
expect(mockHandler).toHaveBeenCalled();
|
|
326
|
+
const calledCommand = mockHandler.mock.calls[0][0];
|
|
327
|
+
expect(calledCommand.someDate).toBeInstanceOf(Date);
|
|
328
|
+
reconstructDatesSpy.mockRestore();
|
|
329
|
+
}));
|
|
330
|
+
});
|
|
331
|
+
describe('process bez commandLogger', () => {
|
|
332
|
+
it('powinno działać gdy commandLogger nie jest dostępny', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
333
|
+
// Given
|
|
334
|
+
const jobProcessorWithoutLogger = new job_processor_1.default(mockCommandHandlers, mockQueueManager, mockLogger, mockJobOptionsBuilder);
|
|
335
|
+
const command = new TestCommand('test data');
|
|
336
|
+
const commandName = 'TestCommand';
|
|
337
|
+
const mockHandler = jest.fn().mockResolvedValue({ success: true });
|
|
338
|
+
mockCommandHandlers[commandName] = mockHandler;
|
|
339
|
+
const job = {
|
|
340
|
+
id: 'job-123',
|
|
341
|
+
data: command,
|
|
342
|
+
attemptsMade: 0,
|
|
343
|
+
};
|
|
344
|
+
// When
|
|
345
|
+
const result = yield jobProcessorWithoutLogger.process(job, commandName);
|
|
346
|
+
// Then
|
|
347
|
+
expect(result).toEqual({ success: true });
|
|
348
|
+
expect(mockHandler).toHaveBeenCalled();
|
|
349
|
+
}));
|
|
350
|
+
});
|
|
351
|
+
});
|
|
352
|
+
//# sourceMappingURL=job-processor.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-processor.spec.js","sourceRoot":"","sources":["../../../src/command-bus/job/job-processor.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ILogger } from '../../shared/types';
|
|
2
|
+
import type Command from '../command';
|
|
3
|
+
/**
|
|
4
|
+
* CommandLogger - odpowiada za persystencję logów komend do plików
|
|
5
|
+
* Zapisuje komendy w formacie JSONL (JSON Lines) z rotacją dzienną
|
|
6
|
+
*/
|
|
7
|
+
export default class CommandLogger {
|
|
8
|
+
private readonly logDirectory;
|
|
9
|
+
private readonly logger;
|
|
10
|
+
/**
|
|
11
|
+
* Konstruktor CommandLogger
|
|
12
|
+
* @param logDirectory - Ścieżka do katalogu logów
|
|
13
|
+
* @param logger - Logger do logowania błędów
|
|
14
|
+
*/
|
|
15
|
+
constructor(logDirectory: string, logger: ILogger);
|
|
16
|
+
/**
|
|
17
|
+
* Zapisuje komendę do pliku logu w formacie JSONL
|
|
18
|
+
* @param command - Komenda do zapisania
|
|
19
|
+
*/
|
|
20
|
+
logCommand(command: Command): Promise<void>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
const fs = __importStar(require("fs/promises"));
|
|
46
|
+
const path = __importStar(require("path"));
|
|
47
|
+
/**
|
|
48
|
+
* CommandLogger - odpowiada za persystencję logów komend do plików
|
|
49
|
+
* Zapisuje komendy w formacie JSONL (JSON Lines) z rotacją dzienną
|
|
50
|
+
*/
|
|
51
|
+
class CommandLogger {
|
|
52
|
+
/**
|
|
53
|
+
* Konstruktor CommandLogger
|
|
54
|
+
* @param logDirectory - Ścieżka do katalogu logów
|
|
55
|
+
* @param logger - Logger do logowania błędów
|
|
56
|
+
*/
|
|
57
|
+
constructor(logDirectory, logger) {
|
|
58
|
+
this.logDirectory = logDirectory;
|
|
59
|
+
this.logger = logger;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Zapisuje komendę do pliku logu w formacie JSONL
|
|
63
|
+
* @param command - Komenda do zapisania
|
|
64
|
+
*/
|
|
65
|
+
logCommand(command) {
|
|
66
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
try {
|
|
68
|
+
const date = new Date().toISOString().split('T')[0];
|
|
69
|
+
const fileName = path.join(this.logDirectory, `commandbus_${date}.jsonl`);
|
|
70
|
+
yield fs.appendFile(fileName, JSON.stringify(command) + '\n');
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
this.logger.error('Nie udało się zapisać komendy do logu:', error);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.default = CommandLogger;
|
|
79
|
+
//# sourceMappingURL=command-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-logger.js","sourceRoot":"","sources":["../../../src/command-bus/logging/command-logger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAI7B;;;GAGG;AACH,MAAqB,aAAa;IAChC;;;;OAIG;IACH,YACmB,YAAoB,EACpB,MAAe;QADf,iBAAY,GAAZ,YAAY,CAAQ;QACpB,WAAM,GAAN,MAAM,CAAS;IAC/B,CAAC;IAEJ;;;OAGG;IACU,UAAU,CAAC,OAAgB;;YACtC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,IAAI,QAAQ,CAAC,CAAC;gBAC1E,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;YAChE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;KAAA;CACF;AAxBD,gCAwBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|