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.
Files changed (73) hide show
  1. package/AGENTS.md +441 -14
  2. package/DOMAIN_YAML_GUIDE.md +425 -21
  3. package/FUTURE_FEATURES.md +315 -115
  4. package/QUICK_REFERENCE.md +101 -153
  5. package/README.md +77 -70
  6. package/bin/eva4j.js +57 -1
  7. package/config/defaults.json +3 -0
  8. package/docs/commands/GENERATE_ENTITIES.md +662 -1968
  9. package/docs/commands/GENERATE_HTTP_EXCHANGE.md +274 -450
  10. package/docs/commands/GENERATE_KAFKA_EVENT.md +219 -498
  11. package/docs/commands/GENERATE_KAFKA_LISTENER.md +18 -18
  12. package/docs/commands/GENERATE_RECORD.md +335 -311
  13. package/docs/commands/GENERATE_TEMPORAL_ACTIVITY.md +174 -0
  14. package/docs/commands/GENERATE_TEMPORAL_FLOW.md +237 -0
  15. package/docs/commands/GENERATE_USECASE.md +216 -282
  16. package/docs/commands/INDEX.md +36 -7
  17. package/examples/doctor-evaluation.yaml +3 -3
  18. package/examples/domain-audit-complete.yaml +2 -2
  19. package/examples/domain-collections.yaml +2 -2
  20. package/examples/domain-ecommerce.yaml +2 -2
  21. package/examples/domain-events.yaml +201 -0
  22. package/examples/domain-field-visibility.yaml +11 -5
  23. package/examples/domain-multi-aggregate.yaml +12 -6
  24. package/examples/domain-one-to-many.yaml +1 -1
  25. package/examples/domain-one-to-one.yaml +1 -1
  26. package/examples/domain-secondary-onetomany.yaml +1 -1
  27. package/examples/domain-secondary-onetoone.yaml +1 -1
  28. package/examples/domain-simple.yaml +1 -1
  29. package/examples/domain-soft-delete.yaml +3 -3
  30. package/examples/domain-transitions.yaml +1 -1
  31. package/examples/domain-value-objects.yaml +1 -1
  32. package/package.json +2 -2
  33. package/src/commands/add-kafka-client.js +3 -1
  34. package/src/commands/add-temporal-client.js +286 -0
  35. package/src/commands/generate-entities.js +75 -4
  36. package/src/commands/generate-kafka-event.js +273 -89
  37. package/src/commands/generate-temporal-activity.js +228 -0
  38. package/src/commands/generate-temporal-flow.js +216 -0
  39. package/src/generators/module-generator.js +1 -0
  40. package/src/generators/shared-generator.js +26 -0
  41. package/src/utils/yaml-to-entity.js +93 -4
  42. package/templates/aggregate/AggregateRepository.java.ejs +3 -2
  43. package/templates/aggregate/AggregateRepositoryImpl.java.ejs +15 -7
  44. package/templates/aggregate/AggregateRoot.java.ejs +38 -2
  45. package/templates/aggregate/DomainEntity.java.ejs +6 -2
  46. package/templates/aggregate/DomainEventHandler.java.ejs +62 -0
  47. package/templates/aggregate/DomainEventRecord.java.ejs +50 -0
  48. package/templates/aggregate/JpaAggregateRoot.java.ejs +3 -1
  49. package/templates/aggregate/JpaEntity.java.ejs +3 -1
  50. package/templates/base/docker/kafka-services.yaml.ejs +2 -2
  51. package/templates/base/docker/temporal-services.yaml.ejs +29 -0
  52. package/templates/base/resources/parameters/develop/temporal.yaml.ejs +9 -0
  53. package/templates/base/resources/parameters/local/temporal.yaml.ejs +9 -0
  54. package/templates/base/resources/parameters/production/temporal.yaml.ejs +9 -0
  55. package/templates/base/resources/parameters/test/temporal.yaml.ejs +9 -0
  56. package/templates/base/root/AGENTS.md.ejs +916 -51
  57. package/templates/crud/Controller.java.ejs +36 -6
  58. package/templates/crud/ListQuery.java.ejs +6 -2
  59. package/templates/crud/ListQueryHandler.java.ejs +24 -10
  60. package/templates/crud/UpdateCommand.java.ejs +52 -0
  61. package/templates/crud/UpdateCommandHandler.java.ejs +105 -0
  62. package/templates/kafka-event/DomainEventHandlerMethod.ejs +1 -0
  63. package/templates/kafka-event/Event.java.ejs +23 -0
  64. package/templates/shared/application/dtos/PagedResponse.java.ejs +30 -0
  65. package/templates/shared/configurations/temporalConfig/TemporalConfig.java.ejs +104 -0
  66. package/templates/shared/domain/DomainEvent.java.ejs +40 -0
  67. package/templates/shared/interfaces/HeavyActivity.java.ejs +4 -0
  68. package/templates/shared/interfaces/LightActivity.java.ejs +4 -0
  69. package/templates/temporal-activity/ActivityImpl.java.ejs +14 -0
  70. package/templates/temporal-activity/ActivityInterface.java.ejs +11 -0
  71. package/templates/temporal-flow/WorkFlowImpl.java.ejs +64 -0
  72. package/templates/temporal-flow/WorkFlowInterface.java.ejs +19 -0
  73. 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'));
@@ -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": {