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/QUICK_REFERENCE.md
CHANGED
|
@@ -1,204 +1,152 @@
|
|
|
1
|
-
# Quick Reference
|
|
1
|
+
# eva — Quick Reference Cheat Sheet
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> Binary: `eva` | Install: `npm install -g eva4j` | [Full docs](docs/commands/INDEX.md)
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
eva4j info
|
|
7
|
-
```
|
|
5
|
+
---
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
## 🏗️ Project Setup
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
Name: my-shop
|
|
17
|
-
Group ID: com.company
|
|
18
|
-
Artifact ID: my-shop
|
|
19
|
-
Package: com.company.myshop
|
|
20
|
-
|
|
21
|
-
Versions:
|
|
22
|
-
Java: 21
|
|
23
|
-
Spring Boot: 3.5.5
|
|
24
|
-
Spring Modulith: 1.4.6
|
|
25
|
-
|
|
26
|
-
Dependencies:
|
|
27
|
-
• web
|
|
28
|
-
• data-jpa
|
|
29
|
-
• validation
|
|
30
|
-
|
|
31
|
-
Modules:
|
|
32
|
-
• user (soft-delete, audit)
|
|
33
|
-
• product (soft-delete, audit)
|
|
34
|
-
|
|
35
|
-
Timestamps:
|
|
36
|
-
Created: 1/27/2026, 10:25:00 AM
|
|
37
|
-
Last Updated: 1/27/2026, 10:35:00 AM
|
|
9
|
+
```bash
|
|
10
|
+
eva create <project-name> # Create Spring Boot project (interactive)
|
|
11
|
+
eva add module <module> # Add hexagonal module to existing project
|
|
12
|
+
eva info # Show project config and module list
|
|
13
|
+
eva detach <module> # Extract module to standalone microservice
|
|
38
14
|
```
|
|
39
15
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
**Location**: Project root directory
|
|
16
|
+
---
|
|
43
17
|
|
|
44
|
-
|
|
45
|
-
- Persist project configuration
|
|
46
|
-
- Track module history
|
|
47
|
-
- Share state with team members
|
|
18
|
+
## ⚡ Code Generation
|
|
48
19
|
|
|
49
|
-
|
|
20
|
+
### Domain Model
|
|
50
21
|
|
|
51
|
-
|
|
22
|
+
```bash
|
|
23
|
+
eva g entities <module> # Generate full CRUD from domain.yaml
|
|
24
|
+
```
|
|
52
25
|
|
|
53
|
-
|
|
54
|
-
- It's tracked in git by default
|
|
55
|
-
- Helps team members see project state
|
|
56
|
-
- Ensures consistent configuration
|
|
26
|
+
### Use Cases (CQRS)
|
|
57
27
|
|
|
58
|
-
|
|
28
|
+
```bash
|
|
29
|
+
eva g usecase <module> # Create command or query (interactive)
|
|
30
|
+
```
|
|
59
31
|
|
|
60
|
-
###
|
|
61
|
-
- Project name, group ID, artifact ID
|
|
62
|
-
- Base package name
|
|
63
|
-
- Java version
|
|
64
|
-
- Spring Boot version
|
|
65
|
-
- Spring Modulith version
|
|
32
|
+
### REST API
|
|
66
33
|
|
|
67
|
-
|
|
68
|
-
|
|
34
|
+
```bash
|
|
35
|
+
eva g resource <module> # Generate REST controller + 5 CRUD use cases
|
|
36
|
+
eva g record <module> # Create immutable Java Record (DTO / value object)
|
|
37
|
+
```
|
|
69
38
|
|
|
70
|
-
|
|
71
|
-
- Module names
|
|
72
|
-
- Module options:
|
|
73
|
-
- hasSoftDelete: boolean
|
|
74
|
-
- hasAudit: boolean
|
|
75
|
-
- Creation timestamps per module
|
|
39
|
+
---
|
|
76
40
|
|
|
77
|
-
|
|
78
|
-
- Project creation date/time
|
|
79
|
-
- Last update date/time
|
|
41
|
+
## 🔌 Integration
|
|
80
42
|
|
|
81
|
-
|
|
43
|
+
### HTTP Clients
|
|
82
44
|
|
|
83
|
-
### View Project Configuration
|
|
84
45
|
```bash
|
|
85
|
-
|
|
86
|
-
eva4j info
|
|
46
|
+
eva g http-exchange <module> # Spring OpenFeign HTTP client (interactive)
|
|
87
47
|
```
|
|
88
48
|
|
|
89
|
-
###
|
|
90
|
-
```bash
|
|
91
|
-
eva4j info # See existing modules
|
|
92
|
-
eva4j add module inventory # Add new module
|
|
93
|
-
eva4j info # Verify module was added
|
|
94
|
-
```
|
|
49
|
+
### Kafka
|
|
95
50
|
|
|
96
|
-
### After Closing Terminal
|
|
97
51
|
```bash
|
|
98
|
-
#
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
eva4j add module user
|
|
102
|
-
|
|
103
|
-
# Close terminal...
|
|
104
|
-
|
|
105
|
-
# Day 2 - Open new terminal
|
|
106
|
-
cd my-shop
|
|
107
|
-
eva4j info # Shows all previous configuration!
|
|
108
|
-
eva4j add module product # Continues where you left off
|
|
52
|
+
eva add kafka-client # Install Kafka SDK + base configuration
|
|
53
|
+
eva g kafka-event <module> # Kafka event publisher (interactive)
|
|
54
|
+
eva g kafka-listener <module> # Kafka event consumer(s) — select topics
|
|
109
55
|
```
|
|
110
56
|
|
|
111
|
-
|
|
57
|
+
### Temporal Workflows
|
|
112
58
|
|
|
113
|
-
### Module Duplicate Prevention
|
|
114
59
|
```bash
|
|
115
|
-
|
|
116
|
-
#
|
|
117
|
-
|
|
118
|
-
eva4j add module user
|
|
119
|
-
# ❌ Module 'user' is already registered
|
|
60
|
+
eva add temporal-client # Install Temporal SDK + 3-queue worker setup
|
|
61
|
+
eva g temporal-flow <module> # Workflow interface + Saga impl + service facade
|
|
62
|
+
eva g temporal-activity <module> # Activity interface + impl (Light or Heavy)
|
|
120
63
|
```
|
|
121
64
|
|
|
122
|
-
|
|
123
|
-
1. Filesystem (does directory exist?)
|
|
124
|
-
2. Configuration file (is module registered?)
|
|
65
|
+
---
|
|
125
66
|
|
|
126
|
-
##
|
|
67
|
+
## 🔤 Aliases
|
|
127
68
|
|
|
128
|
-
|
|
129
|
-
```bash
|
|
130
|
-
cd /some/other/folder
|
|
131
|
-
eva4j info
|
|
132
|
-
# ❌ Not in an eva4j project directory
|
|
133
|
-
# Run this command inside a project created with eva4j
|
|
134
|
-
```
|
|
69
|
+
All `generate` commands can be shortened to `g`:
|
|
135
70
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
71
|
+
| Full form | Short alias |
|
|
72
|
+
|-----------|-------------|
|
|
73
|
+
| `eva generate entities` | `eva g entities` |
|
|
74
|
+
| `eva generate usecase` | `eva g usecase` |
|
|
75
|
+
| `eva generate resource` | `eva g resource` |
|
|
76
|
+
| `eva generate record` | `eva g record` |
|
|
77
|
+
| `eva generate http-exchange` | `eva g http-exchange` |
|
|
78
|
+
| `eva generate kafka-event` | `eva g kafka-event` |
|
|
79
|
+
| `eva generate kafka-listener` | `eva g kafka-listener` |
|
|
80
|
+
| `eva generate temporal-flow` | `eva g temporal-flow` |
|
|
81
|
+
| `eva generate temporal-activity` | `eva g temporal-activity` |
|
|
142
82
|
|
|
143
|
-
|
|
83
|
+
---
|
|
144
84
|
|
|
145
|
-
|
|
85
|
+
## 📋 Typical Project Workflow
|
|
146
86
|
|
|
147
|
-
```
|
|
148
|
-
|
|
87
|
+
```bash
|
|
88
|
+
# 1. Bootstrap
|
|
89
|
+
eva create my-app && cd my-app
|
|
149
90
|
|
|
150
|
-
|
|
151
|
-
|
|
91
|
+
# 2. Add modules
|
|
92
|
+
eva add module order
|
|
93
|
+
eva add module notification
|
|
152
94
|
|
|
153
|
-
|
|
154
|
-
|
|
95
|
+
# 3. Generate domain model (edit domain.yaml first)
|
|
96
|
+
eva g entities order
|
|
155
97
|
|
|
156
|
-
|
|
157
|
-
|
|
98
|
+
# 4. Add custom use cases
|
|
99
|
+
eva g usecase order
|
|
158
100
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
projectName: 'my-shop',
|
|
162
|
-
groupId: 'com.company',
|
|
163
|
-
// ... more fields
|
|
164
|
-
});
|
|
101
|
+
# 5. Expose via REST
|
|
102
|
+
eva g resource order
|
|
165
103
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
});
|
|
104
|
+
# 6. Add async events
|
|
105
|
+
eva add kafka-client
|
|
106
|
+
eva g kafka-event order order-placed
|
|
107
|
+
eva g kafka-listener notification
|
|
171
108
|
|
|
172
|
-
|
|
173
|
-
|
|
109
|
+
# 7. Add workflow orchestration
|
|
110
|
+
eva add temporal-client
|
|
111
|
+
eva g temporal-flow order # e.g., process-order
|
|
112
|
+
eva g temporal-activity order # e.g., validate-stock (Light)
|
|
113
|
+
eva g temporal-activity order # e.g., charge-payment (Heavy)
|
|
174
114
|
|
|
175
|
-
|
|
176
|
-
|
|
115
|
+
# 8. Extract to microservice when ready
|
|
116
|
+
eva detach order
|
|
177
117
|
```
|
|
178
118
|
|
|
179
|
-
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 🧩 Temporal Queue Model
|
|
122
|
+
|
|
123
|
+
| Queue | Purpose | ActivityOptions var |
|
|
124
|
+
|-------|---------|---------------------|
|
|
125
|
+
| `FLOW_QUEUE` | Workflow orchestration | — |
|
|
126
|
+
| `LIGHT_TASK_QUEUE` | Fast activities < 30 s | `lightActivityOptions` |
|
|
127
|
+
| `HEAVY_TASK_QUEUE` | Long-running ≤ 2 min | `heavyActivityOptions` |
|
|
180
128
|
|
|
181
|
-
|
|
182
|
-
2. **Commit .eva4j.json** to share configuration with your team
|
|
183
|
-
3. **Don't manually edit .eva4j.json** - let the CLI manage it
|
|
184
|
-
4. **Use info command** for troubleshooting configuration issues
|
|
185
|
-
5. **Configuration persists across sessions** - no need to remember what you did
|
|
129
|
+
Activities are registered automatically via Spring DI (`LightActivity` / `HeavyActivity` marker interfaces). No manual `TemporalConfig.java` patching needed.
|
|
186
130
|
|
|
187
|
-
|
|
131
|
+
---
|
|
188
132
|
|
|
189
|
-
|
|
190
|
-
- Backward compatible (won't break existing projects without .eva4j.json)
|
|
191
|
-
- Forward compatible (configuration format can be extended)
|
|
133
|
+
## 📁 Project Config File
|
|
192
134
|
|
|
193
|
-
|
|
135
|
+
**`.eva4j.json`** is auto-created and managed. Commit it to git.
|
|
194
136
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
- **src/commands/add-module.js** - Updates config on module addition
|
|
199
|
-
- **bin/eva4j.js** - Registers info command
|
|
200
|
-
- **templates/base/root/gitignore.ejs** - Ensures .eva4j.json is tracked
|
|
137
|
+
```bash
|
|
138
|
+
eva info # Read current config
|
|
139
|
+
```
|
|
201
140
|
|
|
202
141
|
---
|
|
203
142
|
|
|
204
|
-
|
|
143
|
+
## 📚 Full Documentation
|
|
144
|
+
|
|
145
|
+
| Resource | Link |
|
|
146
|
+
|----------|------|
|
|
147
|
+
| All commands | [docs/commands/INDEX.md](docs/commands/INDEX.md) |
|
|
148
|
+
| YAML guide | [DOMAIN_YAML_GUIDE.md](DOMAIN_YAML_GUIDE.md) |
|
|
149
|
+
| AI agent guide | [AGENTS.md](AGENTS.md) |
|
|
150
|
+
| YAML examples | [examples/](examples/) |
|
|
151
|
+
| Temporal flow | [docs/commands/GENERATE_TEMPORAL_FLOW.md](docs/commands/GENERATE_TEMPORAL_FLOW.md) |
|
|
152
|
+
| Temporal activity | [docs/commands/GENERATE_TEMPORAL_ACTIVITY.md](docs/commands/GENERATE_TEMPORAL_ACTIVITY.md) |
|
package/README.md
CHANGED
|
@@ -16,14 +16,14 @@
|
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
18
|
# Create a complete project
|
|
19
|
-
|
|
19
|
+
eva create my-ecommerce
|
|
20
20
|
cd my-ecommerce
|
|
21
21
|
|
|
22
22
|
# Add a module
|
|
23
|
-
|
|
23
|
+
eva add module product
|
|
24
24
|
|
|
25
25
|
# Generate full CRUD from YAML
|
|
26
|
-
|
|
26
|
+
eva g entities product
|
|
27
27
|
|
|
28
28
|
# 🎉 Done! You have:
|
|
29
29
|
# ✅ Domain entities with business logic
|
|
@@ -229,6 +229,8 @@ All commands are fully documented with examples, use cases, and best practices:
|
|
|
229
229
|
| `g resource` | Generate REST API | [📖 GENERATE_RESOURCE.md](docs/commands/GENERATE_RESOURCE.md) |
|
|
230
230
|
| `g http` | HTTP client | [📖 GENERATE_HTTP_EXCHANGE.md](docs/commands/GENERATE_HTTP_EXCHANGE.md) |
|
|
231
231
|
| `g kafka-event` | Kafka events | [📖 GENERATE_KAFKA_EVENT.md](docs/commands/GENERATE_KAFKA_EVENT.md) |
|
|
232
|
+
| `g temporal-flow` | Temporal workflow | [📖 GENERATE_TEMPORAL_FLOW.md](docs/commands/GENERATE_TEMPORAL_FLOW.md) |
|
|
233
|
+
| `g temporal-activity` | Temporal activity | [📖 GENERATE_TEMPORAL_ACTIVITY.md](docs/commands/GENERATE_TEMPORAL_ACTIVITY.md) |
|
|
232
234
|
| `detach` | Extract microservice | [📖 DETACH.md](docs/commands/DETACH.md) |
|
|
233
235
|
|
|
234
236
|
### 📘 Additional Resources
|
|
@@ -266,26 +268,29 @@ Eva4j provides a comprehensive set of commands for different stages of developme
|
|
|
266
268
|
|---------|-------------|---------------|
|
|
267
269
|
| **generate http-exchange** (g http) | Create HTTP client with OpenFeign | [📖 GENERATE_HTTP_EXCHANGE.md](docs/commands/GENERATE_HTTP_EXCHANGE.md) |
|
|
268
270
|
| **generate kafka-event** (g kafka-event) | Setup Kafka event publishing | [📖 GENERATE_KAFKA_EVENT.md](docs/commands/GENERATE_KAFKA_EVENT.md) |
|
|
269
|
-
| **generate kafka-listener** (g kafka-listener) | Create Kafka event consumer |
|
|
271
|
+
| **generate kafka-listener** (g kafka-listener) | Create Kafka event consumer | [📖 GENERATE_KAFKA_LISTENER.md](docs/commands/GENERATE_KAFKA_LISTENER.md) |
|
|
270
272
|
| **add kafka-client** | Add Kafka dependencies to module | Coming soon |
|
|
273
|
+
| **add temporal-client** | Add Temporal SDK and worker infrastructure | Coming soon |
|
|
274
|
+
| **generate temporal-flow** (g temporal-flow) | Create Temporal workflow with Saga | [📖 GENERATE_TEMPORAL_FLOW.md](docs/commands/GENERATE_TEMPORAL_FLOW.md) |
|
|
275
|
+
| **generate temporal-activity** (g temporal-activity) | Create Temporal activity (Light or Heavy) | [📖 GENERATE_TEMPORAL_ACTIVITY.md](docs/commands/GENERATE_TEMPORAL_ACTIVITY.md) |
|
|
271
276
|
|
|
272
277
|
### Quick Start Example
|
|
273
278
|
|
|
274
279
|
```bash
|
|
275
280
|
# 1. Create project
|
|
276
|
-
|
|
281
|
+
eva create my-ecommerce
|
|
277
282
|
cd my-ecommerce
|
|
278
283
|
|
|
279
284
|
# 2. Start development services
|
|
280
285
|
docker-compose up -d
|
|
281
286
|
|
|
282
287
|
# 3. Add modules
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
288
|
+
eva add module product
|
|
289
|
+
eva add module order
|
|
290
|
+
eva add module customer
|
|
286
291
|
|
|
287
292
|
# 4. Generate entities from YAML
|
|
288
|
-
|
|
293
|
+
eva g entities product
|
|
289
294
|
|
|
290
295
|
# 5. Run application
|
|
291
296
|
./gradlew bootRun
|
|
@@ -296,13 +301,15 @@ eva4j g entities product
|
|
|
296
301
|
For faster development, most generate commands have short aliases:
|
|
297
302
|
|
|
298
303
|
```bash
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
304
|
+
eva g entities <name> # generate entities
|
|
305
|
+
eva g usecase <name> # generate usecase
|
|
306
|
+
eva g resource <name> # generate resource
|
|
307
|
+
eva g record <name> # generate record
|
|
308
|
+
eva g http <name> # generate http-exchange
|
|
309
|
+
eva g kafka-event <name> # generate kafka-event
|
|
310
|
+
eva g kafka-listener <name> # generate kafka-listener
|
|
311
|
+
eva g temporal-flow <module> # generate temporal-flow
|
|
312
|
+
eva g temporal-activity <module># generate temporal-activity
|
|
306
313
|
```
|
|
307
314
|
|
|
308
315
|
---
|
|
@@ -314,7 +321,7 @@ eva4j g kafka-listener <name> # generate kafka-listener
|
|
|
314
321
|
Initialize a new Spring Boot project with modular architecture.
|
|
315
322
|
|
|
316
323
|
```bash
|
|
317
|
-
|
|
324
|
+
eva create <project-name>
|
|
318
325
|
```
|
|
319
326
|
|
|
320
327
|
Creates a production-ready Spring Boot project with:
|
|
@@ -333,7 +340,7 @@ Creates a production-ready Spring Boot project with:
|
|
|
333
340
|
Add a domain module following hexagonal architecture.
|
|
334
341
|
|
|
335
342
|
```bash
|
|
336
|
-
|
|
343
|
+
eva add module <module-name>
|
|
337
344
|
```
|
|
338
345
|
|
|
339
346
|
Generates a complete module with:
|
|
@@ -352,8 +359,8 @@ Generates a complete module with:
|
|
|
352
359
|
Generate complete domain implementation from YAML definition.
|
|
353
360
|
|
|
354
361
|
```bash
|
|
355
|
-
|
|
356
|
-
|
|
362
|
+
eva generate entities <aggregate-name>
|
|
363
|
+
eva g entities <aggregate-name> # Short alias
|
|
357
364
|
```
|
|
358
365
|
|
|
359
366
|
Creates from a YAML file:
|
|
@@ -389,13 +396,13 @@ For complete documentation on all commands, see:
|
|
|
389
396
|
|
|
390
397
|
```bash
|
|
391
398
|
# 1. Add module
|
|
392
|
-
|
|
399
|
+
eva add module product
|
|
393
400
|
|
|
394
401
|
# 2. Create YAML definition
|
|
395
402
|
# Edit examples/product.yaml
|
|
396
403
|
|
|
397
404
|
# 3. Generate entities
|
|
398
|
-
|
|
405
|
+
eva g entities product
|
|
399
406
|
|
|
400
407
|
# 4. Run and test
|
|
401
408
|
./gradlew bootRun
|
|
@@ -405,19 +412,19 @@ eva4j g entities product
|
|
|
405
412
|
|
|
406
413
|
```bash
|
|
407
414
|
# Generate additional commands
|
|
408
|
-
|
|
409
|
-
|
|
415
|
+
eva g usecase UpdateProductPrice --type command
|
|
416
|
+
eva g usecase DeactivateProduct --type command
|
|
410
417
|
|
|
411
418
|
# Generate custom queries
|
|
412
|
-
|
|
413
|
-
|
|
419
|
+
eva g usecase SearchProductsByCategory --type query
|
|
420
|
+
eva g usecase GetLowStockProducts --type query
|
|
414
421
|
```
|
|
415
422
|
|
|
416
423
|
### Workflow 3: Integrate External Service
|
|
417
424
|
|
|
418
425
|
```bash
|
|
419
426
|
# Create HTTP client
|
|
420
|
-
|
|
427
|
+
eva g http PaymentGateway
|
|
421
428
|
|
|
422
429
|
# Configure in application.yaml
|
|
423
430
|
# Implement client methods
|
|
@@ -428,17 +435,17 @@ eva4j g http PaymentGateway
|
|
|
428
435
|
|
|
429
436
|
```bash
|
|
430
437
|
# Publish events
|
|
431
|
-
|
|
438
|
+
eva g kafka-event OrderCreated
|
|
432
439
|
|
|
433
440
|
# Consume events in another module
|
|
434
|
-
|
|
441
|
+
eva g kafka-listener OrderCreated
|
|
435
442
|
```
|
|
436
443
|
|
|
437
444
|
### Workflow 5: Extract to Microservice
|
|
438
445
|
|
|
439
446
|
```bash
|
|
440
447
|
# When module is mature and needs independence
|
|
441
|
-
|
|
448
|
+
eva detach order
|
|
442
449
|
|
|
443
450
|
# Result: order-service/ as standalone application
|
|
444
451
|
```
|
|
@@ -462,7 +469,7 @@ For backward compatibility, here's the old reference format:
|
|
|
462
469
|
Install Kafka dependencies and configuration.
|
|
463
470
|
|
|
464
471
|
```bash
|
|
465
|
-
|
|
472
|
+
eva add kafka-client
|
|
466
473
|
```
|
|
467
474
|
|
|
468
475
|
**What it does:**
|
|
@@ -484,7 +491,7 @@ spring.kafka:
|
|
|
484
491
|
|
|
485
492
|
**Example:**
|
|
486
493
|
```bash
|
|
487
|
-
|
|
494
|
+
eva add kafka-client
|
|
488
495
|
```
|
|
489
496
|
|
|
490
497
|
---
|
|
@@ -494,8 +501,8 @@ eva4j add kafka-client
|
|
|
494
501
|
Create a use case (command or query) following CQRS pattern.
|
|
495
502
|
|
|
496
503
|
```bash
|
|
497
|
-
|
|
498
|
-
|
|
504
|
+
eva generate usecase <module-name> [usecase-name]
|
|
505
|
+
eva g usecase <module-name> [usecase-name]
|
|
499
506
|
```
|
|
500
507
|
|
|
501
508
|
**Interactive Prompts:**
|
|
@@ -535,9 +542,9 @@ public record UserResponseDto(UUID id, String name, String email) {}
|
|
|
535
542
|
|
|
536
543
|
**Examples:**
|
|
537
544
|
```bash
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
545
|
+
eva g usecase user create-user # Command
|
|
546
|
+
eva g usecase user find-user-by-id # Query
|
|
547
|
+
eva g usecase product update-stock # Command
|
|
541
548
|
```
|
|
542
549
|
|
|
543
550
|
---
|
|
@@ -547,8 +554,8 @@ eva4j g usecase product update-stock # Command
|
|
|
547
554
|
Generate complete REST resource with full CRUD operations.
|
|
548
555
|
|
|
549
556
|
```bash
|
|
550
|
-
|
|
551
|
-
|
|
557
|
+
eva generate resource <module-name>
|
|
558
|
+
eva g resource <module-name>
|
|
552
559
|
```
|
|
553
560
|
|
|
554
561
|
**Interactive Prompts:**
|
|
@@ -576,8 +583,8 @@ public class UserController {
|
|
|
576
583
|
|
|
577
584
|
**Example:**
|
|
578
585
|
```bash
|
|
579
|
-
|
|
580
|
-
|
|
586
|
+
eva g resource user
|
|
587
|
+
eva g resource product
|
|
581
588
|
```
|
|
582
589
|
|
|
583
590
|
---
|
|
@@ -587,8 +594,8 @@ eva4j g resource product
|
|
|
587
594
|
Create HTTP client adapter using Spring Cloud OpenFeign.
|
|
588
595
|
|
|
589
596
|
```bash
|
|
590
|
-
|
|
591
|
-
|
|
597
|
+
eva generate http-exchange <module-name> [port-name]
|
|
598
|
+
eva g http-exchange <module-name> [port-name]
|
|
592
599
|
```
|
|
593
600
|
|
|
594
601
|
**Interactive Prompts:**
|
|
@@ -626,8 +633,8 @@ urls:
|
|
|
626
633
|
|
|
627
634
|
**Example:**
|
|
628
635
|
```bash
|
|
629
|
-
|
|
630
|
-
|
|
636
|
+
eva g http-exchange order product-service
|
|
637
|
+
eva g http-exchange user payment-gateway
|
|
631
638
|
```
|
|
632
639
|
|
|
633
640
|
---
|
|
@@ -637,8 +644,8 @@ eva4j g http-exchange user payment-gateway
|
|
|
637
644
|
Create Kafka event publisher with topic configuration.
|
|
638
645
|
|
|
639
646
|
```bash
|
|
640
|
-
|
|
641
|
-
|
|
647
|
+
eva generate kafka-event <module-name> [event-name]
|
|
648
|
+
eva g kafka-event <module-name> [event-name]
|
|
642
649
|
```
|
|
643
650
|
|
|
644
651
|
**Prerequisites:** Kafka client must be installed
|
|
@@ -693,9 +700,9 @@ public class CreateUserCommandHandler {
|
|
|
693
700
|
|
|
694
701
|
**Example:**
|
|
695
702
|
```bash
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
703
|
+
eva g kafka-event user user-created
|
|
704
|
+
eva g kafka-event order order-placed
|
|
705
|
+
eva g kafka-event product stock-updated
|
|
699
706
|
```
|
|
700
707
|
|
|
701
708
|
---
|
|
@@ -705,8 +712,8 @@ eva4j g kafka-event product stock-updated
|
|
|
705
712
|
Create individual Kafka event listener classes for consuming events from topics.
|
|
706
713
|
|
|
707
714
|
```bash
|
|
708
|
-
|
|
709
|
-
|
|
715
|
+
eva generate kafka-listener <module-name>
|
|
716
|
+
eva g kafka-listener <module-name>
|
|
710
717
|
```
|
|
711
718
|
|
|
712
719
|
**Prerequisites:**
|
|
@@ -749,7 +756,7 @@ public class UserUserCreatedListener {
|
|
|
749
756
|
|
|
750
757
|
**Example:**
|
|
751
758
|
```bash
|
|
752
|
-
|
|
759
|
+
eva g kafka-listener notification
|
|
753
760
|
# Select: user-created, order-placed
|
|
754
761
|
# Generates: NotificationUserCreatedListener.java, NotificationOrderPlacedListener.java
|
|
755
762
|
```
|
|
@@ -761,7 +768,7 @@ eva4j g kafka-listener notification
|
|
|
761
768
|
Extract a module from the monolith into an independent microservice.
|
|
762
769
|
|
|
763
770
|
```bash
|
|
764
|
-
|
|
771
|
+
eva detach [module-name]
|
|
765
772
|
```
|
|
766
773
|
|
|
767
774
|
**Interactive Prompts:**
|
|
@@ -784,7 +791,7 @@ eva4j detach [module-name]
|
|
|
784
791
|
**Example:**
|
|
785
792
|
```bash
|
|
786
793
|
# In monolith project
|
|
787
|
-
|
|
794
|
+
eva detach user
|
|
788
795
|
|
|
789
796
|
# Creates: ../user_msvc/
|
|
790
797
|
# Port: parent port + 1
|
|
@@ -835,7 +842,7 @@ cd product_msvc && ./gradlew bootJar
|
|
|
835
842
|
Display project configuration and module history.
|
|
836
843
|
|
|
837
844
|
```bash
|
|
838
|
-
|
|
845
|
+
eva info
|
|
839
846
|
```
|
|
840
847
|
|
|
841
848
|
**Output Example:**
|
|
@@ -881,26 +888,26 @@ Timestamps:
|
|
|
881
888
|
|
|
882
889
|
```bash
|
|
883
890
|
# 1. Create project
|
|
884
|
-
|
|
891
|
+
eva create e-commerce
|
|
885
892
|
cd e-commerce
|
|
886
893
|
|
|
887
894
|
# 2. Add modules
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
895
|
+
eva add module user
|
|
896
|
+
eva add module product
|
|
897
|
+
eva add module order
|
|
891
898
|
|
|
892
899
|
# 3. Generate resources
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
900
|
+
eva g resource user
|
|
901
|
+
eva g resource product
|
|
902
|
+
eva g resource order
|
|
896
903
|
|
|
897
904
|
# 4. Add event-driven communication
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
905
|
+
eva add kafka-client
|
|
906
|
+
eva g kafka-event order order-placed
|
|
907
|
+
eva g kafka-listener notification
|
|
901
908
|
|
|
902
909
|
# 5. Add external service clients
|
|
903
|
-
|
|
910
|
+
eva g http-exchange order payment-service
|
|
904
911
|
|
|
905
912
|
# 6. Run entire system locally
|
|
906
913
|
./gradlew bootRun
|
|
@@ -920,9 +927,9 @@ eva4j g http-exchange order payment-service
|
|
|
920
927
|
|
|
921
928
|
```bash
|
|
922
929
|
# Extract modules to microservices
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
930
|
+
eva detach user # Port 8041
|
|
931
|
+
eva detach product # Port 8042
|
|
932
|
+
eva detach order # Port 8043
|
|
926
933
|
|
|
927
934
|
# Deploy independently
|
|
928
935
|
cd ../user_msvc
|