206 lines
6.9 KiB
Markdown
206 lines
6.9 KiB
Markdown
|
|
# CLAUDE.md
|
||
|
|
|
||
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||
|
|
|
||
|
|
## Project Overview
|
||
|
|
|
||
|
|
This is a Spring Boot 3.5.5 backend project using Java 17+ with a modular architecture. The project is based on the "芋道" (Yudao) framework and uses PostgreSQL as the primary database. It follows a multi-module Maven structure with clear separation between framework components, business modules, and the server container.
|
||
|
|
|
||
|
|
## Build & Run Commands
|
||
|
|
|
||
|
|
### Build the project
|
||
|
|
```bash
|
||
|
|
mvn clean install
|
||
|
|
```
|
||
|
|
|
||
|
|
### Run the application
|
||
|
|
```bash
|
||
|
|
# Run from yolo-server module
|
||
|
|
mvn spring-boot:run -pl yolo-server
|
||
|
|
|
||
|
|
# Or run the JAR after building
|
||
|
|
java -jar yolo-server/target/yolo-server.jar
|
||
|
|
```
|
||
|
|
|
||
|
|
### Run with specific profile
|
||
|
|
```bash
|
||
|
|
# Local environment (default)
|
||
|
|
mvn spring-boot:run -pl yolo-server -Dspring-boot.run.profiles=local
|
||
|
|
|
||
|
|
# Development environment
|
||
|
|
mvn spring-boot:run -pl yolo-server -Dspring-boot.run.profiles=dev
|
||
|
|
```
|
||
|
|
|
||
|
|
### Run tests
|
||
|
|
```bash
|
||
|
|
# Run all tests
|
||
|
|
mvn test
|
||
|
|
|
||
|
|
# Run tests for specific module
|
||
|
|
mvn test -pl yolo-module-system
|
||
|
|
```
|
||
|
|
|
||
|
|
### Package for deployment
|
||
|
|
```bash
|
||
|
|
mvn clean package -DskipTests
|
||
|
|
```
|
||
|
|
|
||
|
|
## Architecture
|
||
|
|
|
||
|
|
### Module Structure
|
||
|
|
|
||
|
|
The project uses a **modular monolith** architecture with the following key modules:
|
||
|
|
|
||
|
|
- **yolo-dependencies**: Centralized dependency management (BOM)
|
||
|
|
- **yolo-framework**: Technical framework components (reusable starters)
|
||
|
|
- `yolo-common`: Core utilities, exceptions, enums, validation
|
||
|
|
- `yolo-spring-boot-starter-web`: Web layer (Swagger, Jackson, XSS protection, API encryption)
|
||
|
|
- `yolo-spring-boot-starter-security`: Spring Security integration
|
||
|
|
- `yolo-spring-boot-starter-mybatis`: MyBatis Plus with multi-datasource support
|
||
|
|
- `yolo-spring-boot-starter-redis`: Redis/Redisson integration
|
||
|
|
- `yolo-spring-boot-starter-job`: Quartz job scheduling
|
||
|
|
- `yolo-spring-boot-starter-mq`: Message queue support (RocketMQ, Kafka, RabbitMQ)
|
||
|
|
- `yolo-spring-boot-starter-monitor`: Monitoring (Actuator, Spring Boot Admin)
|
||
|
|
- `yolo-spring-boot-starter-websocket`: WebSocket support
|
||
|
|
- `yolo-spring-boot-starter-excel`: Excel import/export
|
||
|
|
- `yolo-spring-boot-starter-protection`: Rate limiting and circuit breaker
|
||
|
|
- `yolo-spring-boot-starter-biz-*`: Business-specific components (tenant, data permission, IP)
|
||
|
|
- **yolo-module-system**: System management module (users, roles, permissions, dictionaries)
|
||
|
|
- **yolo-module-infra**: Infrastructure module (jobs, file storage, code generator, monitoring)
|
||
|
|
- **yolo-server**: Main application container (empty shell that aggregates modules)
|
||
|
|
|
||
|
|
### Layered Architecture
|
||
|
|
|
||
|
|
Each business module follows a standard three-layer architecture:
|
||
|
|
|
||
|
|
```
|
||
|
|
controller/ # REST API endpoints (admin-api, app-api)
|
||
|
|
├── admin/ # Admin backend APIs
|
||
|
|
└── app/ # User-facing app APIs
|
||
|
|
service/ # Business logic layer
|
||
|
|
└── impl/ # Service implementations
|
||
|
|
dal/ # Data Access Layer
|
||
|
|
├── dataobject/ # Entity classes (DO)
|
||
|
|
├── mysql/ # MyBatis mappers
|
||
|
|
└── redis/ # Redis repositories
|
||
|
|
api/ # API interfaces and DTOs for module communication
|
||
|
|
convert/ # MapStruct converters (VO ↔ DO ↔ DTO)
|
||
|
|
enums/ # Module-specific enums
|
||
|
|
```
|
||
|
|
|
||
|
|
### Key Design Patterns
|
||
|
|
|
||
|
|
- **VO Pattern**: Request/Response VOs for API layer, separate from domain objects
|
||
|
|
- **DTO Pattern**: Data Transfer Objects for inter-module communication
|
||
|
|
- **DO Pattern**: Data Objects (entities) for persistence layer
|
||
|
|
- **Converter Pattern**: MapStruct for object mapping between layers
|
||
|
|
- **Multi-tenancy**: Built-in tenant isolation support
|
||
|
|
- **Data Permission**: Row-level data access control
|
||
|
|
|
||
|
|
## Database
|
||
|
|
|
||
|
|
### Primary Database
|
||
|
|
- **PostgreSQL** (configured in `application-local.yaml`)
|
||
|
|
- Connection: `jdbc:postgresql://localhost:5432/keyborad_db`
|
||
|
|
- Default credentials: root/123asd
|
||
|
|
|
||
|
|
### Database Scripts
|
||
|
|
SQL scripts are located in `sql/` directory with support for multiple databases:
|
||
|
|
- `sql/postgresql/` - PostgreSQL scripts
|
||
|
|
- `sql/mysql/` - MySQL scripts
|
||
|
|
- `sql/oracle/`, `sql/sqlserver/`, `sql/dm/`, `sql/kingbase/`, `sql/opengauss/` - Other DB support
|
||
|
|
|
||
|
|
### Database Conversion
|
||
|
|
Use `sql/tools/convertor.py` to convert MySQL scripts to other databases:
|
||
|
|
```bash
|
||
|
|
cd sql/tools
|
||
|
|
python3 convertor.py postgres > output.sql
|
||
|
|
```
|
||
|
|
|
||
|
|
### Quick Database Setup with Docker
|
||
|
|
```bash
|
||
|
|
cd sql/tools
|
||
|
|
docker compose up -d postgres
|
||
|
|
```
|
||
|
|
|
||
|
|
## Configuration
|
||
|
|
|
||
|
|
### Application Profiles
|
||
|
|
- `application.yaml` - Base configuration
|
||
|
|
- `application-local.yaml` - Local development (port 48080)
|
||
|
|
- `application-dev.yaml` - Development environment
|
||
|
|
|
||
|
|
### Key Configuration Properties
|
||
|
|
- `yolo.info.base-package`: Base package name (`com.yolo.keyboard`)
|
||
|
|
- `yolo.tenant.enable`: Multi-tenancy toggle (default: true)
|
||
|
|
- `yolo.api-encrypt.enable`: API encryption toggle (default: true)
|
||
|
|
- `yolo.websocket.enable`: WebSocket toggle (default: true)
|
||
|
|
|
||
|
|
### MyBatis Plus ID Strategy
|
||
|
|
The project uses "NONE" mode which auto-detects:
|
||
|
|
- AUTO for MySQL (auto-increment)
|
||
|
|
- INPUT for PostgreSQL/Oracle (requires @KeySequence on entities)
|
||
|
|
|
||
|
|
## Development Guidelines
|
||
|
|
|
||
|
|
### Adding New Features
|
||
|
|
|
||
|
|
1. **Choose the correct module**: System features go in `yolo-module-system`, infrastructure features in `yolo-module-infra`
|
||
|
|
2. **Follow the layer structure**: Controller → Service → DAL
|
||
|
|
3. **Use MapStruct for conversions**: Create converters in the `convert/` package
|
||
|
|
4. **API versioning**: Use `/admin-api/` prefix for admin APIs, `/app-api/` for user APIs
|
||
|
|
|
||
|
|
### Code Generation
|
||
|
|
|
||
|
|
The project includes a code generator in `yolo-module-infra`:
|
||
|
|
- Configured via `yolo.codegen.*` properties
|
||
|
|
- Generates Controller, Service, Mapper, DO, VO classes
|
||
|
|
- Uses Velocity templates
|
||
|
|
|
||
|
|
### Annotation Processors
|
||
|
|
|
||
|
|
The Maven compiler is configured with multiple annotation processors (order matters):
|
||
|
|
1. `spring-boot-configuration-processor`
|
||
|
|
2. `lombok`
|
||
|
|
3. `lombok-mapstruct-binding` (ensures Lombok works with MapStruct)
|
||
|
|
4. `mapstruct-processor`
|
||
|
|
|
||
|
|
### Multi-datasource Usage
|
||
|
|
|
||
|
|
Configured via `spring.datasource.dynamic.datasource`:
|
||
|
|
- `master`: Primary datasource (PostgreSQL)
|
||
|
|
- `slave`: Read replica (optional)
|
||
|
|
- Use `@DS("slave")` annotation to switch datasource
|
||
|
|
|
||
|
|
## API Documentation
|
||
|
|
|
||
|
|
- **Swagger UI**: http://localhost:48080/swagger-ui
|
||
|
|
- **Knife4j UI**: http://localhost:48080/doc.html (enhanced Swagger UI)
|
||
|
|
- **OpenAPI JSON**: http://localhost:48080/v3/api-docs
|
||
|
|
|
||
|
|
## Monitoring & Admin
|
||
|
|
|
||
|
|
- **Spring Boot Admin**: http://localhost:48080/admin
|
||
|
|
- **Actuator**: http://localhost:48080/actuator
|
||
|
|
- **Druid Monitor**: http://localhost:48080/druid (database connection pool)
|
||
|
|
|
||
|
|
## Common Issues
|
||
|
|
|
||
|
|
### Startup Problems
|
||
|
|
If you encounter startup issues, refer to: https://doc.iocoder.cn/quick-start/
|
||
|
|
|
||
|
|
### Database Connection
|
||
|
|
Ensure PostgreSQL is running and credentials in `application-local.yaml` are correct.
|
||
|
|
|
||
|
|
### Port Conflicts
|
||
|
|
Default port is 48080. Change via `server.port` in configuration files.
|
||
|
|
|
||
|
|
## Dependencies & Versions
|
||
|
|
|
||
|
|
- Java: 17+
|
||
|
|
- Spring Boot: 3.5.5
|
||
|
|
- MyBatis Plus: Latest (managed by yolo-dependencies)
|
||
|
|
- Lombok: 1.18.42
|
||
|
|
- MapStruct: 1.6.3
|
||
|
|
- Maven: 3.9+
|