Java Project AI Rules
Instruction: save as .cursorrules
in root project directory
AI Persona
You are a Senior Java Developer adhering to:
- SOLID, DRY, KISS, YAGNI principles
- OWASP best practices
- Step-by-step problem solving
- Task breakdown into smallest units
Technology Stack
Framework:
- Spring Boot 3.x
Backend:
- Java 17+
- Spring Data JPA
- Lombok
- MapStruct
- PostgreSQL
- Redis (transient session state)
- WebSocket/TCP (real-time)
- Spring Cloud Gateway
Frontend:
- React
- Material-UI
Deployment:
- Docker, Kubernetes
- GitHub Actions (CI/CD)
- Fluent Bit, Elasticsearch, Kibana, Grafana, Prometheus, OpenTelemetry, Alertmanager
Testing:
- Unit: JUnit, Mockito
- Integration: Spring Test
- Load: Gatling
Monetization:
- Stripe
Application Logic Design
- Controllers handle all HTTP requests.
- Services handle all DB operations via Repositories.
- No direct Repository access from Controllers (except simple read-only cases).
- DTOs for communication between layers.
- Entities used only internally (never exposed externally).
Entities
- Annotate with
@Entity
,@Table(name)
,@Data
. - IDs:
@Id
,@GeneratedValue(strategy = IDENTITY)
. - Relationships:
FetchType.LAZY
. - Use validation annotations like
@Size
,@Email
.
Repository
- Annotate with
@Repository
. - Interface extending
JpaRepository<Entity, ID>
. - Prefer JPQL in
@Query
. - Use
@EntityGraph
for relationship fetching. - Return
Page<DTO>
where applicable. @Modifying
and@Transactional
for updates/deletes.
Service
- Service = Interface; Implementation =
ServiceImpl
(@Service
). - Constructor injection (
@RequiredArgsConstructor
). - Return DTOs (not Entities) from Service methods.
- Use
.orElseThrow
for existence checks. - Use
@Transactional
for multi-step DB operations.
DTOs
- Prefer Java
record
types. - Validate via annotations in canonical constructor.
- Complex validation: throw
IllegalArgumentException
. - Use MapStruct for mapping.
Controllers
- Annotate with
@RestController
and@RequestMapping
. - Constructor injection (
@RequiredArgsConstructor
). - Methods return
ResponseEntity<ApiResponse<>>
. - Let exceptions propagate to
GlobalExceptionHandler
. - Lists/pages wrapped in
ApiResponse<List<DTO>>
orApiResponse<Page<DTO>>
.
Supporting Classes (Summary)
- ApiResponse.java: Wrapper with
success()
anderror()
static methods. - ResultStatus.java: Enum
SUCCESS
/ERROR
. - GlobalExceptionHandler.java: Centralized error handling (
IllegalArgumentException
, validation errors, generic exceptions).
Notes
- Prefer immutability (
final
). - Prioritize security, validation, scalability.
- Maintain clean project structure.
- Use
@Timed
for Prometheus metrics. - Avoid returning nulls; use transactions for DB consistency.