maestro-bundle 1.3.1 → 1.4.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/package.json +1 -1
- package/templates/bundle-ai-agents/skills/agent-orchestration/SKILL.md +107 -41
- package/templates/bundle-ai-agents/skills/agent-orchestration/references/graph-patterns.md +50 -0
- package/templates/bundle-ai-agents/skills/agent-orchestration/references/routing-strategies.md +47 -0
- package/templates/bundle-ai-agents/skills/api-design/SKILL.md +125 -16
- package/templates/bundle-ai-agents/skills/api-design/references/pydantic-patterns.md +72 -0
- package/templates/bundle-ai-agents/skills/api-design/references/rest-conventions.md +51 -0
- package/templates/bundle-ai-agents/skills/clean-architecture/SKILL.md +113 -21
- package/templates/bundle-ai-agents/skills/clean-architecture/references/dependency-injection.md +60 -0
- package/templates/bundle-ai-agents/skills/clean-architecture/references/layer-rules.md +56 -0
- package/templates/bundle-ai-agents/skills/context-engineering/SKILL.md +104 -36
- package/templates/bundle-ai-agents/skills/context-engineering/references/compression-techniques.md +76 -0
- package/templates/bundle-ai-agents/skills/context-engineering/references/context-budget-calculator.md +45 -0
- package/templates/bundle-ai-agents/skills/database-modeling/SKILL.md +146 -19
- package/templates/bundle-ai-agents/skills/database-modeling/references/index-strategies.md +48 -0
- package/templates/bundle-ai-agents/skills/database-modeling/references/naming-conventions.md +27 -0
- package/templates/bundle-ai-agents/skills/docker-containerization/SKILL.md +124 -15
- package/templates/bundle-ai-agents/skills/docker-containerization/references/compose-patterns.md +97 -0
- package/templates/bundle-ai-agents/skills/docker-containerization/references/dockerfile-checklist.md +37 -0
- package/templates/bundle-ai-agents/skills/eval-testing/SKILL.md +113 -25
- package/templates/bundle-ai-agents/skills/eval-testing/references/eval-types.md +52 -0
- package/templates/bundle-ai-agents/skills/eval-testing/references/golden-dataset-template.md +59 -0
- package/templates/bundle-ai-agents/skills/memory-management/SKILL.md +112 -28
- package/templates/bundle-ai-agents/skills/memory-management/references/memory-tiers.md +41 -0
- package/templates/bundle-ai-agents/skills/memory-management/references/namespace-conventions.md +41 -0
- package/templates/bundle-ai-agents/skills/prompt-engineering/SKILL.md +139 -47
- package/templates/bundle-ai-agents/skills/prompt-engineering/references/anti-patterns.md +59 -0
- package/templates/bundle-ai-agents/skills/prompt-engineering/references/prompt-templates.md +75 -0
- package/templates/bundle-ai-agents/skills/rag-pipeline/SKILL.md +104 -27
- package/templates/bundle-ai-agents/skills/rag-pipeline/references/chunking-strategies.md +27 -0
- package/templates/bundle-ai-agents/skills/rag-pipeline/references/embedding-models.md +31 -0
- package/templates/bundle-ai-agents/skills/rag-pipeline/references/rag-evaluation.md +39 -0
- package/templates/bundle-ai-agents/skills/testing-strategy/SKILL.md +127 -18
- package/templates/bundle-ai-agents/skills/testing-strategy/references/fixture-patterns.md +81 -0
- package/templates/bundle-ai-agents/skills/testing-strategy/references/naming-conventions.md +69 -0
- package/templates/bundle-base/skills/branch-strategy/SKILL.md +134 -21
- package/templates/bundle-base/skills/branch-strategy/references/branch-rules.md +40 -0
- package/templates/bundle-base/skills/code-review/SKILL.md +123 -38
- package/templates/bundle-base/skills/code-review/references/review-checklist.md +45 -0
- package/templates/bundle-base/skills/commit-pattern/SKILL.md +98 -39
- package/templates/bundle-base/skills/commit-pattern/references/conventional-commits.md +40 -0
- package/templates/bundle-data-pipeline/skills/data-preprocessing/SKILL.md +110 -19
- package/templates/bundle-data-pipeline/skills/data-preprocessing/references/pandas-cheatsheet.md +63 -0
- package/templates/bundle-data-pipeline/skills/data-preprocessing/references/pandera-schemas.md +44 -0
- package/templates/bundle-data-pipeline/skills/docker-containerization/SKILL.md +132 -16
- package/templates/bundle-data-pipeline/skills/docker-containerization/references/compose-patterns.md +82 -0
- package/templates/bundle-data-pipeline/skills/docker-containerization/references/dockerfile-best-practices.md +57 -0
- package/templates/bundle-data-pipeline/skills/feature-engineering/SKILL.md +143 -45
- package/templates/bundle-data-pipeline/skills/feature-engineering/references/encoding-guide.md +41 -0
- package/templates/bundle-data-pipeline/skills/feature-engineering/references/scaling-guide.md +38 -0
- package/templates/bundle-data-pipeline/skills/mlops-pipeline/SKILL.md +156 -37
- package/templates/bundle-data-pipeline/skills/mlops-pipeline/references/mlflow-commands.md +69 -0
- package/templates/bundle-data-pipeline/skills/model-training/SKILL.md +152 -33
- package/templates/bundle-data-pipeline/skills/model-training/references/evaluation-metrics.md +52 -0
- package/templates/bundle-data-pipeline/skills/model-training/references/model-selection-guide.md +41 -0
- package/templates/bundle-data-pipeline/skills/rag-pipeline/SKILL.md +127 -39
- package/templates/bundle-data-pipeline/skills/rag-pipeline/references/chunking-strategies.md +51 -0
- package/templates/bundle-data-pipeline/skills/rag-pipeline/references/embedding-models.md +49 -0
- package/templates/bundle-frontend-spa/skills/authentication/SKILL.md +196 -13
- package/templates/bundle-frontend-spa/skills/authentication/references/jwt-security.md +41 -0
- package/templates/bundle-frontend-spa/skills/component-design/SKILL.md +191 -41
- package/templates/bundle-frontend-spa/skills/component-design/references/accessibility-checklist.md +41 -0
- package/templates/bundle-frontend-spa/skills/component-design/references/tailwind-patterns.md +65 -0
- package/templates/bundle-frontend-spa/skills/e2e-testing/SKILL.md +241 -79
- package/templates/bundle-frontend-spa/skills/e2e-testing/references/playwright-selectors.md +66 -0
- package/templates/bundle-frontend-spa/skills/e2e-testing/references/test-patterns.md +82 -0
- package/templates/bundle-frontend-spa/skills/integration-api/SKILL.md +221 -31
- package/templates/bundle-frontend-spa/skills/integration-api/references/api-patterns.md +81 -0
- package/templates/bundle-frontend-spa/skills/react-patterns/SKILL.md +195 -70
- package/templates/bundle-frontend-spa/skills/react-patterns/references/component-checklist.md +22 -0
- package/templates/bundle-frontend-spa/skills/react-patterns/references/hook-patterns.md +63 -0
- package/templates/bundle-frontend-spa/skills/responsive-layout/SKILL.md +162 -22
- package/templates/bundle-frontend-spa/skills/responsive-layout/references/breakpoint-guide.md +63 -0
- package/templates/bundle-frontend-spa/skills/state-management/SKILL.md +158 -30
- package/templates/bundle-frontend-spa/skills/state-management/references/react-query-config.md +64 -0
- package/templates/bundle-frontend-spa/skills/state-management/references/state-patterns.md +78 -0
- package/templates/bundle-jhipster-microservices/skills/ci-cd-pipeline/SKILL.md +135 -45
- package/templates/bundle-jhipster-microservices/skills/ci-cd-pipeline/references/gitlab-ci-templates.md +93 -0
- package/templates/bundle-jhipster-microservices/skills/clean-architecture/SKILL.md +87 -21
- package/templates/bundle-jhipster-microservices/skills/clean-architecture/references/layer-rules.md +78 -0
- package/templates/bundle-jhipster-microservices/skills/ddd-tactical/SKILL.md +94 -25
- package/templates/bundle-jhipster-microservices/skills/ddd-tactical/references/ddd-patterns.md +48 -0
- package/templates/bundle-jhipster-microservices/skills/jhipster-angular/SKILL.md +63 -21
- package/templates/bundle-jhipster-microservices/skills/jhipster-angular/references/angular-microservices.md +40 -0
- package/templates/bundle-jhipster-microservices/skills/jhipster-angular/references/angular-structure.md +59 -0
- package/templates/bundle-jhipster-microservices/skills/jhipster-docker-k8s/SKILL.md +125 -91
- package/templates/bundle-jhipster-microservices/skills/jhipster-docker-k8s/references/docker-k8s-commands.md +68 -0
- package/templates/bundle-jhipster-microservices/skills/jhipster-entities/SKILL.md +72 -20
- package/templates/bundle-jhipster-microservices/skills/jhipster-entities/references/cross-service-entities.md +36 -0
- package/templates/bundle-jhipster-microservices/skills/jhipster-entities/references/jdl-types.md +56 -0
- package/templates/bundle-jhipster-microservices/skills/jhipster-gateway/SKILL.md +80 -8
- package/templates/bundle-jhipster-microservices/skills/jhipster-gateway/references/gateway-config.md +43 -0
- package/templates/bundle-jhipster-microservices/skills/jhipster-kafka/SKILL.md +115 -22
- package/templates/bundle-jhipster-microservices/skills/jhipster-kafka/references/kafka-events.md +39 -0
- package/templates/bundle-jhipster-microservices/skills/jhipster-registry/SKILL.md +92 -23
- package/templates/bundle-jhipster-microservices/skills/jhipster-registry/references/consul-config.md +61 -0
- package/templates/bundle-jhipster-microservices/skills/jhipster-service/SKILL.md +81 -18
- package/templates/bundle-jhipster-microservices/skills/jhipster-service/references/service-patterns.md +40 -0
- package/templates/bundle-jhipster-microservices/skills/testing-strategy/SKILL.md +101 -20
- package/templates/bundle-jhipster-microservices/skills/testing-strategy/references/test-naming.md +55 -0
- package/templates/bundle-jhipster-monorepo/skills/clean-architecture/SKILL.md +87 -21
- package/templates/bundle-jhipster-monorepo/skills/clean-architecture/references/layer-rules.md +78 -0
- package/templates/bundle-jhipster-monorepo/skills/ddd-tactical/SKILL.md +94 -25
- package/templates/bundle-jhipster-monorepo/skills/ddd-tactical/references/ddd-patterns.md +48 -0
- package/templates/bundle-jhipster-monorepo/skills/jhipster-angular/SKILL.md +99 -52
- package/templates/bundle-jhipster-monorepo/skills/jhipster-angular/references/angular-structure.md +59 -0
- package/templates/bundle-jhipster-monorepo/skills/jhipster-entities/SKILL.md +89 -36
- package/templates/bundle-jhipster-monorepo/skills/jhipster-entities/references/jdl-types.md +56 -0
- package/templates/bundle-jhipster-monorepo/skills/jhipster-liquibase/SKILL.md +123 -23
- package/templates/bundle-jhipster-monorepo/skills/jhipster-liquibase/references/liquibase-operations.md +95 -0
- package/templates/bundle-jhipster-monorepo/skills/jhipster-security/SKILL.md +106 -19
- package/templates/bundle-jhipster-monorepo/skills/jhipster-security/references/security-checklist.md +47 -0
- package/templates/bundle-jhipster-monorepo/skills/jhipster-spring/SKILL.md +84 -16
- package/templates/bundle-jhipster-monorepo/skills/jhipster-spring/references/spring-layers.md +41 -0
- package/templates/bundle-jhipster-monorepo/skills/testing-strategy/SKILL.md +101 -20
- package/templates/bundle-jhipster-monorepo/skills/testing-strategy/references/test-naming.md +55 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Angular Patterns for Microservices
|
|
2
|
+
|
|
3
|
+
## Architecture
|
|
4
|
+
- Angular app lives in the Gateway
|
|
5
|
+
- Gateway routes API calls transparently to microservices
|
|
6
|
+
- From Angular's view, it is a single API
|
|
7
|
+
|
|
8
|
+
## Data Aggregation Pattern
|
|
9
|
+
```typescript
|
|
10
|
+
// Use forkJoin to fetch from multiple services simultaneously
|
|
11
|
+
forkJoin({
|
|
12
|
+
demands: this.demandService.query(),
|
|
13
|
+
agents: this.agentService.query(),
|
|
14
|
+
}).subscribe(({ demands, agents }) => {
|
|
15
|
+
// Combine data
|
|
16
|
+
});
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Resilience Pattern
|
|
20
|
+
```typescript
|
|
21
|
+
// Wrap each service call with catchError
|
|
22
|
+
this.demandService.query().pipe(
|
|
23
|
+
catchError(() => of([])) // Return empty on failure
|
|
24
|
+
)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Real-Time Pattern
|
|
28
|
+
```typescript
|
|
29
|
+
// WebSocket via STOMP through Gateway
|
|
30
|
+
this.stompClient.watch('/topic/events').pipe(
|
|
31
|
+
map(msg => JSON.parse(msg.body))
|
|
32
|
+
).subscribe(event => { /* handle */ });
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Best Practices
|
|
36
|
+
- Always handle partial failures
|
|
37
|
+
- Show fallback UI when a service is unavailable
|
|
38
|
+
- Use lazy loading for feature modules
|
|
39
|
+
- Keep entity services in `entities/` directory
|
|
40
|
+
- Custom aggregation services outside `entities/`
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# JHipster Angular Structure Reference
|
|
2
|
+
|
|
3
|
+
## Directory Layout
|
|
4
|
+
```
|
|
5
|
+
src/main/webapp/app/
|
|
6
|
+
entities/ # Generated CRUD per entity
|
|
7
|
+
<entity>/
|
|
8
|
+
<entity>.model.ts # TypeScript interface
|
|
9
|
+
<entity>.routes.ts # Lazy-loaded routes
|
|
10
|
+
service/<entity>.service.ts
|
|
11
|
+
list/<entity>.component.ts
|
|
12
|
+
detail/<entity>-detail.component.ts
|
|
13
|
+
update/<entity>-update.component.ts
|
|
14
|
+
delete/<entity>-delete-dialog.component.ts
|
|
15
|
+
shared/ # Shared modules and components
|
|
16
|
+
date/ # Date utilities
|
|
17
|
+
filter/ # Filter components
|
|
18
|
+
pagination/ # Pagination components
|
|
19
|
+
sort/ # Sort directives
|
|
20
|
+
core/ # Core services
|
|
21
|
+
auth/ # Authentication
|
|
22
|
+
interceptor/ # HTTP interceptors
|
|
23
|
+
util/ # Utility services
|
|
24
|
+
layouts/ # Page layouts
|
|
25
|
+
main/ # Main layout
|
|
26
|
+
navbar/ # Navigation bar
|
|
27
|
+
footer/ # Footer
|
|
28
|
+
config/ # App configuration
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Key Conventions
|
|
32
|
+
- All components are `standalone: true`
|
|
33
|
+
- Use `SharedModule` for common imports
|
|
34
|
+
- Lazy loading for entity routes
|
|
35
|
+
- JHipster's `TranslateService` for i18n
|
|
36
|
+
- `AlertService` for user notifications
|
|
37
|
+
- `SortDirective` and `SortByDirective` for table sorting
|
|
38
|
+
- `PaginationComponent` for paginated lists
|
|
39
|
+
|
|
40
|
+
## Service Pattern
|
|
41
|
+
```typescript
|
|
42
|
+
@Injectable({ providedIn: 'root' })
|
|
43
|
+
export class EntityService {
|
|
44
|
+
private resourceUrl = 'api/entities';
|
|
45
|
+
|
|
46
|
+
constructor(private http: HttpClient) {}
|
|
47
|
+
|
|
48
|
+
query(req?: any): Observable<HttpResponse<IEntity[]>> {
|
|
49
|
+
const options = createRequestOption(req);
|
|
50
|
+
return this.http.get<IEntity[]>(this.resourceUrl, { params: options, observe: 'response' });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Custom Component Best Practices
|
|
56
|
+
- Place custom components outside `entities/` to avoid regeneration conflicts
|
|
57
|
+
- Mark any changes to generated files with `// CUSTOM` comments
|
|
58
|
+
- Use standalone components with explicit imports
|
|
59
|
+
- Follow JHipster naming: `jhi-` prefix for entity components
|
|
@@ -1,19 +1,42 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jhipster-docker-k8s
|
|
3
|
-
description: Deploy
|
|
3
|
+
description: Deploy JHipster microservices with Docker Compose for development and Kubernetes/K3s for production. Use when containerizing services, creating docker-compose, deploying to K8s, or scaling services.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
author: Maestro
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
# Docker & Kubernetes
|
|
8
|
+
# Docker & Kubernetes for JHipster Microservices
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
Deploy JHipster microservices using Docker Compose for local development and Kubernetes/K3s for production.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
- When setting up local development environment
|
|
14
|
+
- When containerizing a microservice
|
|
15
|
+
- When deploying to Kubernetes/K3s
|
|
16
|
+
- When scaling services
|
|
17
|
+
- When troubleshooting container issues
|
|
18
|
+
|
|
19
|
+
## Available Operations
|
|
20
|
+
1. Generate Docker Compose with JHipster
|
|
21
|
+
2. Build Docker images with Jib
|
|
22
|
+
3. Generate Kubernetes manifests with JHipster
|
|
23
|
+
4. Deploy to K3s cluster
|
|
24
|
+
5. Scale and manage services
|
|
25
|
+
|
|
26
|
+
## Multi-Step Workflow
|
|
27
|
+
|
|
28
|
+
### Step 1: Generate Docker Compose
|
|
9
29
|
|
|
10
30
|
```bash
|
|
11
|
-
#
|
|
31
|
+
# Generate docker-compose via JHipster (from project root)
|
|
12
32
|
jhipster docker-compose
|
|
13
33
|
|
|
14
|
-
#
|
|
34
|
+
# Or use JDL deployment block
|
|
35
|
+
jhipster import-jdl jhipster-jdl.jdl
|
|
15
36
|
```
|
|
16
37
|
|
|
38
|
+
### Step 2: Configure Docker Compose for Dev
|
|
39
|
+
|
|
17
40
|
```yaml
|
|
18
41
|
# docker-compose/docker-compose.yml
|
|
19
42
|
services:
|
|
@@ -24,9 +47,6 @@ services:
|
|
|
24
47
|
environment:
|
|
25
48
|
- SPRING_PROFILES_ACTIVE=dev
|
|
26
49
|
- SPRING_CLOUD_CONSUL_HOST=consul
|
|
27
|
-
depends_on:
|
|
28
|
-
- consul
|
|
29
|
-
- keycloak
|
|
30
50
|
|
|
31
51
|
demand-service:
|
|
32
52
|
image: demand-service:latest
|
|
@@ -46,24 +66,6 @@ services:
|
|
|
46
66
|
POSTGRES_USER: demand
|
|
47
67
|
POSTGRES_PASSWORD: demand
|
|
48
68
|
|
|
49
|
-
agent-service:
|
|
50
|
-
image: agent-service:latest
|
|
51
|
-
environment:
|
|
52
|
-
- SPRING_PROFILES_ACTIVE=dev
|
|
53
|
-
- SPRING_CLOUD_CONSUL_HOST=consul
|
|
54
|
-
- SPRING_DATASOURCE_URL=jdbc:postgresql://agent-db:5432/agent
|
|
55
|
-
depends_on:
|
|
56
|
-
- agent-db
|
|
57
|
-
- consul
|
|
58
|
-
- kafka
|
|
59
|
-
|
|
60
|
-
agent-db:
|
|
61
|
-
image: postgres:16
|
|
62
|
-
environment:
|
|
63
|
-
POSTGRES_DB: agent
|
|
64
|
-
POSTGRES_USER: agent
|
|
65
|
-
POSTGRES_PASSWORD: agent
|
|
66
|
-
|
|
67
69
|
consul:
|
|
68
70
|
image: consul:1.15
|
|
69
71
|
ports:
|
|
@@ -95,89 +97,121 @@ services:
|
|
|
95
97
|
environment:
|
|
96
98
|
KEYCLOAK_ADMIN: admin
|
|
97
99
|
KEYCLOAK_ADMIN_PASSWORD: admin
|
|
98
|
-
command: start-dev
|
|
99
|
-
volumes:
|
|
100
|
-
- ./keycloak-realm.json:/opt/keycloak/data/import/realm.json
|
|
100
|
+
command: start-dev
|
|
101
101
|
```
|
|
102
102
|
|
|
103
|
-
|
|
103
|
+
### Step 3: Build Docker Images
|
|
104
104
|
|
|
105
105
|
```bash
|
|
106
|
-
#
|
|
107
|
-
|
|
108
|
-
```
|
|
106
|
+
# Build all services with Jib (no Docker daemon)
|
|
107
|
+
./mvnw -ntp verify -DskipTests jib:dockerBuild -Pprod
|
|
109
108
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
namespace: maestro
|
|
117
|
-
spec:
|
|
118
|
-
replicas: 2
|
|
119
|
-
selector:
|
|
120
|
-
matchLabels:
|
|
121
|
-
app: demand-service
|
|
122
|
-
template:
|
|
123
|
-
spec:
|
|
124
|
-
containers:
|
|
125
|
-
- name: demand-service
|
|
126
|
-
image: registry.local/demand-service:1.0.0
|
|
127
|
-
ports:
|
|
128
|
-
- containerPort: 8081
|
|
129
|
-
resources:
|
|
130
|
-
requests:
|
|
131
|
-
memory: "512Mi"
|
|
132
|
-
cpu: "500m"
|
|
133
|
-
limits:
|
|
134
|
-
memory: "1Gi"
|
|
135
|
-
cpu: "1000m"
|
|
136
|
-
readinessProbe:
|
|
137
|
-
httpGet:
|
|
138
|
-
path: /management/health/readiness
|
|
139
|
-
port: 8081
|
|
140
|
-
initialDelaySeconds: 30
|
|
141
|
-
livenessProbe:
|
|
142
|
-
httpGet:
|
|
143
|
-
path: /management/health/liveness
|
|
144
|
-
port: 8081
|
|
145
|
-
initialDelaySeconds: 60
|
|
146
|
-
env:
|
|
147
|
-
- name: SPRING_PROFILES_ACTIVE
|
|
148
|
-
value: prod
|
|
149
|
-
- name: SPRING_DATASOURCE_URL
|
|
150
|
-
valueFrom:
|
|
151
|
-
secretKeyRef:
|
|
152
|
-
name: demand-service-db
|
|
153
|
-
key: url
|
|
109
|
+
# Or build specific service
|
|
110
|
+
cd demand-service && ./mvnw -ntp verify -DskipTests jib:dockerBuild
|
|
111
|
+
|
|
112
|
+
# Tag and push to registry
|
|
113
|
+
docker tag demand-service:latest registry.local/demand-service:1.0.0
|
|
114
|
+
docker push registry.local/demand-service:1.0.0
|
|
154
115
|
```
|
|
155
116
|
|
|
156
|
-
|
|
117
|
+
### Step 4: Run Locally with Docker Compose
|
|
157
118
|
|
|
158
119
|
```bash
|
|
159
|
-
#
|
|
160
|
-
|
|
120
|
+
# Start all services
|
|
121
|
+
docker-compose -f docker-compose/docker-compose.yml up -d
|
|
122
|
+
|
|
123
|
+
# Check status
|
|
124
|
+
docker-compose ps
|
|
125
|
+
|
|
126
|
+
# View logs of a specific service
|
|
127
|
+
docker-compose logs -f demand-service
|
|
128
|
+
|
|
129
|
+
# Stop all
|
|
130
|
+
docker-compose down
|
|
161
131
|
|
|
162
|
-
#
|
|
163
|
-
docker
|
|
132
|
+
# Stop and remove volumes (clean start)
|
|
133
|
+
docker-compose down -v
|
|
164
134
|
```
|
|
165
135
|
|
|
166
|
-
|
|
136
|
+
### Step 5: Generate Kubernetes Manifests
|
|
167
137
|
|
|
168
138
|
```bash
|
|
169
|
-
#
|
|
170
|
-
|
|
139
|
+
# Generate K8s manifests via JHipster
|
|
140
|
+
jhipster kubernetes
|
|
171
141
|
|
|
172
|
-
#
|
|
173
|
-
|
|
142
|
+
# Or via JDL deployment block
|
|
143
|
+
```
|
|
174
144
|
|
|
175
|
-
|
|
145
|
+
### Step 6: Deploy to Kubernetes/K3s
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
# Apply all manifests
|
|
176
149
|
kubectl apply -f k8s/
|
|
177
150
|
|
|
178
|
-
#
|
|
179
|
-
kubectl
|
|
151
|
+
# Check deployment status
|
|
152
|
+
kubectl get pods -n maestro
|
|
153
|
+
kubectl get svc -n maestro
|
|
180
154
|
|
|
181
|
-
#
|
|
155
|
+
# Watch pod logs
|
|
156
|
+
kubectl logs -f deployment/demand-service -n maestro
|
|
157
|
+
|
|
158
|
+
# Scale a service
|
|
182
159
|
kubectl scale deployment demand-service --replicas=3 -n maestro
|
|
160
|
+
|
|
161
|
+
# Rollback a deployment
|
|
162
|
+
kubectl rollout undo deployment/demand-service -n maestro
|
|
163
|
+
|
|
164
|
+
# Check events for troubleshooting
|
|
165
|
+
kubectl get events -n maestro --sort-by=.lastTimestamp
|
|
183
166
|
```
|
|
167
|
+
|
|
168
|
+
### Step 7: Verify
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
# Test gateway endpoint
|
|
172
|
+
curl http://localhost:8080/api/demands
|
|
173
|
+
|
|
174
|
+
# Check Consul UI for registered services
|
|
175
|
+
# http://localhost:8500
|
|
176
|
+
|
|
177
|
+
# Check Keycloak admin
|
|
178
|
+
# http://localhost:9080
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Resources
|
|
182
|
+
- `references/docker-compose-reference.md` - Docker Compose configuration reference
|
|
183
|
+
- `references/k8s-troubleshooting.md` - Common Kubernetes troubleshooting commands
|
|
184
|
+
|
|
185
|
+
## Examples
|
|
186
|
+
|
|
187
|
+
### Example 1: Set Up Dev Environment
|
|
188
|
+
User asks: "Set up the local development environment"
|
|
189
|
+
Response approach:
|
|
190
|
+
1. Run `jhipster docker-compose` to generate files
|
|
191
|
+
2. Run `docker-compose up -d` to start infrastructure
|
|
192
|
+
3. Verify Consul, Kafka, Keycloak are running
|
|
193
|
+
4. Start each service with `./mvnw spring-boot:run`
|
|
194
|
+
|
|
195
|
+
### Example 2: Deploy to Production
|
|
196
|
+
User asks: "Deploy demand-service to K3s"
|
|
197
|
+
Response approach:
|
|
198
|
+
1. Build image: `./mvnw jib:build -Djib.to.image=registry.local/demand-service:1.0.0`
|
|
199
|
+
2. Update K8s manifest with new image tag
|
|
200
|
+
3. Apply: `kubectl apply -f k8s/demand-service/`
|
|
201
|
+
4. Verify: `kubectl rollout status deployment/demand-service -n maestro`
|
|
202
|
+
|
|
203
|
+
### Example 3: Service Won't Start
|
|
204
|
+
User asks: "demand-service pod keeps crashing"
|
|
205
|
+
Response approach:
|
|
206
|
+
1. Check pod status: `kubectl describe pod <pod-name> -n maestro`
|
|
207
|
+
2. Check logs: `kubectl logs <pod-name> -n maestro`
|
|
208
|
+
3. Common causes: database not ready, Consul not reachable, missing env vars
|
|
209
|
+
4. Fix and redeploy
|
|
210
|
+
|
|
211
|
+
## Notes
|
|
212
|
+
- Use Jib for Docker builds (no Docker daemon needed, faster)
|
|
213
|
+
- Never use `latest` tag in production K8s manifests
|
|
214
|
+
- Each service has its own database container in docker-compose
|
|
215
|
+
- Use `docker-compose down -v` for a completely clean restart
|
|
216
|
+
- Set resource limits in K8s manifests (memory, CPU)
|
|
217
|
+
- Add readiness and liveness probes to all deployments
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Docker and Kubernetes Command Reference
|
|
2
|
+
|
|
3
|
+
## Docker Compose (Dev)
|
|
4
|
+
```bash
|
|
5
|
+
# Start all services
|
|
6
|
+
docker-compose -f docker-compose/docker-compose.yml up -d
|
|
7
|
+
|
|
8
|
+
# Stop all services
|
|
9
|
+
docker-compose down
|
|
10
|
+
|
|
11
|
+
# View logs
|
|
12
|
+
docker-compose logs -f <service-name>
|
|
13
|
+
|
|
14
|
+
# Rebuild a single service
|
|
15
|
+
docker-compose up -d --build <service-name>
|
|
16
|
+
|
|
17
|
+
# View running containers
|
|
18
|
+
docker-compose ps
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Image Building
|
|
22
|
+
```bash
|
|
23
|
+
# Jib (no Docker daemon needed)
|
|
24
|
+
./mvnw -ntp verify -DskipTests jib:dockerBuild -Pprod
|
|
25
|
+
|
|
26
|
+
# Jib push to registry
|
|
27
|
+
./mvnw -ntp verify -DskipTests jib:build -Pprod -Djib.to.image=registry.local/service:tag
|
|
28
|
+
|
|
29
|
+
# Docker build
|
|
30
|
+
docker build -t service:tag .
|
|
31
|
+
docker push registry.local/service:tag
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Kubernetes (Prod)
|
|
35
|
+
```bash
|
|
36
|
+
# Apply manifests
|
|
37
|
+
kubectl apply -f k8s/
|
|
38
|
+
|
|
39
|
+
# Check pods
|
|
40
|
+
kubectl get pods -n maestro
|
|
41
|
+
|
|
42
|
+
# View logs
|
|
43
|
+
kubectl logs -f deployment/<service> -n maestro
|
|
44
|
+
|
|
45
|
+
# Scale
|
|
46
|
+
kubectl scale deployment <service> --replicas=3 -n maestro
|
|
47
|
+
|
|
48
|
+
# Rollback
|
|
49
|
+
kubectl rollout undo deployment/<service> -n maestro
|
|
50
|
+
|
|
51
|
+
# Rollout status
|
|
52
|
+
kubectl rollout status deployment/<service> -n maestro
|
|
53
|
+
|
|
54
|
+
# Port forward for debugging
|
|
55
|
+
kubectl port-forward svc/<service> 8080:8080 -n maestro
|
|
56
|
+
|
|
57
|
+
# Execute command in pod
|
|
58
|
+
kubectl exec -it <pod-name> -n maestro -- /bin/sh
|
|
59
|
+
|
|
60
|
+
# View secrets
|
|
61
|
+
kubectl get secrets -n maestro
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## JHipster Generators
|
|
65
|
+
```bash
|
|
66
|
+
jhipster docker-compose # Generate docker-compose files
|
|
67
|
+
jhipster kubernetes # Generate K8s manifests
|
|
68
|
+
```
|
|
@@ -1,15 +1,30 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jhipster-entities
|
|
3
|
-
description:
|
|
3
|
+
description: Create and manage JHipster entities with JDL for microservices, including cross-service references and shared DTOs. Use when creating entities, defining data models, or managing cross-service relationships.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
author: Maestro
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
# JHipster Entities
|
|
8
|
+
# JHipster Entities -- Microservices
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
Create and manage JHipster entities in a microservices architecture where entities belong to specific services and cross-service relationships use IDs instead of foreign keys.
|
|
9
11
|
|
|
10
|
-
|
|
12
|
+
## When to Use
|
|
13
|
+
- When creating entities assigned to specific microservices
|
|
14
|
+
- When defining cross-service relationships (by ID, not FK)
|
|
15
|
+
- When generating code with `jhipster import-jdl` for microservices
|
|
16
|
+
- When implementing Feign-based data fetching across services
|
|
11
17
|
|
|
12
|
-
##
|
|
18
|
+
## Available Operations
|
|
19
|
+
1. Define entities with microservice assignment in JDL
|
|
20
|
+
2. Handle cross-service references with ID fields
|
|
21
|
+
3. Generate code per microservice
|
|
22
|
+
4. Implement Feign-based data aggregation
|
|
23
|
+
5. Create shared DTOs for inter-service communication
|
|
24
|
+
|
|
25
|
+
## Multi-Step Workflow
|
|
26
|
+
|
|
27
|
+
### Step 1: Define Entities with Microservice Assignment
|
|
13
28
|
|
|
14
29
|
```jdl
|
|
15
30
|
/* demand-service entities */
|
|
@@ -23,7 +38,7 @@ entity Demand {
|
|
|
23
38
|
entity Task {
|
|
24
39
|
description String required maxlength(500)
|
|
25
40
|
status TaskStatus required
|
|
26
|
-
agentId Long // ID
|
|
41
|
+
agentId Long // ID from another service, not FK
|
|
27
42
|
branchName String
|
|
28
43
|
}
|
|
29
44
|
|
|
@@ -42,7 +57,7 @@ entity Agent {
|
|
|
42
57
|
}
|
|
43
58
|
|
|
44
59
|
entity AgentTeam {
|
|
45
|
-
demandId Long required // ID
|
|
60
|
+
demandId Long required // ID from another service, not FK
|
|
46
61
|
}
|
|
47
62
|
|
|
48
63
|
relationship ManyToMany {
|
|
@@ -52,21 +67,27 @@ relationship ManyToMany {
|
|
|
52
67
|
microservice Agent, AgentTeam with agentService
|
|
53
68
|
```
|
|
54
69
|
|
|
55
|
-
|
|
70
|
+
### Step 2: Generate Code
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Generate all microservices from JDL
|
|
74
|
+
jhipster import-jdl jhipster-jdl.jdl
|
|
75
|
+
|
|
76
|
+
# Verify generated files per service
|
|
77
|
+
ls demand-service/src/main/java/*/domain/
|
|
78
|
+
ls agent-service/src/main/java/*/domain/
|
|
79
|
+
```
|
|
56
80
|
|
|
57
|
-
|
|
81
|
+
### Step 3: Implement Cross-Service Data Fetching
|
|
58
82
|
|
|
59
83
|
```java
|
|
60
|
-
//
|
|
84
|
+
// In demand-service -- Task stores only agentId
|
|
61
85
|
@Entity
|
|
62
86
|
public class Task {
|
|
63
|
-
//
|
|
64
|
-
private Long agentId; // Apenas o ID, não a entidade Agent
|
|
65
|
-
|
|
66
|
-
// Para obter dados do Agent, chamar agent-service via Feign
|
|
87
|
+
private Long agentId; // Just the ID, not the Agent entity
|
|
67
88
|
}
|
|
68
89
|
|
|
69
|
-
//
|
|
90
|
+
// In demand-service -- fetch Agent data via Feign
|
|
70
91
|
@Service
|
|
71
92
|
public class DemandServiceImpl {
|
|
72
93
|
private final AgentServiceClient agentClient;
|
|
@@ -79,9 +100,40 @@ public class DemandServiceImpl {
|
|
|
79
100
|
}
|
|
80
101
|
```
|
|
81
102
|
|
|
82
|
-
|
|
103
|
+
### Step 4: Build and Test
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Build each service
|
|
107
|
+
cd demand-service && ./mvnw test
|
|
108
|
+
cd agent-service && ./mvnw test
|
|
109
|
+
|
|
110
|
+
# Run all services
|
|
111
|
+
cd demand-service && ./mvnw spring-boot:run &
|
|
112
|
+
cd agent-service && ./mvnw spring-boot:run &
|
|
113
|
+
```
|
|
83
114
|
|
|
84
|
-
|
|
85
|
-
-
|
|
86
|
-
|
|
87
|
-
|
|
115
|
+
## Resources
|
|
116
|
+
- `references/cross-service-entities.md` - Cross-service entity patterns and rules
|
|
117
|
+
|
|
118
|
+
## Examples
|
|
119
|
+
### Example 1: Create Entities for a New Service
|
|
120
|
+
User asks: "Create Product and Order entities for the order-service"
|
|
121
|
+
Response approach:
|
|
122
|
+
1. Define entities in JDL with `microservice Product, Order with orderService`
|
|
123
|
+
2. Use ID references for entities in other services
|
|
124
|
+
3. Run `jhipster import-jdl`
|
|
125
|
+
4. Verify generated code
|
|
126
|
+
|
|
127
|
+
### Example 2: Reference an Entity from Another Service
|
|
128
|
+
User asks: "Task needs to show the Agent name but Agent is in another service"
|
|
129
|
+
Response approach:
|
|
130
|
+
1. Store `agentId Long` in Task entity (not FK)
|
|
131
|
+
2. Create Feign client to agent-service
|
|
132
|
+
3. Fetch Agent data when needed via Feign call
|
|
133
|
+
4. Combine into a response DTO
|
|
134
|
+
|
|
135
|
+
## Notes
|
|
136
|
+
- Fundamental rule: entity belongs to ONE service
|
|
137
|
+
- Cross-service: store only the ID, never a real FK
|
|
138
|
+
- To display data from another service: Feign client or Kafka event
|
|
139
|
+
- Never share entity classes between services (duplicate DTOs if needed)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Cross-Service Entity Patterns
|
|
2
|
+
|
|
3
|
+
## Rules
|
|
4
|
+
1. Each entity belongs to exactly ONE microservice
|
|
5
|
+
2. Cross-service references use plain ID fields (Long/UUID), not foreign keys
|
|
6
|
+
3. Data from other services is fetched via Feign or received via Kafka events
|
|
7
|
+
4. DTOs are duplicated between services, never shared as JARs
|
|
8
|
+
|
|
9
|
+
## JDL Pattern
|
|
10
|
+
```jdl
|
|
11
|
+
entity Task {
|
|
12
|
+
agentId Long // Reference to Agent in agent-service
|
|
13
|
+
branchName String
|
|
14
|
+
}
|
|
15
|
+
microservice Task with demandService
|
|
16
|
+
|
|
17
|
+
entity Agent {
|
|
18
|
+
name String required
|
|
19
|
+
}
|
|
20
|
+
microservice Agent with agentService
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Data Fetching Pattern
|
|
24
|
+
```java
|
|
25
|
+
// Option 1: Feign (synchronous, real-time)
|
|
26
|
+
AgentDTO agent = agentClient.getAgent(task.getAgentId());
|
|
27
|
+
|
|
28
|
+
// Option 2: Local cache from Kafka events (eventual consistency)
|
|
29
|
+
AgentSummary agent = localAgentCache.get(task.getAgentId());
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Anti-Patterns to Avoid
|
|
33
|
+
- Sharing database between services
|
|
34
|
+
- Using real foreign keys across service boundaries
|
|
35
|
+
- Sharing entity JARs between services
|
|
36
|
+
- Joining tables from different service databases
|
package/templates/bundle-jhipster-microservices/skills/jhipster-entities/references/jdl-types.md
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# JDL Types Reference
|
|
2
|
+
|
|
3
|
+
## Field Types
|
|
4
|
+
| JDL Type | Java | DB | Notes |
|
|
5
|
+
|---|---|---|---|
|
|
6
|
+
| String | String | varchar(255) | Default max 255 |
|
|
7
|
+
| Integer | Integer | integer | 32-bit |
|
|
8
|
+
| Long | Long | bigint | 64-bit |
|
|
9
|
+
| Float | Float | float | Single precision |
|
|
10
|
+
| Double | Double | double | Double precision |
|
|
11
|
+
| BigDecimal | BigDecimal | decimal | Exact precision |
|
|
12
|
+
| Boolean | Boolean | boolean | |
|
|
13
|
+
| LocalDate | LocalDate | date | Date only |
|
|
14
|
+
| Instant | Instant | timestamp | UTC timestamp |
|
|
15
|
+
| ZonedDateTime | ZonedDateTime | timestamp | With timezone |
|
|
16
|
+
| Duration | Duration | bigint | Duration in nanos |
|
|
17
|
+
| UUID | UUID | uuid | Unique identifier |
|
|
18
|
+
| Blob | byte[] | blob | Binary data |
|
|
19
|
+
| AnyBlob | byte[] | blob | Any binary |
|
|
20
|
+
| ImageBlob | byte[] | blob | Image with content type |
|
|
21
|
+
| TextBlob | String | clob | Large text |
|
|
22
|
+
|
|
23
|
+
## Validations
|
|
24
|
+
| Validation | Applies to | Example |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| `required` | All | `name String required` |
|
|
27
|
+
| `minlength(n)` | String | `name String minlength(3)` |
|
|
28
|
+
| `maxlength(n)` | String | `name String maxlength(100)` |
|
|
29
|
+
| `min(n)` | Numeric | `price BigDecimal min(0)` |
|
|
30
|
+
| `max(n)` | Numeric | `quantity Integer max(1000)` |
|
|
31
|
+
| `pattern(regex)` | String | `sku String pattern(/^[A-Z]{3}-[0-9]{4}$/)` |
|
|
32
|
+
| `unique` | All | `email String unique` |
|
|
33
|
+
|
|
34
|
+
## Relationship Types
|
|
35
|
+
```jdl
|
|
36
|
+
relationship OneToMany {
|
|
37
|
+
Owner{children} to Child{owner(displayField) required}
|
|
38
|
+
}
|
|
39
|
+
relationship ManyToMany {
|
|
40
|
+
A{bs} to B{as}
|
|
41
|
+
}
|
|
42
|
+
relationship OneToOne {
|
|
43
|
+
A{b} to B with jpaDerivedIdentifier
|
|
44
|
+
}
|
|
45
|
+
relationship ManyToOne {
|
|
46
|
+
Child{parent(name)} to Parent
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Enum Definition
|
|
51
|
+
```jdl
|
|
52
|
+
enum Status {
|
|
53
|
+
ACTIVE("Active"),
|
|
54
|
+
INACTIVE("Inactive")
|
|
55
|
+
}
|
|
56
|
+
```
|