pp-command-bus 1.4.0 → 2.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 +402 -1113
- package/dist/command-bus/command-bus.spec.js +144 -370
- package/dist/command-bus/command-bus.spec.js.map +1 -1
- package/dist/command-bus/command.d.ts +23 -5
- package/dist/command-bus/command.js +20 -34
- package/dist/command-bus/command.js.map +1 -1
- package/dist/command-bus/config/command-bus-config.d.ts +75 -21
- package/dist/command-bus/config/command-bus-config.js +99 -58
- package/dist/command-bus/config/command-bus-config.js.map +1 -1
- package/dist/command-bus/config/command-bus-config.spec.js +174 -100
- package/dist/command-bus/config/command-bus-config.spec.js.map +1 -1
- package/dist/command-bus/index.d.ts +39 -52
- package/dist/command-bus/index.js +133 -126
- package/dist/command-bus/index.js.map +1 -1
- package/dist/command-bus/logging/command-logger.d.ts +2 -0
- package/dist/command-bus/logging/command-logger.js +7 -0
- package/dist/command-bus/logging/command-logger.js.map +1 -1
- package/dist/command-bus/logging/command-logger.spec.js +49 -14
- package/dist/command-bus/logging/command-logger.spec.js.map +1 -1
- package/dist/command-bus/serialization/index.d.ts +6 -0
- package/dist/command-bus/serialization/index.js +9 -0
- package/dist/command-bus/serialization/index.js.map +1 -0
- package/dist/command-bus/serialization/msgpack-serializer.d.ts +26 -0
- package/dist/command-bus/serialization/msgpack-serializer.js +70 -0
- package/dist/command-bus/serialization/msgpack-serializer.js.map +1 -0
- package/dist/command-bus/serialization/msgpack-serializer.spec.js +223 -0
- package/dist/command-bus/serialization/msgpack-serializer.spec.js.map +1 -0
- package/dist/command-bus/serialization/serializer.interface.d.ts +21 -0
- package/dist/command-bus/serialization/serializer.interface.js +3 -0
- package/dist/command-bus/serialization/serializer.interface.js.map +1 -0
- package/dist/command-bus/transport/consumer-loop.d.ts +45 -0
- package/dist/command-bus/transport/consumer-loop.js +90 -0
- package/dist/command-bus/transport/consumer-loop.js.map +1 -0
- package/dist/command-bus/transport/consumer-loop.spec.js +216 -0
- package/dist/command-bus/transport/consumer-loop.spec.js.map +1 -0
- package/dist/command-bus/transport/index.d.ts +21 -0
- package/dist/command-bus/transport/index.js +23 -0
- package/dist/command-bus/transport/index.js.map +1 -0
- package/dist/command-bus/transport/message-processor.d.ts +59 -0
- package/dist/command-bus/transport/message-processor.js +111 -0
- package/dist/command-bus/transport/message-processor.js.map +1 -0
- package/dist/command-bus/transport/message-processor.spec.js +185 -0
- package/dist/command-bus/transport/message-processor.spec.js.map +1 -0
- package/dist/command-bus/transport/pending-recovery.d.ts +54 -0
- package/dist/command-bus/transport/pending-recovery.js +139 -0
- package/dist/command-bus/transport/pending-recovery.js.map +1 -0
- package/dist/command-bus/transport/pending-recovery.spec.js +176 -0
- package/dist/command-bus/transport/pending-recovery.spec.js.map +1 -0
- package/dist/command-bus/transport/redis-codec.d.ts +24 -0
- package/dist/command-bus/transport/redis-codec.js +33 -0
- package/dist/command-bus/transport/redis-codec.js.map +1 -0
- package/dist/command-bus/transport/redis-codec.spec.js +53 -0
- package/dist/command-bus/transport/redis-codec.spec.js.map +1 -0
- package/dist/command-bus/transport/redis-streams-transport.d.ts +91 -0
- package/dist/command-bus/transport/redis-streams-transport.js +134 -0
- package/dist/command-bus/transport/redis-streams-transport.js.map +1 -0
- package/dist/command-bus/transport/redis-streams-transport.spec.js +420 -0
- package/dist/command-bus/transport/redis-streams-transport.spec.js.map +1 -0
- package/dist/command-bus/transport/rpc-handler.d.ts +39 -0
- package/dist/command-bus/transport/rpc-handler.js +87 -0
- package/dist/command-bus/transport/rpc-handler.js.map +1 -0
- package/dist/command-bus/transport/rpc-handler.spec.js +157 -0
- package/dist/command-bus/transport/rpc-handler.spec.js.map +1 -0
- package/dist/command-bus/transport/stream-consumer.d.ts +89 -0
- package/dist/command-bus/transport/stream-consumer.js +181 -0
- package/dist/command-bus/transport/stream-consumer.js.map +1 -0
- package/dist/command-bus/transport/stream-consumer.spec.js +284 -0
- package/dist/command-bus/transport/stream-consumer.spec.js.map +1 -0
- package/dist/command-bus/transport/stream-producer.d.ts +23 -0
- package/dist/command-bus/transport/stream-producer.js +70 -0
- package/dist/command-bus/transport/stream-producer.js.map +1 -0
- package/dist/command-bus/transport/stream-producer.spec.js +125 -0
- package/dist/command-bus/transport/stream-producer.spec.js.map +1 -0
- package/dist/command-bus/transport/transport.interface.d.ts +87 -0
- package/dist/command-bus/transport/transport.interface.js +3 -0
- package/dist/command-bus/transport/transport.interface.js.map +1 -0
- package/dist/command-bus/types/index.d.ts +9 -80
- package/dist/examples/rpc-throughput.demo.js +24 -22
- package/dist/examples/rpc-throughput.demo.js.map +1 -1
- package/dist/examples/rpc.demo.js +47 -53
- package/dist/examples/rpc.demo.js.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/pp-command-bus-2.0.0.tgz +0 -0
- package/dist/shared/redis/connection-pool.d.ts +54 -0
- package/dist/shared/redis/connection-pool.js +117 -0
- package/dist/shared/redis/connection-pool.js.map +1 -0
- package/dist/shared/redis/connection-pool.spec.js +114 -0
- package/dist/shared/redis/connection-pool.spec.js.map +1 -0
- package/dist/shared/redis/index.d.ts +5 -3
- package/dist/shared/redis/index.js +6 -4
- package/dist/shared/redis/index.js.map +1 -1
- package/dist/shared/redis/rpc-connection-pool.d.ts +61 -0
- package/dist/shared/redis/rpc-connection-pool.js +154 -0
- package/dist/shared/redis/rpc-connection-pool.js.map +1 -0
- package/dist/shared/redis/rpc-connection-pool.spec.d.ts +1 -0
- package/dist/shared/redis/rpc-connection-pool.spec.js +173 -0
- package/dist/shared/redis/rpc-connection-pool.spec.js.map +1 -0
- package/dist/shared/types.d.ts +0 -4
- package/dist/shared/utils/error-utils.d.ts +8 -0
- package/dist/shared/utils/error-utils.js +14 -0
- package/dist/shared/utils/error-utils.js.map +1 -0
- package/package.json +12 -12
- package/dist/command-bus/config/auto-config-optimizer.d.ts +0 -35
- package/dist/command-bus/config/auto-config-optimizer.js +0 -52
- package/dist/command-bus/config/auto-config-optimizer.js.map +0 -1
- package/dist/command-bus/config/auto-config-optimizer.spec.js +0 -42
- package/dist/command-bus/config/auto-config-optimizer.spec.js.map +0 -1
- package/dist/command-bus/job/index.d.ts +0 -6
- package/dist/command-bus/job/index.js +0 -15
- package/dist/command-bus/job/index.js.map +0 -1
- package/dist/command-bus/job/job-options-builder.d.ts +0 -21
- package/dist/command-bus/job/job-options-builder.js +0 -58
- package/dist/command-bus/job/job-options-builder.js.map +0 -1
- package/dist/command-bus/job/job-options-builder.spec.js +0 -156
- package/dist/command-bus/job/job-options-builder.spec.js.map +0 -1
- package/dist/command-bus/job/job-processor.d.ts +0 -39
- package/dist/command-bus/job/job-processor.js +0 -203
- package/dist/command-bus/job/job-processor.js.map +0 -1
- package/dist/command-bus/job/job-processor.spec.js +0 -437
- package/dist/command-bus/job/job-processor.spec.js.map +0 -1
- package/dist/command-bus/queue/index.d.ts +0 -5
- package/dist/command-bus/queue/index.js +0 -13
- package/dist/command-bus/queue/index.js.map +0 -1
- package/dist/command-bus/queue/queue-manager.d.ts +0 -56
- package/dist/command-bus/queue/queue-manager.js +0 -163
- package/dist/command-bus/queue/queue-manager.js.map +0 -1
- package/dist/command-bus/queue/queue-manager.spec.js +0 -371
- package/dist/command-bus/queue/queue-manager.spec.js.map +0 -1
- package/dist/command-bus/rpc/index.d.ts +0 -11
- package/dist/command-bus/rpc/index.js +0 -19
- package/dist/command-bus/rpc/index.js.map +0 -1
- package/dist/command-bus/rpc/payload-compression.service.d.ts +0 -51
- package/dist/command-bus/rpc/payload-compression.service.js +0 -218
- package/dist/command-bus/rpc/payload-compression.service.js.map +0 -1
- package/dist/command-bus/rpc/payload-compression.service.spec.js +0 -379
- package/dist/command-bus/rpc/payload-compression.service.spec.js.map +0 -1
- package/dist/command-bus/rpc/rpc-coordinator.d.ts +0 -96
- package/dist/command-bus/rpc/rpc-coordinator.js +0 -500
- package/dist/command-bus/rpc/rpc-coordinator.js.map +0 -1
- package/dist/command-bus/rpc/rpc-coordinator.spec.js +0 -622
- package/dist/command-bus/rpc/rpc-coordinator.spec.js.map +0 -1
- package/dist/command-bus/rpc/rpc-job-cancellation.service.d.ts +0 -82
- package/dist/command-bus/rpc/rpc-job-cancellation.service.js +0 -180
- package/dist/command-bus/rpc/rpc-job-cancellation.service.js.map +0 -1
- package/dist/command-bus/rpc/rpc-job-cancellation.service.spec.js +0 -286
- package/dist/command-bus/rpc/rpc-job-cancellation.service.spec.js.map +0 -1
- package/dist/command-bus/worker/index.d.ts +0 -10
- package/dist/command-bus/worker/index.js +0 -19
- package/dist/command-bus/worker/index.js.map +0 -1
- package/dist/command-bus/worker/worker-benchmark.d.ts +0 -71
- package/dist/command-bus/worker/worker-benchmark.js +0 -203
- package/dist/command-bus/worker/worker-benchmark.js.map +0 -1
- package/dist/command-bus/worker/worker-benchmark.spec.js +0 -310
- package/dist/command-bus/worker/worker-benchmark.spec.js.map +0 -1
- package/dist/command-bus/worker/worker-metrics-collector.d.ts +0 -98
- package/dist/command-bus/worker/worker-metrics-collector.js +0 -242
- package/dist/command-bus/worker/worker-metrics-collector.js.map +0 -1
- package/dist/command-bus/worker/worker-orchestrator.d.ts +0 -70
- package/dist/command-bus/worker/worker-orchestrator.js +0 -339
- package/dist/command-bus/worker/worker-orchestrator.js.map +0 -1
- package/dist/command-bus/worker/worker-orchestrator.spec.js +0 -712
- package/dist/command-bus/worker/worker-orchestrator.spec.js.map +0 -1
- package/dist/examples/auto-config.demo.d.ts +0 -9
- package/dist/examples/auto-config.demo.js +0 -106
- package/dist/examples/auto-config.demo.js.map +0 -1
- package/dist/examples/rpc-compression.demo.d.ts +0 -5
- package/dist/examples/rpc-compression.demo.js +0 -363
- package/dist/examples/rpc-compression.demo.js.map +0 -1
- package/dist/examples/rpc-resilience.demo.d.ts +0 -11
- package/dist/examples/rpc-resilience.demo.js +0 -235
- package/dist/examples/rpc-resilience.demo.js.map +0 -1
- package/dist/pp-command-bus-1.4.0.tgz +0 -0
- package/dist/shared/config/base-config.d.ts +0 -54
- package/dist/shared/config/base-config.js +0 -114
- package/dist/shared/config/base-config.js.map +0 -1
- package/dist/shared/config/base-config.spec.js +0 -204
- package/dist/shared/config/base-config.spec.js.map +0 -1
- package/dist/shared/config/index.d.ts +0 -1
- package/dist/shared/config/index.js +0 -9
- package/dist/shared/config/index.js.map +0 -1
- package/dist/shared/redis/redis-connection-factory.d.ts +0 -66
- package/dist/shared/redis/redis-connection-factory.js +0 -113
- package/dist/shared/redis/redis-connection-factory.js.map +0 -1
- /package/dist/command-bus/{config/auto-config-optimizer.spec.d.ts → serialization/msgpack-serializer.spec.d.ts} +0 -0
- /package/dist/command-bus/{job/job-options-builder.spec.d.ts → transport/consumer-loop.spec.d.ts} +0 -0
- /package/dist/command-bus/{job/job-processor.spec.d.ts → transport/message-processor.spec.d.ts} +0 -0
- /package/dist/command-bus/{queue/queue-manager.spec.d.ts → transport/pending-recovery.spec.d.ts} +0 -0
- /package/dist/command-bus/{rpc/payload-compression.service.spec.d.ts → transport/redis-codec.spec.d.ts} +0 -0
- /package/dist/command-bus/{rpc/rpc-coordinator.spec.d.ts → transport/redis-streams-transport.spec.d.ts} +0 -0
- /package/dist/command-bus/{rpc/rpc-job-cancellation.service.spec.d.ts → transport/rpc-handler.spec.d.ts} +0 -0
- /package/dist/command-bus/{worker/worker-benchmark.spec.d.ts → transport/stream-consumer.spec.d.ts} +0 -0
- /package/dist/command-bus/{worker/worker-orchestrator.spec.d.ts → transport/stream-producer.spec.d.ts} +0 -0
- /package/dist/shared/{config/base-config.spec.d.ts → redis/connection-pool.spec.d.ts} +0 -0
|
@@ -1,437 +0,0 @@
|
|
|
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 mockRedisConnection;
|
|
28
|
-
let mockLogger;
|
|
29
|
-
let mockJobOptionsBuilder;
|
|
30
|
-
let mockCompressionService;
|
|
31
|
-
let mockCommandLogger;
|
|
32
|
-
let mockCancellationService;
|
|
33
|
-
beforeEach(() => {
|
|
34
|
-
jest.clearAllMocks();
|
|
35
|
-
mockLogger = {
|
|
36
|
-
log: jest.fn(),
|
|
37
|
-
error: jest.fn(),
|
|
38
|
-
warn: jest.fn(),
|
|
39
|
-
debug: jest.fn(),
|
|
40
|
-
};
|
|
41
|
-
mockRedisConnection = {
|
|
42
|
-
publish: jest.fn().mockResolvedValue(1), // Redis publish zwraca liczbę subscribers
|
|
43
|
-
};
|
|
44
|
-
mockJobOptionsBuilder = {
|
|
45
|
-
buildRpcReplyOptions: jest.fn().mockReturnValue({}),
|
|
46
|
-
};
|
|
47
|
-
mockCompressionService = {
|
|
48
|
-
compress: jest.fn().mockImplementation((payload) => Promise.resolve({
|
|
49
|
-
data: JSON.stringify(payload),
|
|
50
|
-
compressed: false,
|
|
51
|
-
})),
|
|
52
|
-
decompress: jest.fn().mockResolvedValue({}),
|
|
53
|
-
};
|
|
54
|
-
mockCommandLogger = {
|
|
55
|
-
logCommand: jest.fn().mockResolvedValue(undefined),
|
|
56
|
-
};
|
|
57
|
-
mockCancellationService = {
|
|
58
|
-
markAsCancelled: jest.fn().mockResolvedValue(undefined),
|
|
59
|
-
isCancelled: jest.fn().mockResolvedValue(false),
|
|
60
|
-
clearCancellation: jest.fn().mockResolvedValue(undefined),
|
|
61
|
-
tryRemoveJob: jest.fn().mockResolvedValue(false),
|
|
62
|
-
};
|
|
63
|
-
mockCommandHandlers = {};
|
|
64
|
-
jobProcessor = new job_processor_1.default(mockCommandHandlers, mockRedisConnection, mockLogger, mockJobOptionsBuilder, mockCompressionService, mockCommandLogger, mockCancellationService);
|
|
65
|
-
});
|
|
66
|
-
describe('process - standardowy job', () => {
|
|
67
|
-
it('powinno przetworzyć komendę i wywołać handler', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
68
|
-
// Given
|
|
69
|
-
const command = new TestCommand('test data');
|
|
70
|
-
const commandName = 'TestCommand';
|
|
71
|
-
const mockHandler = jest.fn().mockResolvedValue({ success: true });
|
|
72
|
-
mockCommandHandlers[commandName] = mockHandler;
|
|
73
|
-
const job = {
|
|
74
|
-
id: 'job-123',
|
|
75
|
-
data: command,
|
|
76
|
-
attemptsMade: 0,
|
|
77
|
-
opts: { attempts: 1 },
|
|
78
|
-
};
|
|
79
|
-
// When
|
|
80
|
-
const result = yield jobProcessor.process(job, commandName);
|
|
81
|
-
// Then
|
|
82
|
-
expect(result).toEqual({ success: true });
|
|
83
|
-
expect(mockHandler).toHaveBeenCalledWith(command);
|
|
84
|
-
expect(mockLogger.debug).toHaveBeenCalledWith('Rozpoczynam przetwarzanie komendy', expect.objectContaining({
|
|
85
|
-
commandName,
|
|
86
|
-
commandId: command.__id,
|
|
87
|
-
jobId: 'job-123',
|
|
88
|
-
}));
|
|
89
|
-
expect(mockLogger.log).toHaveBeenCalledWith('Handler komendy wykonany pomyślnie', expect.objectContaining({
|
|
90
|
-
commandName,
|
|
91
|
-
commandId: command.__id,
|
|
92
|
-
jobId: 'job-123',
|
|
93
|
-
}));
|
|
94
|
-
}));
|
|
95
|
-
it('powinno zalogować komendę gdy commandLogger jest dostępny', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
96
|
-
// Given
|
|
97
|
-
const command = new TestCommand('test data');
|
|
98
|
-
const commandName = 'TestCommand';
|
|
99
|
-
const mockHandler = jest.fn().mockResolvedValue(undefined);
|
|
100
|
-
mockCommandHandlers[commandName] = mockHandler;
|
|
101
|
-
const job = {
|
|
102
|
-
id: 'job-123',
|
|
103
|
-
data: command,
|
|
104
|
-
attemptsMade: 0,
|
|
105
|
-
};
|
|
106
|
-
// When
|
|
107
|
-
yield jobProcessor.process(job, commandName);
|
|
108
|
-
// Then
|
|
109
|
-
expect(mockCommandLogger.logCommand).toHaveBeenCalledWith(command);
|
|
110
|
-
}));
|
|
111
|
-
it('powinno rzucić błąd gdy brak handlera dla komendy', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
112
|
-
// Given
|
|
113
|
-
const command = new TestCommand('test data');
|
|
114
|
-
const commandName = 'TestCommand';
|
|
115
|
-
const job = {
|
|
116
|
-
id: 'job-123',
|
|
117
|
-
data: command,
|
|
118
|
-
attemptsMade: 0,
|
|
119
|
-
};
|
|
120
|
-
// When & Then
|
|
121
|
-
yield expect(jobProcessor.process(job, commandName)).rejects.toThrow(`Brak handlera dla komendy ${commandName}`);
|
|
122
|
-
expect(mockLogger.error).toHaveBeenCalledWith('Brak handlera dla komendy', expect.objectContaining({
|
|
123
|
-
commandName,
|
|
124
|
-
commandId: command.__id,
|
|
125
|
-
}));
|
|
126
|
-
}));
|
|
127
|
-
it('powinno obsłużyć błąd z handlera', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
128
|
-
// Given
|
|
129
|
-
const command = new TestCommand('test data');
|
|
130
|
-
const commandName = 'TestCommand';
|
|
131
|
-
const handlerError = new Error('Handler error');
|
|
132
|
-
const mockHandler = jest.fn().mockRejectedValue(handlerError);
|
|
133
|
-
mockCommandHandlers[commandName] = mockHandler;
|
|
134
|
-
const job = {
|
|
135
|
-
id: 'job-123',
|
|
136
|
-
data: command,
|
|
137
|
-
attemptsMade: 1,
|
|
138
|
-
opts: { attempts: 1 },
|
|
139
|
-
};
|
|
140
|
-
// When & Then
|
|
141
|
-
yield expect(jobProcessor.process(job, commandName)).rejects.toThrow('Handler error');
|
|
142
|
-
expect(mockLogger.error).toHaveBeenCalledWith('Błąd podczas wykonywania handlera komendy', expect.objectContaining({
|
|
143
|
-
commandName,
|
|
144
|
-
commandId: command.__id,
|
|
145
|
-
error: 'Handler error',
|
|
146
|
-
attempt: 2,
|
|
147
|
-
}));
|
|
148
|
-
}));
|
|
149
|
-
});
|
|
150
|
-
describe('process - RPC job', () => {
|
|
151
|
-
it('powinno wysłać odpowiedź RPC po pomyślnym wykonaniu', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
152
|
-
// Given
|
|
153
|
-
const command = new TestCommand('test data');
|
|
154
|
-
const commandName = 'TestCommand';
|
|
155
|
-
const result = { success: true, data: 42 };
|
|
156
|
-
const mockHandler = jest.fn().mockResolvedValue(result);
|
|
157
|
-
mockCommandHandlers[commandName] = mockHandler;
|
|
158
|
-
const testProcessInstanceId = '00000000-0000-0000-0000-000000000000'; // UUID dla testów
|
|
159
|
-
const rpcMetadata = {
|
|
160
|
-
correlationId: 'correlation-123',
|
|
161
|
-
responseChannel: `rpc:response:${testProcessInstanceId}:correlation-123`,
|
|
162
|
-
timestamp: Date.now(),
|
|
163
|
-
compressed: true,
|
|
164
|
-
};
|
|
165
|
-
const job = {
|
|
166
|
-
id: 'job-123',
|
|
167
|
-
data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
|
|
168
|
-
attemptsMade: 0,
|
|
169
|
-
};
|
|
170
|
-
// When
|
|
171
|
-
const actualResult = yield jobProcessor.process(job, commandName);
|
|
172
|
-
// Then
|
|
173
|
-
expect(actualResult).toEqual(result);
|
|
174
|
-
expect(mockRedisConnection.publish).toHaveBeenCalledWith(`rpc:response:${testProcessInstanceId}:correlation-123`, JSON.stringify({
|
|
175
|
-
data: JSON.stringify({
|
|
176
|
-
correlationId: 'correlation-123',
|
|
177
|
-
result,
|
|
178
|
-
error: null,
|
|
179
|
-
}),
|
|
180
|
-
compressed: false,
|
|
181
|
-
}));
|
|
182
|
-
expect(mockLogger.debug).toHaveBeenCalledWith('Odpowiedź RPC opublikowana przez Pub/Sub', expect.objectContaining({
|
|
183
|
-
commandName,
|
|
184
|
-
correlationId: 'correlation-123',
|
|
185
|
-
responseChannel: `rpc:response:${testProcessInstanceId}:correlation-123`,
|
|
186
|
-
compressed: false,
|
|
187
|
-
}));
|
|
188
|
-
}));
|
|
189
|
-
it('powinno wysłać błąd RPC gdy handler rzuci błąd', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
190
|
-
// Given
|
|
191
|
-
const command = new TestCommand('test data');
|
|
192
|
-
const commandName = 'TestCommand';
|
|
193
|
-
const handlerError = new Error('Handler failed');
|
|
194
|
-
const mockHandler = jest.fn().mockRejectedValue(handlerError);
|
|
195
|
-
mockCommandHandlers[commandName] = mockHandler;
|
|
196
|
-
const testProcessInstanceId = '00000000-0000-0000-0000-000000000000'; // UUID dla testów
|
|
197
|
-
const rpcMetadata = {
|
|
198
|
-
correlationId: 'correlation-123',
|
|
199
|
-
responseChannel: `rpc:response:${testProcessInstanceId}:correlation-123`,
|
|
200
|
-
timestamp: Date.now(),
|
|
201
|
-
compressed: true,
|
|
202
|
-
};
|
|
203
|
-
const job = {
|
|
204
|
-
id: 'job-123',
|
|
205
|
-
data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
|
|
206
|
-
attemptsMade: 0,
|
|
207
|
-
};
|
|
208
|
-
// When & Then
|
|
209
|
-
yield expect(jobProcessor.process(job, commandName)).rejects.toThrow('Handler failed');
|
|
210
|
-
expect(mockRedisConnection.publish).toHaveBeenCalledWith(`rpc:response:${testProcessInstanceId}:correlation-123`, JSON.stringify({
|
|
211
|
-
data: JSON.stringify({
|
|
212
|
-
correlationId: 'correlation-123',
|
|
213
|
-
result: null,
|
|
214
|
-
error: 'Handler failed',
|
|
215
|
-
}),
|
|
216
|
-
compressed: false,
|
|
217
|
-
}));
|
|
218
|
-
}));
|
|
219
|
-
it('powinno zalogować błąd gdy nie udało się wysłać odpowiedzi RPC', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
220
|
-
// Given
|
|
221
|
-
const command = new TestCommand('test data');
|
|
222
|
-
const commandName = 'TestCommand';
|
|
223
|
-
const result = { success: true };
|
|
224
|
-
const mockHandler = jest.fn().mockResolvedValue(result);
|
|
225
|
-
mockCommandHandlers[commandName] = mockHandler;
|
|
226
|
-
const publishError = new Error('Redis publish error');
|
|
227
|
-
mockRedisConnection.publish.mockRejectedValueOnce(publishError);
|
|
228
|
-
const testProcessInstanceId = '00000000-0000-0000-0000-000000000000'; // UUID dla testów
|
|
229
|
-
const rpcMetadata = {
|
|
230
|
-
correlationId: 'correlation-123',
|
|
231
|
-
responseChannel: `rpc:response:${testProcessInstanceId}:correlation-123`,
|
|
232
|
-
timestamp: Date.now(),
|
|
233
|
-
compressed: true,
|
|
234
|
-
};
|
|
235
|
-
const job = {
|
|
236
|
-
id: 'job-123',
|
|
237
|
-
data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
|
|
238
|
-
attemptsMade: 0,
|
|
239
|
-
};
|
|
240
|
-
// When
|
|
241
|
-
yield jobProcessor.process(job, commandName);
|
|
242
|
-
// Then
|
|
243
|
-
expect(mockLogger.error).toHaveBeenCalledWith('Nie udało się opublikować odpowiedzi RPC', expect.objectContaining({
|
|
244
|
-
commandName,
|
|
245
|
-
correlationId: 'correlation-123',
|
|
246
|
-
error: 'Redis publish error',
|
|
247
|
-
}));
|
|
248
|
-
}));
|
|
249
|
-
// Testy dla queueExists zostały usunięte - Pub/Sub nie wymaga sprawdzania istnienia kolejki
|
|
250
|
-
});
|
|
251
|
-
describe('rekonstrukcja dat', () => {
|
|
252
|
-
it('powinno zrekonstruować daty w komendzie', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
253
|
-
// Given
|
|
254
|
-
const commandName = 'TestCommand';
|
|
255
|
-
const serializedDate = new Date('2025-01-01').toISOString();
|
|
256
|
-
const mockHandler = jest.fn().mockResolvedValue(undefined);
|
|
257
|
-
mockCommandHandlers[commandName] = mockHandler;
|
|
258
|
-
// Spy na Command.reconstructDates
|
|
259
|
-
const reconstructDatesSpy = jest.spyOn(command_1.default, 'reconstructDates');
|
|
260
|
-
const job = {
|
|
261
|
-
id: 'job-123',
|
|
262
|
-
data: {
|
|
263
|
-
__name: 'TestCommand',
|
|
264
|
-
__id: 'cmd-123',
|
|
265
|
-
__time: Date.now(),
|
|
266
|
-
data: 'test',
|
|
267
|
-
someDate: serializedDate,
|
|
268
|
-
},
|
|
269
|
-
attemptsMade: 0,
|
|
270
|
-
};
|
|
271
|
-
// When
|
|
272
|
-
yield jobProcessor.process(job, commandName);
|
|
273
|
-
// Then
|
|
274
|
-
expect(reconstructDatesSpy).toHaveBeenCalledWith(job.data);
|
|
275
|
-
// Sprawdź że handler został wywołany z przekonwertowanymi datami
|
|
276
|
-
expect(mockHandler).toHaveBeenCalled();
|
|
277
|
-
const calledCommand = mockHandler.mock.calls[0][0];
|
|
278
|
-
expect(calledCommand.someDate).toBeInstanceOf(Date);
|
|
279
|
-
reconstructDatesSpy.mockRestore();
|
|
280
|
-
}));
|
|
281
|
-
});
|
|
282
|
-
describe('process bez commandLogger', () => {
|
|
283
|
-
it('powinno działać gdy commandLogger nie jest dostępny', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
284
|
-
// Given
|
|
285
|
-
const jobProcessorWithoutLogger = new job_processor_1.default(mockCommandHandlers, mockRedisConnection, mockLogger, mockJobOptionsBuilder, mockCompressionService);
|
|
286
|
-
const command = new TestCommand('test data');
|
|
287
|
-
const commandName = 'TestCommand';
|
|
288
|
-
const mockHandler = jest.fn().mockResolvedValue({ success: true });
|
|
289
|
-
mockCommandHandlers[commandName] = mockHandler;
|
|
290
|
-
const job = {
|
|
291
|
-
id: 'job-123',
|
|
292
|
-
data: command,
|
|
293
|
-
attemptsMade: 0,
|
|
294
|
-
};
|
|
295
|
-
// When
|
|
296
|
-
const result = yield jobProcessorWithoutLogger.process(job, commandName);
|
|
297
|
-
// Then
|
|
298
|
-
expect(result).toEqual({ success: true });
|
|
299
|
-
expect(mockHandler).toHaveBeenCalled();
|
|
300
|
-
}));
|
|
301
|
-
});
|
|
302
|
-
describe('process - RPC cancellation', () => {
|
|
303
|
-
it('powinno pominąć przetwarzanie gdy RPC zostało anulowane (timeout)', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
304
|
-
// Given
|
|
305
|
-
const command = new TestCommand('test data');
|
|
306
|
-
const commandName = 'TestCommand';
|
|
307
|
-
const mockHandler = jest.fn().mockResolvedValue({ success: true });
|
|
308
|
-
mockCommandHandlers[commandName] = mockHandler;
|
|
309
|
-
const rpcMetadata = {
|
|
310
|
-
correlationId: 'cancelled-correlation-123',
|
|
311
|
-
responseChannel: 'rpc:response:test:cancelled-correlation-123',
|
|
312
|
-
timestamp: Date.now(),
|
|
313
|
-
compressed: false,
|
|
314
|
-
};
|
|
315
|
-
const job = {
|
|
316
|
-
id: 'job-cancelled',
|
|
317
|
-
data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
|
|
318
|
-
attemptsMade: 0,
|
|
319
|
-
};
|
|
320
|
-
// Symuluj że RPC zostało anulowane
|
|
321
|
-
mockCancellationService.isCancelled.mockResolvedValue(true);
|
|
322
|
-
// When
|
|
323
|
-
const result = yield jobProcessor.process(job, commandName);
|
|
324
|
-
// Then
|
|
325
|
-
expect(result).toBeUndefined(); // Brak wyniku - przetwarzanie pominięte
|
|
326
|
-
expect(mockHandler).not.toHaveBeenCalled(); // Handler NIE wywołany
|
|
327
|
-
expect(mockRedisConnection.publish).not.toHaveBeenCalled(); // Odpowiedź NIE wysłana
|
|
328
|
-
expect(mockCancellationService.isCancelled).toHaveBeenCalledWith('cancelled-correlation-123');
|
|
329
|
-
expect(mockCancellationService.clearCancellation).toHaveBeenCalledWith('cancelled-correlation-123');
|
|
330
|
-
expect(mockLogger.warn).toHaveBeenCalledWith(expect.stringContaining('Pomijam przetwarzanie - RPC zostało anulowane'), expect.objectContaining({
|
|
331
|
-
commandName,
|
|
332
|
-
correlationId: 'cancelled-correlation-123',
|
|
333
|
-
jobId: 'job-cancelled',
|
|
334
|
-
}));
|
|
335
|
-
}));
|
|
336
|
-
it('powinno przetworzyć normalnie gdy RPC nie jest anulowane', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
337
|
-
// Given
|
|
338
|
-
const command = new TestCommand('test data');
|
|
339
|
-
const commandName = 'TestCommand';
|
|
340
|
-
const result = { success: true };
|
|
341
|
-
const mockHandler = jest.fn().mockResolvedValue(result);
|
|
342
|
-
mockCommandHandlers[commandName] = mockHandler;
|
|
343
|
-
const rpcMetadata = {
|
|
344
|
-
correlationId: 'active-correlation-456',
|
|
345
|
-
responseChannel: 'rpc:response:test:active-correlation-456',
|
|
346
|
-
timestamp: Date.now(),
|
|
347
|
-
compressed: false,
|
|
348
|
-
};
|
|
349
|
-
const job = {
|
|
350
|
-
id: 'job-active',
|
|
351
|
-
data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
|
|
352
|
-
attemptsMade: 0,
|
|
353
|
-
};
|
|
354
|
-
// Symuluj że RPC NIE zostało anulowane
|
|
355
|
-
mockCancellationService.isCancelled.mockResolvedValue(false);
|
|
356
|
-
// When
|
|
357
|
-
const actualResult = yield jobProcessor.process(job, commandName);
|
|
358
|
-
// Then
|
|
359
|
-
expect(actualResult).toEqual(result);
|
|
360
|
-
expect(mockHandler).toHaveBeenCalled(); // Handler wywołany
|
|
361
|
-
expect(mockRedisConnection.publish).toHaveBeenCalled(); // Odpowiedź wysłana
|
|
362
|
-
expect(mockCancellationService.isCancelled).toHaveBeenCalledWith('active-correlation-456');
|
|
363
|
-
expect(mockCancellationService.clearCancellation).not.toHaveBeenCalled(); // NIE wywołane dla aktywnych
|
|
364
|
-
}));
|
|
365
|
-
it('powinno NIE sprawdzać cancellation dla jobów bez RPC metadata', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
366
|
-
// Given
|
|
367
|
-
const command = new TestCommand('test data');
|
|
368
|
-
const commandName = 'TestCommand';
|
|
369
|
-
const mockHandler = jest.fn().mockResolvedValue({ success: true });
|
|
370
|
-
mockCommandHandlers[commandName] = mockHandler;
|
|
371
|
-
const job = {
|
|
372
|
-
id: 'job-no-rpc',
|
|
373
|
-
data: command, // Brak __rpcMetadata
|
|
374
|
-
attemptsMade: 0,
|
|
375
|
-
};
|
|
376
|
-
// When
|
|
377
|
-
yield jobProcessor.process(job, commandName);
|
|
378
|
-
// Then
|
|
379
|
-
expect(mockCancellationService.isCancelled).not.toHaveBeenCalled(); // NIE sprawdzano
|
|
380
|
-
expect(mockHandler).toHaveBeenCalled(); // Handler wywołany normalnie
|
|
381
|
-
}));
|
|
382
|
-
it('powinno kontynuować przetwarzanie gdy cancellation service zwraca błąd (graceful degradation)', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
383
|
-
// Given
|
|
384
|
-
const command = new TestCommand('test data');
|
|
385
|
-
const commandName = 'TestCommand';
|
|
386
|
-
const result = { success: true };
|
|
387
|
-
const mockHandler = jest.fn().mockResolvedValue(result);
|
|
388
|
-
mockCommandHandlers[commandName] = mockHandler;
|
|
389
|
-
const rpcMetadata = {
|
|
390
|
-
correlationId: 'error-correlation-789',
|
|
391
|
-
responseChannel: 'rpc:response:test:error-correlation-789',
|
|
392
|
-
timestamp: Date.now(),
|
|
393
|
-
compressed: false,
|
|
394
|
-
};
|
|
395
|
-
const job = {
|
|
396
|
-
id: 'job-error',
|
|
397
|
-
data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
|
|
398
|
-
attemptsMade: 0,
|
|
399
|
-
};
|
|
400
|
-
// Symuluj błąd Redis w cancellation service
|
|
401
|
-
// (serwis zwraca false przy błędzie - graceful degradation)
|
|
402
|
-
mockCancellationService.isCancelled.mockResolvedValue(false);
|
|
403
|
-
// When
|
|
404
|
-
const actualResult = yield jobProcessor.process(job, commandName);
|
|
405
|
-
// Then - przetworzono normalnie (graceful degradation)
|
|
406
|
-
expect(actualResult).toEqual(result);
|
|
407
|
-
expect(mockHandler).toHaveBeenCalled();
|
|
408
|
-
}));
|
|
409
|
-
it('powinno działać bez cancellation service (backwards compatibility)', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
410
|
-
// Given
|
|
411
|
-
const jobProcessorWithoutCancellation = new job_processor_1.default(mockCommandHandlers, mockRedisConnection, mockLogger, mockJobOptionsBuilder, mockCompressionService, mockCommandLogger);
|
|
412
|
-
const command = new TestCommand('test data');
|
|
413
|
-
const commandName = 'TestCommand';
|
|
414
|
-
const result = { success: true };
|
|
415
|
-
const mockHandler = jest.fn().mockResolvedValue(result);
|
|
416
|
-
mockCommandHandlers[commandName] = mockHandler;
|
|
417
|
-
const rpcMetadata = {
|
|
418
|
-
correlationId: 'no-service-correlation',
|
|
419
|
-
responseChannel: 'rpc:response:test:no-service-correlation',
|
|
420
|
-
timestamp: Date.now(),
|
|
421
|
-
compressed: false,
|
|
422
|
-
};
|
|
423
|
-
const job = {
|
|
424
|
-
id: 'job-no-service',
|
|
425
|
-
data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
|
|
426
|
-
attemptsMade: 0,
|
|
427
|
-
};
|
|
428
|
-
// When
|
|
429
|
-
const actualResult = yield jobProcessorWithoutCancellation.process(job, commandName);
|
|
430
|
-
// Then - przetworzono normalnie
|
|
431
|
-
expect(actualResult).toEqual(result);
|
|
432
|
-
expect(mockHandler).toHaveBeenCalled();
|
|
433
|
-
expect(mockRedisConnection.publish).toHaveBeenCalled();
|
|
434
|
-
}));
|
|
435
|
-
});
|
|
436
|
-
});
|
|
437
|
-
//# sourceMappingURL=job-processor.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"job-processor.spec.js","sourceRoot":"","sources":["../../../src/command-bus/job/job-processor.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
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
|
-
exports.QueueManager = void 0;
|
|
7
|
-
/**
|
|
8
|
-
* Moduł zarządzania kolejkami BullMQ
|
|
9
|
-
* Eksportuje QueueManager odpowiedzialny za lifecycle kolejek
|
|
10
|
-
*/
|
|
11
|
-
var queue_manager_1 = require("./queue-manager");
|
|
12
|
-
Object.defineProperty(exports, "QueueManager", { enumerable: true, get: function () { return __importDefault(queue_manager_1).default; } });
|
|
13
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/command-bus/queue/index.ts"],"names":[],"mappings":";;;;;;AAAA;;;GAGG;AACH,iDAA0D;AAAjD,8HAAA,OAAO,OAAgB"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { Queue } from 'bullmq';
|
|
2
|
-
import type { Redis } from 'ioredis';
|
|
3
|
-
import type { ILogger } from '../../shared/types';
|
|
4
|
-
/**
|
|
5
|
-
* Zarządza cyklem życia kolejek BullMQ i cache'em kolejek
|
|
6
|
-
* Cache zapobiega tworzeniu wielu instancji Queue dla tej samej komendy
|
|
7
|
-
*/
|
|
8
|
-
export default class QueueManager {
|
|
9
|
-
private readonly redisConnection;
|
|
10
|
-
private readonly logger;
|
|
11
|
-
/**
|
|
12
|
-
* Cache kolejek - Map<queueName, Queue>
|
|
13
|
-
* Pozwala na reużycie tej samej instancji Queue dla danej komendy
|
|
14
|
-
*/
|
|
15
|
-
private queueCache;
|
|
16
|
-
constructor(redisConnection: Redis, logger: ILogger);
|
|
17
|
-
/**
|
|
18
|
-
* Pobiera lub tworzy kolejkę dla danego typu komendy
|
|
19
|
-
* Używa cache dla optymalizacji pamięci - reużywa instancje Queue
|
|
20
|
-
* @param commandName - Nazwa komendy
|
|
21
|
-
* @param connection - Połączenie Redis (opcjonalne)
|
|
22
|
-
* @returns Instancja Queue (z cache lub nowo utworzona)
|
|
23
|
-
*/
|
|
24
|
-
getOrCreateQueue(commandName: string, connection?: Redis): Queue;
|
|
25
|
-
/**
|
|
26
|
-
* Tworzy kolejkę dla danego typu komendy (bez cache)
|
|
27
|
-
* Używane dla tymczasowych kolejek (np. RPC reply queues)
|
|
28
|
-
* @param commandName - Nazwa komendy
|
|
29
|
-
* @param connection - Połączenie Redis (opcjonalne)
|
|
30
|
-
*/
|
|
31
|
-
createQueue(commandName: string, connection?: Redis): Queue;
|
|
32
|
-
/**
|
|
33
|
-
* Sprawdza czy kolejka BullMQ istnieje w Redis
|
|
34
|
-
* @param queueName - Nazwa kolejki do sprawdzenia
|
|
35
|
-
* @returns true jeśli kolejka istnieje, false w przeciwnym razie
|
|
36
|
-
*/
|
|
37
|
-
queueExists(queueName: string): Promise<boolean>;
|
|
38
|
-
/**
|
|
39
|
-
* Zamyka kolejkę i usuwa ją z cache
|
|
40
|
-
* Używane do explicite zamykania kolejek dla optymalizacji pamięci
|
|
41
|
-
* @param commandName - Nazwa komendy
|
|
42
|
-
*/
|
|
43
|
-
closeQueue(commandName: string): Promise<void>;
|
|
44
|
-
/**
|
|
45
|
-
* Zamyka wszystkie kolejki w cache
|
|
46
|
-
* Używane podczas shutdown CommandBus
|
|
47
|
-
*/
|
|
48
|
-
closeAllQueues(): Promise<void>;
|
|
49
|
-
/**
|
|
50
|
-
* Zwraca statystyki cache kolejek (dla diagnostyki)
|
|
51
|
-
*/
|
|
52
|
-
getCacheStats(): {
|
|
53
|
-
cachedQueuesCount: number;
|
|
54
|
-
queueNames: string[];
|
|
55
|
-
};
|
|
56
|
-
}
|