eva4j 1.0.11 → 1.0.13
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/AGENTS.md +441 -14
- package/DOMAIN_YAML_GUIDE.md +425 -21
- package/FUTURE_FEATURES.md +315 -115
- package/QUICK_REFERENCE.md +101 -153
- package/README.md +77 -70
- package/bin/eva4j.js +57 -1
- package/config/defaults.json +3 -0
- package/docs/commands/GENERATE_ENTITIES.md +662 -1968
- package/docs/commands/GENERATE_HTTP_EXCHANGE.md +274 -450
- package/docs/commands/GENERATE_KAFKA_EVENT.md +219 -498
- package/docs/commands/GENERATE_KAFKA_LISTENER.md +18 -18
- package/docs/commands/GENERATE_RECORD.md +335 -311
- package/docs/commands/GENERATE_TEMPORAL_ACTIVITY.md +174 -0
- package/docs/commands/GENERATE_TEMPORAL_FLOW.md +237 -0
- package/docs/commands/GENERATE_USECASE.md +216 -282
- package/docs/commands/INDEX.md +36 -7
- package/examples/doctor-evaluation.yaml +3 -3
- package/examples/domain-audit-complete.yaml +2 -2
- package/examples/domain-collections.yaml +2 -2
- package/examples/domain-ecommerce.yaml +2 -2
- package/examples/domain-events.yaml +201 -0
- package/examples/domain-field-visibility.yaml +11 -5
- package/examples/domain-multi-aggregate.yaml +12 -6
- package/examples/domain-one-to-many.yaml +1 -1
- package/examples/domain-one-to-one.yaml +1 -1
- package/examples/domain-secondary-onetomany.yaml +1 -1
- package/examples/domain-secondary-onetoone.yaml +1 -1
- package/examples/domain-simple.yaml +1 -1
- package/examples/domain-soft-delete.yaml +3 -3
- package/examples/domain-transitions.yaml +1 -1
- package/examples/domain-value-objects.yaml +1 -1
- package/package.json +2 -2
- package/src/commands/add-kafka-client.js +3 -1
- package/src/commands/add-temporal-client.js +286 -0
- package/src/commands/generate-entities.js +75 -4
- package/src/commands/generate-kafka-event.js +273 -89
- package/src/commands/generate-temporal-activity.js +228 -0
- package/src/commands/generate-temporal-flow.js +216 -0
- package/src/generators/module-generator.js +1 -0
- package/src/generators/shared-generator.js +26 -0
- package/src/utils/yaml-to-entity.js +93 -4
- package/templates/aggregate/AggregateRepository.java.ejs +3 -2
- package/templates/aggregate/AggregateRepositoryImpl.java.ejs +15 -7
- package/templates/aggregate/AggregateRoot.java.ejs +38 -2
- package/templates/aggregate/DomainEntity.java.ejs +6 -2
- package/templates/aggregate/DomainEventHandler.java.ejs +62 -0
- package/templates/aggregate/DomainEventRecord.java.ejs +50 -0
- package/templates/aggregate/JpaAggregateRoot.java.ejs +3 -1
- package/templates/aggregate/JpaEntity.java.ejs +3 -1
- package/templates/base/docker/kafka-services.yaml.ejs +2 -2
- package/templates/base/docker/temporal-services.yaml.ejs +29 -0
- package/templates/base/resources/parameters/develop/temporal.yaml.ejs +9 -0
- package/templates/base/resources/parameters/local/temporal.yaml.ejs +9 -0
- package/templates/base/resources/parameters/production/temporal.yaml.ejs +9 -0
- package/templates/base/resources/parameters/test/temporal.yaml.ejs +9 -0
- package/templates/base/root/AGENTS.md.ejs +916 -51
- package/templates/crud/Controller.java.ejs +36 -6
- package/templates/crud/ListQuery.java.ejs +6 -2
- package/templates/crud/ListQueryHandler.java.ejs +24 -10
- package/templates/crud/UpdateCommand.java.ejs +52 -0
- package/templates/crud/UpdateCommandHandler.java.ejs +105 -0
- package/templates/kafka-event/DomainEventHandlerMethod.ejs +1 -0
- package/templates/kafka-event/Event.java.ejs +23 -0
- package/templates/shared/application/dtos/PagedResponse.java.ejs +30 -0
- package/templates/shared/configurations/temporalConfig/TemporalConfig.java.ejs +104 -0
- package/templates/shared/domain/DomainEvent.java.ejs +40 -0
- package/templates/shared/interfaces/HeavyActivity.java.ejs +4 -0
- package/templates/shared/interfaces/LightActivity.java.ejs +4 -0
- package/templates/temporal-activity/ActivityImpl.java.ejs +14 -0
- package/templates/temporal-activity/ActivityInterface.java.ejs +11 -0
- package/templates/temporal-flow/WorkFlowImpl.java.ejs +64 -0
- package/templates/temporal-flow/WorkFlowInterface.java.ejs +19 -0
- package/templates/temporal-flow/WorkFlowService.java.ejs +49 -0
package/bin/eva4j.js
CHANGED
|
@@ -6,6 +6,7 @@ const packageJson = require('../package.json');
|
|
|
6
6
|
const createCommand = require('../src/commands/create');
|
|
7
7
|
const addModuleCommand = require('../src/commands/add-module');
|
|
8
8
|
const addKafkaClientCommand = require('../src/commands/add-kafka-client');
|
|
9
|
+
const addTemporalClientCommand = require('../src/commands/add-temporal-client');
|
|
9
10
|
const generateUsecaseCommand = require('../src/commands/generate-usecase');
|
|
10
11
|
const generateHttpExchangeCommand = require('../src/commands/generate-http-exchange');
|
|
11
12
|
const generateKafkaEventCommand = require('../src/commands/generate-kafka-event');
|
|
@@ -13,6 +14,8 @@ const generateKafkaListenerCommand = require('../src/commands/generate-kafka-lis
|
|
|
13
14
|
const generateResourceCommand = require('../src/commands/generate-resource');
|
|
14
15
|
const generateRecordCommand = require('../src/commands/generate-record');
|
|
15
16
|
const generateEntitiesCommand = require('../src/commands/generate-entities');
|
|
17
|
+
const generateTemporalFlowCommand = require('../src/commands/generate-temporal-flow');
|
|
18
|
+
const generateTemporalActivityCommand = require('../src/commands/generate-temporal-activity');
|
|
16
19
|
const infoCommand = require('../src/commands/info');
|
|
17
20
|
const detachCommand = require('../src/commands/detach');
|
|
18
21
|
|
|
@@ -39,7 +42,7 @@ program
|
|
|
39
42
|
// Add module command
|
|
40
43
|
program
|
|
41
44
|
.command('add <type> [name]')
|
|
42
|
-
.description('Add components to the project. Use: module [name], kafka-client')
|
|
45
|
+
.description('Add components to the project. Use: module [name], kafka-client, temporal-client')
|
|
43
46
|
.action(async (type, name, options) => {
|
|
44
47
|
if (type === 'kafka-client') {
|
|
45
48
|
try {
|
|
@@ -50,12 +53,23 @@ program
|
|
|
50
53
|
}
|
|
51
54
|
return;
|
|
52
55
|
}
|
|
56
|
+
|
|
57
|
+
if (type === 'temporal-client') {
|
|
58
|
+
try {
|
|
59
|
+
await addTemporalClientCommand(options);
|
|
60
|
+
} catch (error) {
|
|
61
|
+
console.error(chalk.red('Error:'), error.message);
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
53
66
|
|
|
54
67
|
if (type !== 'module') {
|
|
55
68
|
console.error(chalk.red(`❌ Unknown type: ${type}`));
|
|
56
69
|
console.log(chalk.yellow('\nUsage:'));
|
|
57
70
|
console.log(chalk.gray(' eva4j add module [module-name] # Interactive or with name'));
|
|
58
71
|
console.log(chalk.gray(' eva4j add kafka-client'));
|
|
72
|
+
console.log(chalk.gray(' eva4j add temporal-client'));
|
|
59
73
|
console.log(chalk.gray('\nExamples:'));
|
|
60
74
|
console.log(chalk.gray(' eva4j add module user'));
|
|
61
75
|
console.log(chalk.gray(' eva4j add module # Will prompt for name\n'));
|
|
@@ -186,6 +200,42 @@ program
|
|
|
186
200
|
return;
|
|
187
201
|
}
|
|
188
202
|
|
|
203
|
+
if (type === 'temporal-activity') {
|
|
204
|
+
if (!module) {
|
|
205
|
+
console.error(chalk.red('❌ Module name is required'));
|
|
206
|
+
console.log(chalk.gray('Usage: eva generate temporal-activity <module> [activity-name]'));
|
|
207
|
+
console.log(chalk.gray('Examples:'));
|
|
208
|
+
console.log(chalk.gray(' eva generate temporal-activity order register-order'));
|
|
209
|
+
console.log(chalk.gray(' eva generate temporal-activity order # Will prompt for name\n'));
|
|
210
|
+
process.exit(1);
|
|
211
|
+
}
|
|
212
|
+
try {
|
|
213
|
+
await generateTemporalActivityCommand(module, name, options);
|
|
214
|
+
} catch (error) {
|
|
215
|
+
console.error(chalk.red('Error:'), error.message);
|
|
216
|
+
process.exit(1);
|
|
217
|
+
}
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
if (type === 'temporal-flow') {
|
|
222
|
+
if (!module) {
|
|
223
|
+
console.error(chalk.red('❌ Module name is required'));
|
|
224
|
+
console.log(chalk.gray('Usage: eva generate temporal-flow <module> [workflow-name]'));
|
|
225
|
+
console.log(chalk.gray('Examples:'));
|
|
226
|
+
console.log(chalk.gray(' eva generate temporal-flow order process-order'));
|
|
227
|
+
console.log(chalk.gray(' eva generate temporal-flow order # Will prompt for name\n'));
|
|
228
|
+
process.exit(1);
|
|
229
|
+
}
|
|
230
|
+
try {
|
|
231
|
+
await generateTemporalFlowCommand(module, name, options);
|
|
232
|
+
} catch (error) {
|
|
233
|
+
console.error(chalk.red('Error:'), error.message);
|
|
234
|
+
process.exit(1);
|
|
235
|
+
}
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
|
|
189
239
|
if (type === 'resource') {
|
|
190
240
|
if (!module) {
|
|
191
241
|
console.error(chalk.red('❌ Module name is required'));
|
|
@@ -210,6 +260,8 @@ program
|
|
|
210
260
|
console.log(chalk.gray(' eva4j generate http-exchange <port-name> <module>'));
|
|
211
261
|
console.log(chalk.gray(' eva4j generate kafka-event <event-name> <module>'));
|
|
212
262
|
console.log(chalk.gray(' eva4j generate kafka-listener <module>'));
|
|
263
|
+
console.log(chalk.gray(' eva4j generate temporal-flow <module> [workflow-name]'));
|
|
264
|
+
console.log(chalk.gray(' eva4j generate temporal-activity <module> [activity-name]'));
|
|
213
265
|
console.log(chalk.gray(' eva4j generate resource <module>'));
|
|
214
266
|
console.log(chalk.gray(' eva4j generate record'));
|
|
215
267
|
console.log(chalk.gray(' eva4j generate entities <module>'));
|
|
@@ -218,6 +270,8 @@ program
|
|
|
218
270
|
console.log(chalk.gray(' eva4j g http-exchange user-service-port user'));
|
|
219
271
|
console.log(chalk.gray(' eva4j g kafka-event user-created user'));
|
|
220
272
|
console.log(chalk.gray(' eva4j g kafka-listener user'));
|
|
273
|
+
console.log(chalk.gray(' eva4j g temporal-flow order process-order'));
|
|
274
|
+
console.log(chalk.gray(' eva4j g temporal-activity order register-order'));
|
|
221
275
|
console.log(chalk.gray(' eva4j g resource product'));
|
|
222
276
|
console.log(chalk.gray(' eva4j g record # Reads JSON from clipboard'));
|
|
223
277
|
console.log(chalk.gray(' eva4j g entities order # Generates from domain.yaml\n'));
|
|
@@ -263,6 +317,8 @@ program.on('--help', () => {
|
|
|
263
317
|
console.log(chalk.gray(' $ eva4j g http-exchange user-service-port user'));
|
|
264
318
|
console.log(chalk.gray(' $ eva4j g entities order'));
|
|
265
319
|
console.log(chalk.gray(' $ eva4j g kafka-event user-created user'));
|
|
320
|
+
console.log(chalk.gray(' $ eva4j g temporal-flow order process-order'));
|
|
321
|
+
console.log(chalk.gray(' $ eva4j g temporal-activity order register-order'));
|
|
266
322
|
console.log(chalk.gray(' $ eva4j g record'));
|
|
267
323
|
console.log(chalk.gray(' $ eva4j detach user'));
|
|
268
324
|
console.log(chalk.gray(' $ eva4j info'));
|
package/config/defaults.json
CHANGED
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
"dependencyManagementVersion": "1.1.7",
|
|
6
6
|
"springModulithVersion": "1.4.6",
|
|
7
7
|
"springCloudVersion": "2025.0.0",
|
|
8
|
+
"temporalSdkVersion": "1.24.1",
|
|
9
|
+
"temporalDockerVersion": "1.21.5",
|
|
10
|
+
"kafkaConfluentVersion": "7.6.0",
|
|
8
11
|
"gradleVersion": "8.7",
|
|
9
12
|
"encoding": "UTF-8",
|
|
10
13
|
"server": {
|