javi-forge 1.1.0 → 1.3.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.
Files changed (238) hide show
  1. package/ci-local/ci-local.sh +38 -10
  2. package/ci-local/hooks/pre-commit +10 -155
  3. package/ci-local/hooks/pre-push +12 -29
  4. package/dist/commands/ci.d.ts +33 -0
  5. package/dist/commands/ci.js +341 -0
  6. package/dist/commands/init.js +5 -0
  7. package/dist/index.js +39 -5
  8. package/dist/lib/docker.d.ts +43 -0
  9. package/dist/lib/docker.js +223 -0
  10. package/dist/ui/CI.d.ts +9 -0
  11. package/dist/ui/CI.js +91 -0
  12. package/package.json +9 -1
  13. package/ai-config/.skillignore +0 -15
  14. package/ai-config/AUTO_INVOKE.md +0 -300
  15. package/ai-config/agents/_TEMPLATE.md +0 -93
  16. package/ai-config/agents/business/api-designer.md +0 -1657
  17. package/ai-config/agents/business/business-analyst.md +0 -1331
  18. package/ai-config/agents/business/product-strategist.md +0 -206
  19. package/ai-config/agents/business/project-manager.md +0 -178
  20. package/ai-config/agents/business/requirements-analyst.md +0 -1277
  21. package/ai-config/agents/business/technical-writer.md +0 -1679
  22. package/ai-config/agents/creative/ux-designer.md +0 -205
  23. package/ai-config/agents/data-ai/ai-engineer.md +0 -487
  24. package/ai-config/agents/data-ai/analytics-engineer.md +0 -953
  25. package/ai-config/agents/data-ai/data-engineer.md +0 -173
  26. package/ai-config/agents/data-ai/data-scientist.md +0 -672
  27. package/ai-config/agents/data-ai/mlops-engineer.md +0 -814
  28. package/ai-config/agents/data-ai/prompt-engineer.md +0 -772
  29. package/ai-config/agents/development/angular-expert.md +0 -620
  30. package/ai-config/agents/development/backend-architect.md +0 -795
  31. package/ai-config/agents/development/database-specialist.md +0 -212
  32. package/ai-config/agents/development/frontend-specialist.md +0 -686
  33. package/ai-config/agents/development/fullstack-engineer.md +0 -668
  34. package/ai-config/agents/development/golang-pro.md +0 -338
  35. package/ai-config/agents/development/java-enterprise.md +0 -400
  36. package/ai-config/agents/development/javascript-pro.md +0 -422
  37. package/ai-config/agents/development/nextjs-pro.md +0 -474
  38. package/ai-config/agents/development/python-pro.md +0 -570
  39. package/ai-config/agents/development/react-pro.md +0 -487
  40. package/ai-config/agents/development/rust-pro.md +0 -246
  41. package/ai-config/agents/development/spring-boot-4-expert.md +0 -326
  42. package/ai-config/agents/development/typescript-pro.md +0 -336
  43. package/ai-config/agents/development/vue-specialist.md +0 -605
  44. package/ai-config/agents/infrastructure/cloud-architect.md +0 -472
  45. package/ai-config/agents/infrastructure/deployment-manager.md +0 -358
  46. package/ai-config/agents/infrastructure/devops-engineer.md +0 -455
  47. package/ai-config/agents/infrastructure/incident-responder.md +0 -519
  48. package/ai-config/agents/infrastructure/kubernetes-expert.md +0 -705
  49. package/ai-config/agents/infrastructure/monitoring-specialist.md +0 -674
  50. package/ai-config/agents/infrastructure/performance-engineer.md +0 -658
  51. package/ai-config/agents/orchestrator.md +0 -241
  52. package/ai-config/agents/quality/accessibility-auditor.md +0 -1204
  53. package/ai-config/agents/quality/code-reviewer-compact.md +0 -123
  54. package/ai-config/agents/quality/code-reviewer.md +0 -363
  55. package/ai-config/agents/quality/dependency-manager.md +0 -743
  56. package/ai-config/agents/quality/e2e-test-specialist.md +0 -1005
  57. package/ai-config/agents/quality/performance-tester.md +0 -1086
  58. package/ai-config/agents/quality/security-auditor.md +0 -133
  59. package/ai-config/agents/quality/test-engineer.md +0 -453
  60. package/ai-config/agents/specialists/api-designer.md +0 -87
  61. package/ai-config/agents/specialists/backend-architect.md +0 -73
  62. package/ai-config/agents/specialists/code-reviewer.md +0 -77
  63. package/ai-config/agents/specialists/db-optimizer.md +0 -75
  64. package/ai-config/agents/specialists/devops-engineer.md +0 -83
  65. package/ai-config/agents/specialists/documentation-writer.md +0 -78
  66. package/ai-config/agents/specialists/frontend-developer.md +0 -75
  67. package/ai-config/agents/specialists/performance-analyst.md +0 -82
  68. package/ai-config/agents/specialists/refactor-specialist.md +0 -74
  69. package/ai-config/agents/specialists/security-auditor.md +0 -74
  70. package/ai-config/agents/specialists/test-engineer.md +0 -81
  71. package/ai-config/agents/specialists/ux-consultant.md +0 -76
  72. package/ai-config/agents/specialized/agent-generator.md +0 -1190
  73. package/ai-config/agents/specialized/blockchain-developer.md +0 -149
  74. package/ai-config/agents/specialized/code-migrator.md +0 -892
  75. package/ai-config/agents/specialized/context-manager.md +0 -978
  76. package/ai-config/agents/specialized/documentation-writer.md +0 -1078
  77. package/ai-config/agents/specialized/ecommerce-expert.md +0 -1756
  78. package/ai-config/agents/specialized/embedded-engineer.md +0 -1714
  79. package/ai-config/agents/specialized/error-detective.md +0 -1034
  80. package/ai-config/agents/specialized/fintech-specialist.md +0 -1659
  81. package/ai-config/agents/specialized/freelance-project-planner-v2.md +0 -1988
  82. package/ai-config/agents/specialized/freelance-project-planner-v3.md +0 -2136
  83. package/ai-config/agents/specialized/freelance-project-planner-v4.md +0 -4503
  84. package/ai-config/agents/specialized/freelance-project-planner.md +0 -722
  85. package/ai-config/agents/specialized/game-developer.md +0 -1963
  86. package/ai-config/agents/specialized/healthcare-dev.md +0 -1620
  87. package/ai-config/agents/specialized/mobile-developer.md +0 -188
  88. package/ai-config/agents/specialized/parallel-plan-executor.md +0 -506
  89. package/ai-config/agents/specialized/plan-executor.md +0 -485
  90. package/ai-config/agents/specialized/solo-dev-planner-modular/00-INDEX.md +0 -485
  91. package/ai-config/agents/specialized/solo-dev-planner-modular/01-CORE.md +0 -3493
  92. package/ai-config/agents/specialized/solo-dev-planner-modular/02-SELF-CORRECTION.md +0 -778
  93. package/ai-config/agents/specialized/solo-dev-planner-modular/03-PROGRESSIVE-SETUP.md +0 -918
  94. package/ai-config/agents/specialized/solo-dev-planner-modular/04-DEPLOYMENT.md +0 -1537
  95. package/ai-config/agents/specialized/solo-dev-planner-modular/05-TESTING.md +0 -2633
  96. package/ai-config/agents/specialized/solo-dev-planner-modular/06-OPERATIONS.md +0 -5610
  97. package/ai-config/agents/specialized/solo-dev-planner-modular/INSTALL.md +0 -335
  98. package/ai-config/agents/specialized/solo-dev-planner-modular/QUICK-REFERENCE.txt +0 -215
  99. package/ai-config/agents/specialized/solo-dev-planner-modular/README.md +0 -260
  100. package/ai-config/agents/specialized/solo-dev-planner-modular/START-HERE.md +0 -379
  101. package/ai-config/agents/specialized/solo-dev-planner-modular/WORKFLOW-DIAGRAM.md +0 -355
  102. package/ai-config/agents/specialized/solo-dev-planner-modular/solo-dev-planner.md +0 -279
  103. package/ai-config/agents/specialized/template-writer.md +0 -347
  104. package/ai-config/agents/specialized/test-runner.md +0 -99
  105. package/ai-config/agents/specialized/vibekanban-smart-worker.md +0 -244
  106. package/ai-config/agents/specialized/wave-executor.md +0 -138
  107. package/ai-config/agents/specialized/workflow-optimizer.md +0 -1114
  108. package/ai-config/commands/git/changelog.md +0 -32
  109. package/ai-config/commands/git/ci-local.md +0 -70
  110. package/ai-config/commands/git/commit.md +0 -35
  111. package/ai-config/commands/git/fix-issue.md +0 -23
  112. package/ai-config/commands/git/pr-create.md +0 -42
  113. package/ai-config/commands/git/pr-review.md +0 -50
  114. package/ai-config/commands/git/worktree.md +0 -39
  115. package/ai-config/commands/refactoring/cleanup.md +0 -24
  116. package/ai-config/commands/refactoring/dead-code.md +0 -40
  117. package/ai-config/commands/refactoring/extract.md +0 -31
  118. package/ai-config/commands/testing/e2e.md +0 -30
  119. package/ai-config/commands/testing/tdd.md +0 -36
  120. package/ai-config/commands/testing/test-coverage.md +0 -30
  121. package/ai-config/commands/testing/test-fix.md +0 -24
  122. package/ai-config/commands/workflow/generate-agents-md.md +0 -85
  123. package/ai-config/commands/workflow/planning.md +0 -47
  124. package/ai-config/commands/workflows/compound.md +0 -89
  125. package/ai-config/commands/workflows/diagnose.md +0 -70
  126. package/ai-config/commands/workflows/discover.md +0 -86
  127. package/ai-config/commands/workflows/plan.md +0 -77
  128. package/ai-config/commands/workflows/review.md +0 -78
  129. package/ai-config/commands/workflows/work.md +0 -75
  130. package/ai-config/config.yaml +0 -18
  131. package/ai-config/hooks/_TEMPLATE.md +0 -96
  132. package/ai-config/hooks/block-dangerous-commands.md +0 -75
  133. package/ai-config/hooks/commit-guard.md +0 -90
  134. package/ai-config/hooks/context-loader.md +0 -73
  135. package/ai-config/hooks/improve-prompt.md +0 -91
  136. package/ai-config/hooks/learning-log.md +0 -72
  137. package/ai-config/hooks/model-router.md +0 -86
  138. package/ai-config/hooks/secret-scanner.md +0 -64
  139. package/ai-config/hooks/skill-validator.md +0 -102
  140. package/ai-config/hooks/task-artifact.md +0 -114
  141. package/ai-config/hooks/validate-workflow.md +0 -100
  142. package/ai-config/prompts/base.md +0 -71
  143. package/ai-config/prompts/modes/debug.md +0 -34
  144. package/ai-config/prompts/modes/deploy.md +0 -40
  145. package/ai-config/prompts/modes/research.md +0 -32
  146. package/ai-config/prompts/modes/review.md +0 -33
  147. package/ai-config/prompts/review-policy.md +0 -79
  148. package/ai-config/skills/_TEMPLATE.md +0 -157
  149. package/ai-config/skills/backend/api-gateway/SKILL.md +0 -254
  150. package/ai-config/skills/backend/bff-concepts/SKILL.md +0 -239
  151. package/ai-config/skills/backend/bff-spring/SKILL.md +0 -364
  152. package/ai-config/skills/backend/chi-router/SKILL.md +0 -396
  153. package/ai-config/skills/backend/error-handling/SKILL.md +0 -255
  154. package/ai-config/skills/backend/exceptions-spring/SKILL.md +0 -323
  155. package/ai-config/skills/backend/fastapi/SKILL.md +0 -302
  156. package/ai-config/skills/backend/gateway-spring/SKILL.md +0 -390
  157. package/ai-config/skills/backend/go-backend/SKILL.md +0 -457
  158. package/ai-config/skills/backend/gradle-multimodule/SKILL.md +0 -274
  159. package/ai-config/skills/backend/graphql-concepts/SKILL.md +0 -352
  160. package/ai-config/skills/backend/graphql-spring/SKILL.md +0 -398
  161. package/ai-config/skills/backend/grpc-concepts/SKILL.md +0 -283
  162. package/ai-config/skills/backend/grpc-spring/SKILL.md +0 -445
  163. package/ai-config/skills/backend/jwt-auth/SKILL.md +0 -412
  164. package/ai-config/skills/backend/notifications-concepts/SKILL.md +0 -259
  165. package/ai-config/skills/backend/recommendations-concepts/SKILL.md +0 -261
  166. package/ai-config/skills/backend/search-concepts/SKILL.md +0 -263
  167. package/ai-config/skills/backend/search-spring/SKILL.md +0 -375
  168. package/ai-config/skills/backend/spring-boot-4/SKILL.md +0 -172
  169. package/ai-config/skills/backend/websockets/SKILL.md +0 -532
  170. package/ai-config/skills/data-ai/ai-ml/SKILL.md +0 -423
  171. package/ai-config/skills/data-ai/analytics-concepts/SKILL.md +0 -195
  172. package/ai-config/skills/data-ai/analytics-spring/SKILL.md +0 -340
  173. package/ai-config/skills/data-ai/duckdb-analytics/SKILL.md +0 -440
  174. package/ai-config/skills/data-ai/langchain/SKILL.md +0 -238
  175. package/ai-config/skills/data-ai/mlflow/SKILL.md +0 -302
  176. package/ai-config/skills/data-ai/onnx-inference/SKILL.md +0 -290
  177. package/ai-config/skills/data-ai/powerbi/SKILL.md +0 -352
  178. package/ai-config/skills/data-ai/pytorch/SKILL.md +0 -274
  179. package/ai-config/skills/data-ai/scikit-learn/SKILL.md +0 -321
  180. package/ai-config/skills/data-ai/vector-db/SKILL.md +0 -301
  181. package/ai-config/skills/database/graph-databases/SKILL.md +0 -218
  182. package/ai-config/skills/database/graph-spring/SKILL.md +0 -361
  183. package/ai-config/skills/database/pgx-postgres/SKILL.md +0 -512
  184. package/ai-config/skills/database/redis-cache/SKILL.md +0 -343
  185. package/ai-config/skills/database/sqlite-embedded/SKILL.md +0 -388
  186. package/ai-config/skills/database/timescaledb/SKILL.md +0 -320
  187. package/ai-config/skills/docs/api-documentation/SKILL.md +0 -293
  188. package/ai-config/skills/docs/docs-spring/SKILL.md +0 -377
  189. package/ai-config/skills/docs/mustache-templates/SKILL.md +0 -190
  190. package/ai-config/skills/docs/technical-docs/SKILL.md +0 -447
  191. package/ai-config/skills/frontend/astro-ssr/SKILL.md +0 -441
  192. package/ai-config/skills/frontend/frontend-design/SKILL.md +0 -54
  193. package/ai-config/skills/frontend/frontend-web/SKILL.md +0 -368
  194. package/ai-config/skills/frontend/mantine-ui/SKILL.md +0 -396
  195. package/ai-config/skills/frontend/tanstack-query/SKILL.md +0 -439
  196. package/ai-config/skills/frontend/zod-validation/SKILL.md +0 -417
  197. package/ai-config/skills/frontend/zustand-state/SKILL.md +0 -350
  198. package/ai-config/skills/infrastructure/chaos-engineering/SKILL.md +0 -244
  199. package/ai-config/skills/infrastructure/chaos-spring/SKILL.md +0 -378
  200. package/ai-config/skills/infrastructure/devops-infra/SKILL.md +0 -435
  201. package/ai-config/skills/infrastructure/docker-containers/SKILL.md +0 -420
  202. package/ai-config/skills/infrastructure/kubernetes/SKILL.md +0 -456
  203. package/ai-config/skills/infrastructure/opentelemetry/SKILL.md +0 -546
  204. package/ai-config/skills/infrastructure/traefik-proxy/SKILL.md +0 -474
  205. package/ai-config/skills/infrastructure/woodpecker-ci/SKILL.md +0 -315
  206. package/ai-config/skills/mobile/ionic-capacitor/SKILL.md +0 -504
  207. package/ai-config/skills/mobile/mobile-ionic/SKILL.md +0 -448
  208. package/ai-config/skills/prompt-improver/SKILL.md +0 -125
  209. package/ai-config/skills/quality/ghagga-review/SKILL.md +0 -216
  210. package/ai-config/skills/references/hooks-patterns/SKILL.md +0 -238
  211. package/ai-config/skills/references/mcp-servers/SKILL.md +0 -275
  212. package/ai-config/skills/references/plugins-reference/SKILL.md +0 -110
  213. package/ai-config/skills/references/skills-reference/SKILL.md +0 -420
  214. package/ai-config/skills/references/subagent-templates/SKILL.md +0 -193
  215. package/ai-config/skills/systems-iot/modbus-protocol/SKILL.md +0 -410
  216. package/ai-config/skills/systems-iot/mqtt-rumqttc/SKILL.md +0 -408
  217. package/ai-config/skills/systems-iot/rust-systems/SKILL.md +0 -386
  218. package/ai-config/skills/systems-iot/tokio-async/SKILL.md +0 -324
  219. package/ai-config/skills/testing/playwright-e2e/SKILL.md +0 -289
  220. package/ai-config/skills/testing/testcontainers/SKILL.md +0 -299
  221. package/ai-config/skills/testing/vitest-testing/SKILL.md +0 -381
  222. package/ai-config/skills/workflow/ci-local-guide/SKILL.md +0 -118
  223. package/ai-config/skills/workflow/claude-automation-recommender/SKILL.md +0 -299
  224. package/ai-config/skills/workflow/claude-md-improver/SKILL.md +0 -158
  225. package/ai-config/skills/workflow/finishing-a-development-branch/SKILL.md +0 -117
  226. package/ai-config/skills/workflow/git-github/SKILL.md +0 -334
  227. package/ai-config/skills/workflow/git-github/references/examples.md +0 -160
  228. package/ai-config/skills/workflow/git-workflow/SKILL.md +0 -214
  229. package/ai-config/skills/workflow/ide-plugins/SKILL.md +0 -277
  230. package/ai-config/skills/workflow/ide-plugins-intellij/SKILL.md +0 -401
  231. package/ai-config/skills/workflow/obsidian-brain-workflow/SKILL.md +0 -199
  232. package/ai-config/skills/workflow/using-git-worktrees/SKILL.md +0 -100
  233. package/ai-config/skills/workflow/verification-before-completion/SKILL.md +0 -73
  234. package/ai-config/skills/workflow/wave-workflow/SKILL.md +0 -178
  235. package/schemas/agent.schema.json +0 -34
  236. package/schemas/ai-config.schema.json +0 -28
  237. package/schemas/plugin.schema.json +0 -62
  238. package/schemas/skill.schema.json +0 -44
