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.
Files changed (105) hide show
  1. package/README.md +522 -0
  2. package/dist/command-bus/command-bus.spec.d.ts +1 -0
  3. package/dist/command-bus/command-bus.spec.js +398 -0
  4. package/dist/command-bus/command-bus.spec.js.map +1 -0
  5. package/dist/command-bus/command.d.ts +24 -0
  6. package/dist/command-bus/command.js +53 -0
  7. package/dist/command-bus/command.js.map +1 -0
  8. package/dist/command-bus/config/command-bus-config.d.ts +40 -0
  9. package/dist/command-bus/config/command-bus-config.js +59 -0
  10. package/dist/command-bus/config/command-bus-config.js.map +1 -0
  11. package/dist/command-bus/config/command-bus-config.spec.d.ts +1 -0
  12. package/dist/command-bus/config/command-bus-config.spec.js +162 -0
  13. package/dist/command-bus/config/command-bus-config.spec.js.map +1 -0
  14. package/dist/command-bus/config/index.d.ts +1 -0
  15. package/dist/command-bus/config/index.js +9 -0
  16. package/dist/command-bus/config/index.js.map +1 -0
  17. package/dist/command-bus/index.d.ts +79 -0
  18. package/dist/command-bus/index.js +169 -0
  19. package/dist/command-bus/index.js.map +1 -0
  20. package/dist/command-bus/job/index.d.ts +6 -0
  21. package/dist/command-bus/job/index.js +15 -0
  22. package/dist/command-bus/job/index.js.map +1 -0
  23. package/dist/command-bus/job/job-options-builder.d.ts +24 -0
  24. package/dist/command-bus/job/job-options-builder.js +68 -0
  25. package/dist/command-bus/job/job-options-builder.js.map +1 -0
  26. package/dist/command-bus/job/job-options-builder.spec.d.ts +1 -0
  27. package/dist/command-bus/job/job-options-builder.spec.js +163 -0
  28. package/dist/command-bus/job/job-options-builder.spec.js.map +1 -0
  29. package/dist/command-bus/job/job-processor.d.ts +33 -0
  30. package/dist/command-bus/job/job-processor.js +195 -0
  31. package/dist/command-bus/job/job-processor.js.map +1 -0
  32. package/dist/command-bus/job/job-processor.spec.d.ts +1 -0
  33. package/dist/command-bus/job/job-processor.spec.js +352 -0
  34. package/dist/command-bus/job/job-processor.spec.js.map +1 -0
  35. package/dist/command-bus/logging/command-logger.d.ts +21 -0
  36. package/dist/command-bus/logging/command-logger.js +79 -0
  37. package/dist/command-bus/logging/command-logger.js.map +1 -0
  38. package/dist/command-bus/logging/command-logger.spec.d.ts +1 -0
  39. package/dist/command-bus/logging/command-logger.spec.js +245 -0
  40. package/dist/command-bus/logging/command-logger.spec.js.map +1 -0
  41. package/dist/command-bus/logging/index.d.ts +5 -0
  42. package/dist/command-bus/logging/index.js +13 -0
  43. package/dist/command-bus/logging/index.js.map +1 -0
  44. package/dist/command-bus/queue/index.d.ts +5 -0
  45. package/dist/command-bus/queue/index.js +13 -0
  46. package/dist/command-bus/queue/index.js.map +1 -0
  47. package/dist/command-bus/queue/queue-manager.d.ts +24 -0
  48. package/dist/command-bus/queue/queue-manager.js +60 -0
  49. package/dist/command-bus/queue/queue-manager.js.map +1 -0
  50. package/dist/command-bus/queue/queue-manager.spec.d.ts +1 -0
  51. package/dist/command-bus/queue/queue-manager.spec.js +219 -0
  52. package/dist/command-bus/queue/queue-manager.spec.js.map +1 -0
  53. package/dist/command-bus/rpc/index.d.ts +5 -0
  54. package/dist/command-bus/rpc/index.js +13 -0
  55. package/dist/command-bus/rpc/index.js.map +1 -0
  56. package/dist/command-bus/rpc/rpc-coordinator.d.ts +45 -0
  57. package/dist/command-bus/rpc/rpc-coordinator.js +189 -0
  58. package/dist/command-bus/rpc/rpc-coordinator.js.map +1 -0
  59. package/dist/command-bus/rpc/rpc-coordinator.spec.d.ts +1 -0
  60. package/dist/command-bus/rpc/rpc-coordinator.spec.js +286 -0
  61. package/dist/command-bus/rpc/rpc-coordinator.spec.js.map +1 -0
  62. package/dist/command-bus/types/index.d.ts +57 -0
  63. package/dist/command-bus/types/index.js +3 -0
  64. package/dist/command-bus/types/index.js.map +1 -0
  65. package/dist/command-bus/worker/index.d.ts +5 -0
  66. package/dist/command-bus/worker/index.js +13 -0
  67. package/dist/command-bus/worker/index.js.map +1 -0
  68. package/dist/command-bus/worker/worker-orchestrator.d.ts +46 -0
  69. package/dist/command-bus/worker/worker-orchestrator.js +160 -0
  70. package/dist/command-bus/worker/worker-orchestrator.js.map +1 -0
  71. package/dist/command-bus/worker/worker-orchestrator.spec.d.ts +1 -0
  72. package/dist/command-bus/worker/worker-orchestrator.spec.js +293 -0
  73. package/dist/command-bus/worker/worker-orchestrator.spec.js.map +1 -0
  74. package/dist/examples/rpc.demo.d.ts +2 -0
  75. package/dist/examples/rpc.demo.js +235 -0
  76. package/dist/examples/rpc.demo.js.map +1 -0
  77. package/dist/index.d.ts +11 -0
  78. package/dist/index.js +20 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/pp-command-bus-1.0.0.tgz +0 -0
  81. package/dist/shared/config/base-config.d.ts +43 -0
  82. package/dist/shared/config/base-config.js +100 -0
  83. package/dist/shared/config/base-config.js.map +1 -0
  84. package/dist/shared/config/base-config.spec.d.ts +1 -0
  85. package/dist/shared/config/base-config.spec.js +118 -0
  86. package/dist/shared/config/base-config.spec.js.map +1 -0
  87. package/dist/shared/config/index.d.ts +1 -0
  88. package/dist/shared/config/index.js +9 -0
  89. package/dist/shared/config/index.js.map +1 -0
  90. package/dist/shared/logging/index.d.ts +2 -0
  91. package/dist/shared/logging/index.js +8 -0
  92. package/dist/shared/logging/index.js.map +1 -0
  93. package/dist/shared/logging/log-level.d.ts +36 -0
  94. package/dist/shared/logging/log-level.js +53 -0
  95. package/dist/shared/logging/log-level.js.map +1 -0
  96. package/dist/shared/logging/logger.d.ts +42 -0
  97. package/dist/shared/logging/logger.js +63 -0
  98. package/dist/shared/logging/logger.js.map +1 -0
  99. package/dist/shared/logging/logger.spec.d.ts +1 -0
  100. package/dist/shared/logging/logger.spec.js +89 -0
  101. package/dist/shared/logging/logger.spec.js.map +1 -0
  102. package/dist/shared/types.d.ts +26 -0
  103. package/dist/shared/types.js +6 -0
  104. package/dist/shared/types.js.map +1 -0
  105. 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 {};