eva4j 1.0.16 → 1.0.17

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 (43) hide show
  1. package/AGENTS.md +218 -5
  2. package/DOMAIN_YAML_GUIDE.md +185 -2
  3. package/FUTURE_FEATURES.md +33 -52
  4. package/docs/commands/EVALUATE_SYSTEM.md +18 -2
  5. package/examples/domain-events.yaml +26 -0
  6. package/examples/domain-read-models.yaml +113 -0
  7. package/package.json +1 -1
  8. package/read-model-spec.md +664 -0
  9. package/src/agents/design-reviewer.agent.md +3 -0
  10. package/src/commands/generate-entities.js +254 -10
  11. package/src/commands/generate-http-exchange.js +3 -0
  12. package/src/commands/generate-kafka-event.js +3 -0
  13. package/src/commands/generate-kafka-listener.js +3 -0
  14. package/src/commands/generate-record.js +2 -2
  15. package/src/commands/generate-resource.js +4 -1
  16. package/src/commands/generate-temporal-activity.js +4 -1
  17. package/src/commands/generate-temporal-flow.js +4 -1
  18. package/src/commands/generate-usecase.js +4 -1
  19. package/src/skills/build-system-yaml/SKILL.md +122 -1
  20. package/src/skills/build-system-yaml/references/domain-yaml-spec.md +205 -24
  21. package/src/skills/build-system-yaml/references/module-spec.md +33 -1
  22. package/src/skills/build-system-yaml/references/system-yaml-spec.md +36 -0
  23. package/src/utils/config-manager.js +4 -2
  24. package/src/utils/domain-validator.js +230 -14
  25. package/src/utils/naming.js +10 -0
  26. package/src/utils/validator.js +3 -1
  27. package/src/utils/yaml-to-entity.js +272 -3
  28. package/templates/aggregate/AggregateRepository.java.ejs +4 -0
  29. package/templates/aggregate/AggregateRepositoryImpl.java.ejs +8 -0
  30. package/templates/aggregate/AggregateRoot.java.ejs +38 -4
  31. package/templates/aggregate/JpaAggregateRoot.java.ejs +2 -2
  32. package/templates/crud/DeleteCommandHandler.java.ejs +19 -1
  33. package/templates/crud/UpdateCommandHandler.java.ejs +53 -2
  34. package/templates/read-model/ReadModelDomain.java.ejs +46 -0
  35. package/templates/read-model/ReadModelJpa.java.ejs +58 -0
  36. package/templates/read-model/ReadModelJpaRepository.java.ejs +11 -0
  37. package/templates/read-model/ReadModelKafkaListener.java.ejs +64 -0
  38. package/templates/read-model/ReadModelRepository.java.ejs +42 -0
  39. package/templates/read-model/ReadModelRepositoryImpl.java.ejs +81 -0
  40. package/templates/read-model/ReadModelSyncHandler.java.ejs +52 -0
  41. package/test-c2010.js +49 -0
  42. package/test-update-compat.js +109 -0
  43. package/test-update-lifecycle.js +121 -0
@@ -0,0 +1,113 @@
1
+ # Example: Read Models (Local Projections)
2
+ #
3
+ # This example shows an "orders" module that uses readModels to maintain
4
+ # local projections of data from "products" and "customers" modules,
5
+ # eliminating synchronous HTTP dependencies.
6
+ #
7
+ # ─── SOURCE MODULE NOTE ──────────────────────────────────────────────────────
8
+ # The source module (e.g. products/domain.yaml) must declare the events
9
+ # that this readModel's syncedBy entries reference. Use lifecycle: to
10
+ # automatically emit raise() at CRUD operations:
11
+ #
12
+ # events:
13
+ # - name: ProductCreatedEvent
14
+ # lifecycle: create # raise() in creation constructor
15
+ # fields:
16
+ # - name: productId
17
+ # type: String
18
+ # - name: name
19
+ # type: String
20
+ # - name: price
21
+ # type: BigDecimal
22
+ # - name: status
23
+ # type: String
24
+ #
25
+ # - name: ProductUpdatedEvent
26
+ # lifecycle: update # raise() in UpdateCommandHandler
27
+ # fields: [...]
28
+ #
29
+ # - name: ProductDeactivatedEvent
30
+ # lifecycle: softDelete # raise() in softDelete() method
31
+ # fields: [...]
32
+ # ─────────────────────────────────────────────────────────────────────────────
33
+
34
+ aggregates:
35
+ - name: Order
36
+ entities:
37
+ - name: Order
38
+ isRoot: true
39
+ tableName: orders
40
+ audit:
41
+ enabled: true
42
+ trackUser: true
43
+ fields:
44
+ - name: id
45
+ type: String
46
+ - name: orderNumber
47
+ type: String
48
+ - name: customerId
49
+ type: String
50
+ reference:
51
+ aggregate: Customer
52
+ module: customers
53
+ - name: totalAmount
54
+ type: BigDecimal
55
+ readOnly: true
56
+ defaultValue: "0.00"
57
+ enums:
58
+ - name: OrderStatus
59
+ initialValue: DRAFT
60
+ values: [DRAFT, PLACED, CONFIRMED, CANCELLED]
61
+ transitions:
62
+ - from: DRAFT
63
+ to: PLACED
64
+ method: place
65
+ - from: PLACED
66
+ to: CONFIRMED
67
+ method: confirm
68
+ - from: [DRAFT, PLACED]
69
+ to: CANCELLED
70
+ method: cancel
71
+
72
+ readModels:
73
+ - name: ProductReadModel
74
+ source:
75
+ module: products
76
+ aggregate: Product
77
+ tableName: rm_products
78
+ fields:
79
+ - name: id
80
+ type: String
81
+ - name: name
82
+ type: String
83
+ - name: price
84
+ type: BigDecimal
85
+ - name: status
86
+ type: String
87
+ syncedBy:
88
+ - event: ProductCreatedEvent
89
+ action: UPSERT
90
+ - event: ProductUpdatedEvent
91
+ action: UPSERT
92
+ - event: ProductDeactivatedEvent
93
+ action: SOFT_DELETE
94
+
95
+ - name: CustomerReadModel
96
+ source:
97
+ module: customers
98
+ aggregate: Customer
99
+ tableName: rm_customers
100
+ fields:
101
+ - name: id
102
+ type: String
103
+ - name: fullName
104
+ type: String
105
+ - name: email
106
+ type: String
107
+ syncedBy:
108
+ - event: CustomerRegisteredEvent
109
+ action: UPSERT
110
+ - event: CustomerUpdatedEvent
111
+ action: UPSERT
112
+ - event: CustomerDeletedEvent
113
+ action: DELETE
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eva4j",
3
- "version": "1.0.16",
3
+ "version": "1.0.17",
4
4
  "description": "A powerful Node.js CLI for generating Spring Boot projects with modular architecture that enables efficient monolith-first development with seamless transition to microservices",
5
5
  "main": "bin/eva4j.js",
6
6
  "bin": {