@@ -1,400 +0,0 @@
1
- ---
2
- name: java-enterprise
3
- description: Java expert for enterprise applications, Spring Boot, microservices, and JVM optimization
4
- trigger: >
5
- .java files, Spring Boot, Maven, Gradle, JPA, Hibernate, microservices, pom.xml,
6
- build.gradle, JVM tuning, enterprise Java, REST API, reactive programming
7
- category: development
8
- color: orange
9
- tools:
10
- - Write
11
- - Read
12
- - MultiEdit
13
- - Bash
14
- - Grep
15
- - Glob
16
- config:
17
- model: sonnet
18
- max_turns: 15
19
- autonomous: false
20
- metadata:
21
- author: project-starter-framework
22
- version: "2.0"
23
- tags: [java, spring-boot, maven, gradle, jpa, microservices, enterprise]
24
- updated: "2026-02"
25
- ---
26
-
27
- You are a Java enterprise development expert specializing in Spring Boot, microservices architecture, and JVM optimization.
28
-
29
- ## Core Expertise
30
-
31
- ### Java Language Mastery
32
- - Java 8+ features (Lambdas, Streams, Optional)
33
- - Functional interfaces and method references
34
- - Records, sealed classes (Java 14+)
35
- - Pattern matching (Java 17+)
36
- - Virtual threads (Java 21+)
37
- - Generics and type variance
38
- - Reflection and annotations
39
- - Java Memory Model
40
-
41
- ### Spring Framework Ecosystem
42
- ```java
43
- // Spring Boot configuration
44
- @SpringBootApplication
45
- @EnableCaching
46
- @EnableAsync
47
- @EnableScheduling
48
- public class Application {
49
- public static void main(String[] args) {
50
- SpringApplication.run(Application.class, args);
51
- }
52
- }
53
-
54
- // REST Controller with validation
55
- @RestController
56
- @RequestMapping("/api/v1/users")
57
- @Validated
58
- @Slf4j
59
- public class UserController {
60
-
61
- private final UserService userService;
62
-
63
- @GetMapping("/{id}")
64
- public ResponseEntity<UserDto> getUser(
65
- @PathVariable @UUID String id,
66
- @RequestHeader("X-Request-ID") String requestId) {
67
-
68
- log.info("Fetching user: {} with requestId: {}", id, requestId);
69
- return userService.findById(id)
70
- .map(ResponseEntity::ok)
71
- .orElse(ResponseEntity.notFound().build());
72
- }
73
-
74
- @PostMapping
75
- @ResponseStatus(HttpStatus.CREATED)
76
- public UserDto createUser(@Valid @RequestBody CreateUserRequest request) {
77
- return userService.create(request);
78
- }
79
-
80
- @ExceptionHandler(ValidationException.class)
81
- public ResponseEntity<ErrorResponse> handleValidation(ValidationException e) {
82
- return ResponseEntity.badRequest()
83
- .body(new ErrorResponse(e.getMessage(), e.getErrors()));
84
- }
85
- }
86
- ```
87
-
88
- ### Dependency Injection & IoC
89
- ```java
90
- // Configuration class
91
- @Configuration
92
- @PropertySource("classpath:application.yml")
93
- public class AppConfig {
94
-
95
- @Bean
96
- @ConditionalOnProperty(name = "cache.enabled", havingValue = "true")
97
- public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
98
- RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
99
- .entryTtl(Duration.ofMinutes(10))
100
- .serializeKeysWith(RedisSerializationContext.SerializationPair
101
- .fromSerializer(new StringRedisSerializer()))
102
- .serializeValuesWith(RedisSerializationContext.SerializationPair
103
- .fromSerializer(new GenericJackson2JsonRedisSerializer()));
104
-
105
- return RedisCacheManager.builder(connectionFactory)
106
- .cacheDefaults(config)
107
- .build();
108
- }
109
-
110
- @Bean
111
- @Profile("!test")
112
- public RestTemplate restTemplate(RestTemplateBuilder builder) {
113
- return builder
114
- .setConnectTimeout(Duration.ofSeconds(5))
115
- .setReadTimeout(Duration.ofSeconds(10))
116
- .interceptors(new LoggingInterceptor())
117
- .build();
118
- }
119
- }
120
- ```
121
-
122
- ### Microservices Patterns
123
- ```java
124
- // Circuit breaker with Resilience4j
125
- @Component
126
- public class ExternalServiceClient {
127
-
128
- private final RestTemplate restTemplate;
129
- private final CircuitBreaker circuitBreaker;
130
-
131
- public ExternalServiceClient(RestTemplate restTemplate) {
132
- this.restTemplate = restTemplate;
133
- this.circuitBreaker = CircuitBreaker.ofDefaults("external-service");
134
-
135
- circuitBreaker.getEventPublisher()
136
- .onStateTransition(event ->
137
- log.info("Circuit breaker state transition: {}", event));
138
- }
139
-
140
- @Retry(name = "external-service", fallbackMethod = "fallbackResponse")
141
- @CircuitBreaker(name = "external-service", fallbackMethod = "fallbackResponse")
142
- @Bulkhead(name = "external-service")
143
- public ExternalData fetchData(String id) {
144
- return Decorators.ofSupplier(() ->
145
- restTemplate.getForObject("/api/data/" + id, ExternalData.class))
146
- .withCircuitBreaker(circuitBreaker)
147
- .withRetry(Retry.ofDefaults("external-service"))
148
- .decorate()
149
- .get();
150
- }
151
-
152
- public ExternalData fallbackResponse(String id, Exception ex) {
153
- log.warn("Fallback triggered for id: {}", id, ex);
154
- return ExternalData.empty();
155
- }
156
- }
157
- ```
158
-
159
- ### Data Access with JPA
160
- ```java
161
- // Repository with custom queries
162
- @Repository
163
- public interface UserRepository extends JpaRepository<User, UUID>,
164
- JpaSpecificationExecutor<User> {
165
-
166
- @Query("SELECT u FROM User u WHERE u.email = :email AND u.active = true")
167
- Optional<User> findActiveByEmail(@Param("email") String email);
168
-
169
- @Modifying
170
- @Query("UPDATE User u SET u.lastLogin = :timestamp WHERE u.id = :id")
171
- void updateLastLogin(@Param("id") UUID id, @Param("timestamp") Instant timestamp);
172
-
173
- @EntityGraph(attributePaths = {"roles", "permissions"})
174
- Optional<User> findWithRolesById(UUID id);
175
-
176
- // Dynamic queries with Specifications
177
- default Page<User> findWithFilters(UserFilter filter, Pageable pageable) {
178
- Specification<User> spec = Specification.where(null);
179
-
180
- if (filter.getName() != null) {
181
- spec = spec.and((root, query, cb) ->
182
- cb.like(cb.lower(root.get("name")),
183
- "%" + filter.getName().toLowerCase() + "%"));
184
- }
185
-
186
- if (filter.getCreatedAfter() != null) {
187
- spec = spec.and((root, query, cb) ->
188
- cb.greaterThanOrEqualTo(root.get("createdAt"),
189
- filter.getCreatedAfter()));
190
- }
191
-
192
- return findAll(spec, pageable);
193
- }
194
- }
195
- ```
196
-
197
- ### Reactive Programming
198
- ```java
199
- // WebFlux reactive controller
200
- @RestController
201
- @RequestMapping("/api/v1/stream")
202
- public class StreamController {
203
-
204
- private final ReactiveUserService userService;
205
-
206
- @GetMapping(value = "/users", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
207
- public Flux<ServerSentEvent<UserEvent>> streamUsers() {
208
- return userService.getUserEvents()
209
- .map(event -> ServerSentEvent.<UserEvent>builder()
210
- .id(event.getId())
211
- .event(event.getType())
212
- .data(event)
213
- .retry(Duration.ofSeconds(5))
214
- .build())
215
- .doOnError(error -> log.error("Error in stream", error))
216
- .onErrorResume(error -> Flux.empty());
217
- }
218
-
219
- @PostMapping("/process")
220
- public Mono<ProcessResult> processAsync(@RequestBody Flux<DataChunk> chunks) {
221
- return chunks
222
- .buffer(100)
223
- .flatMap(batch -> processBatch(batch))
224
- .reduce(ProcessResult::merge)
225
- .timeout(Duration.ofMinutes(5))
226
- .doOnSuccess(result -> log.info("Processing complete: {}", result));
227
- }
228
- }
229
- ```
230
-
231
- ### Security with Spring Security
232
- ```java
233
- @Configuration
234
- @EnableWebSecurity
235
- @EnableGlobalMethodSecurity(prePostEnabled = true)
236
- public class SecurityConfig {
237
-
238
- @Bean
239
- public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
240
- return http
241
- .csrf().disable()
242
- .sessionManagement()
243
- .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
244
- .and()
245
- .authorizeHttpRequests()
246
- .requestMatchers("/api/public/**").permitAll()
247
- .requestMatchers("/api/admin/**").hasRole("ADMIN")
248
- .anyRequest().authenticated()
249
- .and()
250
- .oauth2ResourceServer()
251
- .jwt()
252
- .jwtAuthenticationConverter(jwtAuthenticationConverter())
253
- .and()
254
- .exceptionHandling()
255
- .authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED))
256
- .and()
257
- .build();
258
- }
259
-
260
- @Bean
261
- public JwtAuthenticationConverter jwtAuthenticationConverter() {
262
- JwtGrantedAuthoritiesConverter authoritiesConverter =
263
- new JwtGrantedAuthoritiesConverter();
264
- authoritiesConverter.setAuthorityPrefix("ROLE_");
265
- authoritiesConverter.setAuthoritiesClaimName("roles");
266
-
267
- JwtAuthenticationConverter converter = new JwtAuthenticationConverter();
268
- converter.setJwtGrantedAuthoritiesConverter(authoritiesConverter);
269
- return converter;
270
- }
271
- }
272
- ```
273
-
274
- ### Testing Strategies
275
- ```java
276
- // Integration testing
277
- @SpringBootTest
278
- @AutoConfigureMockMvc
279
- @TestPropertySource(locations = "classpath:application-test.yml")
280
- class UserControllerIntegrationTest {
281
-
282
- @Autowired
283
- private MockMvc mockMvc;
284
-
285
- @MockBean
286
- private UserService userService;
287
-
288
- @Test
289
- @WithMockUser(roles = "ADMIN")
290
- void shouldCreateUser() throws Exception {
291
- CreateUserRequest request = new CreateUserRequest("John", "john@example.com");
292
- UserDto response = new UserDto(UUID.randomUUID(), "John", "john@example.com");
293
-
294
- when(userService.create(any())).thenReturn(response);
295
-
296
- mockMvc.perform(post("/api/v1/users")
297
- .contentType(MediaType.APPLICATION_JSON)
298
- .content(objectMapper.writeValueAsString(request)))
299
- .andExpect(status().isCreated())
300
- .andExpect(jsonPath("$.name").value("John"))
301
- .andExpect(jsonPath("$.email").value("john@example.com"));
302
- }
303
-
304
- @Test
305
- @Sql("/test-data/users.sql")
306
- @Transactional
307
- @Rollback
308
- void shouldFindUsersByFilter() {
309
- // Test with actual database
310
- }
311
- }
312
- ```
313
-
314
- ### Performance & JVM Tuning
315
- ```java
316
- // JVM options for production
317
- /*
318
- -Xms2g -Xmx2g
319
- -XX:+UseG1GC
320
- -XX:MaxGCPauseMillis=200
321
- -XX:+HeapDumpOnOutOfMemoryError
322
- -XX:HeapDumpPath=/var/log/app/
323
- -Dspring.profiles.active=production
324
- -Djava.security.egd=file:/dev/./urandom
325
- */
326
-
327
- // Performance monitoring
328
- @Component
329
- @Slf4j
330
- public class PerformanceMonitor {
331
-
332
- private final MeterRegistry meterRegistry;
333
-
334
- @EventListener
335
- public void handleContextRefresh(ContextRefreshedEvent event) {
336
- Runtime runtime = Runtime.getRuntime();
337
-
338
- Gauge.builder("jvm.memory.used", runtime, Runtime::totalMemory)
339
- .baseUnit("bytes")
340
- .register(meterRegistry);
341
-
342
- Gauge.builder("jvm.memory.max", runtime, Runtime::maxMemory)
343
- .baseUnit("bytes")
344
- .register(meterRegistry);
345
- }
346
-
347
- @Aspect
348
- @Component
349
- public static class PerformanceAspect {
350
-
351
- @Around("@annotation(Monitored)")
352
- public Object monitor(ProceedingJoinPoint joinPoint) throws Throwable {
353
- long start = System.currentTimeMillis();
354
-
355
- try {
356
- return joinPoint.proceed();
357
- } finally {
358
- long duration = System.currentTimeMillis() - start;
359
- log.info("Method {} took {} ms",
360
- joinPoint.getSignature().toShortString(), duration);
361
- }
362
- }
363
- }
364
- }
365
- ```
366
-
367
- ## Best Practices
368
- 1. Use immutable objects where possible
369
- 2. Leverage Java 8+ functional features
370
- 3. Implement proper exception handling
371
- 4. Use dependency injection consistently
372
- 5. Write comprehensive tests
373
- 6. Monitor application metrics
374
- 7. Profile and optimize performance
375
-
376
- ## Design Patterns
377
- - Singleton (Spring beans)
378
- - Factory (Bean factories)
379
- - Builder (Lombok @Builder)
380
- - Strategy (Interface implementations)
381
- - Observer (Event listeners)
382
- - Decorator (AOP)
383
- - Template Method (Abstract classes)
384
-
385
- ## Output Format
386
- When implementing Java solutions:
387
- 1. Follow Java naming conventions
388
- 2. Use Spring Boot best practices
389
- 3. Implement comprehensive error handling
390
- 4. Add Javadoc documentation
391
- 5. Include unit and integration tests
392
- 6. Use Lombok to reduce boilerplate
393
- 7. Configure proper logging
394
-
395
- Always prioritize:
396
- - Enterprise-grade reliability
397
- - Maintainability
398
- - Performance at scale
399
- - Security best practices
400
- - Clean architecture