301 lines
10 KiB
Markdown
301 lines
10 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 **AgileBoot** - a Spring Boot 2.7.10 + Vue3 full-stack development framework with **DDD/CQRS architecture**. The project specializes in e-commerce business scenarios and integrates Enterprise WeChat, WeChat Pay, and Smart Cabinet systems.
|
|
|
|
**Key Features:**
|
|
- DDD (Domain-Driven Design) with CQRS pattern
|
|
- Multi-level caching (Caffeine + Guava + Redis)
|
|
- Enterprise WeChat integration (supports corpid)
|
|
- Smart cabinet device management
|
|
- WeChat Pay integration (JSAPI)
|
|
- JWT-based authentication with Spring Security
|
|
|
|
## Technology Stack
|
|
|
|
- **Backend**: Spring Boot 2.7.10, Java 8
|
|
- **Database**: MySQL 8.0, MyBatis Plus 3.5.2
|
|
- **Cache**: Caffeine (local), Redis (distributed), Guava (config)
|
|
- **Security**: Spring Security + JWT
|
|
- **Documentation**: SpringDoc OpenAPI 3.0
|
|
- **Build Tool**: Maven 3.9+ (use `./mvnw` wrapper)
|
|
- **Testing**: JUnit, Mockito
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
agileboot (multi-module Maven project)
|
|
├── agileboot-admin # Management backend interface module
|
|
├── agileboot-api # Open API module (for clients)
|
|
├── agileboot-common # Common utilities module
|
|
├── agileboot-domain # Business domain module (DDD)
|
|
├── agileboot-infrastructure # Infrastructure module (config, integration)
|
|
└── agileboot-orm # ORM configuration (legacy)
|
|
|
|
agileboot-domain (DDD structure - CQRS pattern)
|
|
├── {business-module}/
|
|
│ ├── command/ # Command objects (data update)
|
|
│ ├── dto/ # Data Transfer Objects
|
|
│ ├── query/ # Query objects (data retrieval)
|
|
│ ├── model/ # Domain models
|
|
│ ├── db/ # Database layer
|
|
│ │ ├── entity/ # Entity classes
|
|
│ │ ├── service/ # Database service
|
|
│ │ └── mapper/ # MyBatis mapper
|
|
│ └── {Module}ApplicationService.java # Application service layer
|
|
```
|
|
|
|
## Common Commands
|
|
|
|
### Build and Run
|
|
|
|
```bash
|
|
# Build entire project
|
|
./mvnw clean install
|
|
|
|
# Build specific module
|
|
./mvnw clean package -pl agileboot-admin -am
|
|
|
|
# Build with tests (tests are skipped by default)
|
|
./mvnw clean package -pl agileboot-admin -am -DskipTests=false
|
|
|
|
# Run tests
|
|
./mvnw test
|
|
./mvnw test -pl agileboot-domain # Test specific module
|
|
./mvnw test -Dtest=UserModelTest # Run single test class
|
|
|
|
# Use build script
|
|
build.bat
|
|
|
|
# Run admin module
|
|
cd agileboot-admin
|
|
./mvnw spring-boot:run
|
|
|
|
# Or run with embedded database/Redis
|
|
java -jar agileboot-admin/target/agileboot-admin.jar
|
|
```
|
|
|
|
### Application Profiles
|
|
|
|
**Configuration file**: `agileboot-admin/src/main/resources/application.yml`
|
|
|
|
- **dev**: Development profile (MySQL + Redis required)
|
|
- **test**: Test profile (embedded H2 + embedded Redis)
|
|
- **prod**: Production profile
|
|
|
|
```yaml
|
|
spring:
|
|
profiles:
|
|
active: basic,dev # Change to basic,test for embedded services
|
|
|
|
agileboot:
|
|
embedded:
|
|
mysql: true # Set to true to use H2 (no external DB needed)
|
|
redis: true # Set to true to use embedded Redis
|
|
```
|
|
|
|
**Startup classes:**
|
|
- Admin module: `com.agileboot.admin.AgileBootAdminApplication`
|
|
- API module: `com.agileboot.api.AgileBooApiApplication`
|
|
- Integration tests: `com.agileboot.integrationTest.IntegrationTestApplication`
|
|
|
|
### Running the Application
|
|
|
|
```bash
|
|
# With external MySQL and Redis (default dev profile)
|
|
1. Import database: sql/agileboot_*.sql (latest version)
|
|
2. Configure: agileboot-admin/src/main/resources/application-dev.yml
|
|
3. Run: ./mvnw spring-boot:run -pl agileboot-admin
|
|
|
|
# Without external dependencies (test profile)
|
|
1. Change spring.profiles.active to: basic,test
|
|
2. Set agileboot.embedded.mysql: true
|
|
3. Set agileboot.embedded.redis: true
|
|
4. Run: ./mvnw spring-boot:run -pl agileboot-admin
|
|
```
|
|
|
|
**Access points:**
|
|
- API Documentation: http://localhost:8080/v3/api-docs
|
|
- Druid Monitor: http://localhost:8080/druid/ (admin/123456)
|
|
- Login credentials: admin/admin123
|
|
|
|
## Architecture Patterns
|
|
|
|
### Request Flow (CQRS)
|
|
|
|
**Queries**: Controller → `{Module}Query` → `{Module}ApplicationService` → `{Module}Service` (Db) → `{Module}Mapper`
|
|
|
|
**Commands**: Controller → `{Module}Command` → `{Module}ApplicationService` → `{Module}Model` → save/update
|
|
|
|
### Module Organization
|
|
|
|
Each business domain follows DDD structure. Example: `agileboot-domain/src/main/java/com/agileboot/domain/{module}/`
|
|
|
|
- **command/**: Command objects for data updates (Create/Update/Delete)
|
|
- **query/**: Query objects for data retrieval
|
|
- **dto/**: Data transfer objects for API responses
|
|
- **model/**: Domain models with business logic
|
|
- **db/**: Data access layer (entity, service, mapper)
|
|
- **ApplicationService**: Transaction script layer, orchestrates domain models
|
|
|
|
## Business Modules
|
|
|
|
Core modules in `agileboot-domain`:
|
|
- **system**: User, role, menu, dept, config, log, notice, post
|
|
- **cabinet**: Smart cabinet device management
|
|
- **shop**: E-commerce (products, orders)
|
|
- **wx**: WeChat user integration
|
|
- **qywx**: Enterprise WeChat integration (supports corpid)
|
|
- **ab98**: User management with tags and balance
|
|
- **mqtt**: MQTT server integration
|
|
- **asset**: Asset management
|
|
|
|
## Caching System
|
|
|
|
**Multi-level cache architecture:**
|
|
1. **Caffeine** (local): User, role, post, login user cache
|
|
2. **Guava** (config): System config, dict data, dept data
|
|
3. **Redis** (distributed, optional): Session, captcha, distributed locks
|
|
|
|
**Key classes:**
|
|
- `agileboot-infrastructure/src/main/java/.../cache/`
|
|
- `CacheCenter`: Cache management
|
|
- `AbstractCaffeineCacheTemplate`: Caffeine cache template
|
|
|
|
## Key Configuration Files
|
|
|
|
- `pom.xml`: Maven parent POM with all dependencies
|
|
- `GoogleStyle.xml`: Code formatting template (required for IntelliJ)
|
|
- `application.yml`: Main config (profiles, embedded services)
|
|
- `application-dev.yml`: Dev database/Redis config
|
|
- `application-test.yml`: Test with H2/embedded Redis
|
|
- `sql/`: Database migration scripts (latest first)
|
|
|
|
## Testing
|
|
|
|
**Test structure**: Each module has `src/test/java/`
|
|
- Unit tests in `*Test.java`
|
|
- Integration tests in `*IntegrationTest.java`
|
|
|
|
**Running tests:**
|
|
```bash
|
|
# All tests
|
|
./mvnw test
|
|
|
|
# Specific module
|
|
./mvnw test -pl agileboot-domain
|
|
|
|
# Single test class
|
|
./mvnw test -Dtest=UserModelTest
|
|
|
|
# With coverage
|
|
./mvnw jacoco:report # If JaCoCo configured
|
|
```
|
|
|
|
**Note**: Tests are skipped by default in build (`<skipTests>true</skipTests>` in parent POM). Set `-DskipTests=false` to run them.
|
|
|
|
## Code Standards
|
|
|
|
**Required:**
|
|
- Import `GoogleStyle.xml` into IntelliJ: Settings → Editor → Code Style → Java → Import Schema
|
|
- Properties files encoding: Settings → Editor → File Encodings → Properties Files → Set to UTF-8
|
|
- Use enums instead of dictionary type data
|
|
- Centralized error handling with error codes
|
|
- Write unit tests for business logic
|
|
|
|
**IDE Setup:**
|
|
- **IntelliJ IDEA** (recommended)
|
|
- Lombok plugin installed
|
|
- Google code style applied
|
|
|
|
## Important Business Features
|
|
|
|
### Enterprise WeChat Integration
|
|
- Supports `corpid` field for multi-tenant enterprise WeChat
|
|
- Module: `agileboot-domain/qywx/`
|
|
- Documentation: `doc/智能柜系统指南.md`
|
|
|
|
### Smart Cabinet System
|
|
- Device management with cabinet/cell hierarchy
|
|
- Real-time cell status monitoring
|
|
- Operation logging (open/close/lock)
|
|
- Module: `agileboot-domain/cabinet/` and `agileboot-admin/controller/cabinet/`
|
|
|
|
### WeChat Pay Integration
|
|
- JSAPI payment support
|
|
- Refund functionality
|
|
- Module: `agileboot-domain/shop/`
|
|
- Documentation: `doc/微信支付集成指南.md`
|
|
|
|
## Database Schema
|
|
|
|
**Core tables** (~10 core tables in AgileBoot):
|
|
- `sys_user`, `sys_role`, `sys_menu`, `sys_dept`
|
|
- `sys_config`, `sys_dict_type`, `sys_notice`
|
|
- Plus business tables (cabinet, shop, ab98_user, etc.)
|
|
|
|
**Migration files** in `sql/` directory (latest first):
|
|
- `agileboot-*.sql`: Base schema
|
|
- `YYYYMMDD_*.sql`: Feature migrations (e.g., 20251029_wx_user.sql)
|
|
|
|
## Development Workflow
|
|
|
|
1. **New Feature**:
|
|
- Create domain module in `agileboot-domain/{feature}/`
|
|
- Implement DDD structure (command, query, model, db, service)
|
|
- Add controllers in `agileboot-admin/controller/{feature}/`
|
|
- Write unit tests
|
|
- Update database with migration script
|
|
|
|
2. **Database Changes**:
|
|
- Create new migration: `sql/YYYYMMDD_feature_name.sql`
|
|
- Update CodeGenerator if needed
|
|
- Test with test profile (H2 + embedded Redis)
|
|
|
|
3. **API Development**:
|
|
- Document with `@Operation` annotation
|
|
- Use proper DTOs
|
|
- Add to `application.yml` springdoc group-configs if needed
|
|
|
|
## Troubleshooting
|
|
|
|
**Port 8080 busy**: Change `server.port` in `application.yml`
|
|
|
|
**Redis port conflict**: Modify `spring.redis.port` in `application-dev.yml`
|
|
|
|
**MacOS embedded Redis**: High versions may not support embedded Redis - use external Redis
|
|
|
|
**Build fails**: Check Java version (requires Java 8+), Maven 3.9+, ensure `./mvnw clean install` succeeds
|
|
|
|
## Documentation
|
|
|
|
- **README.md**: Project overview and setup guide
|
|
- **doc/项目概述.md**: Detailed architecture overview
|
|
- **doc/智能柜系统指南.md**: Smart cabinet system guide
|
|
- **doc/缓存系统指南.md**: Caching system guide
|
|
- **doc/微信支付集成指南.md**: WeChat Pay integration guide
|
|
|
|
## Recent Commits (for context)
|
|
|
|
```
|
|
eb41f35 feat(wx): 添加微信小程序登录功能支持
|
|
9562d1c 登录接口更新用户登录信息修复
|
|
7cd08c1 refactor(docs): 重构文档结构并迁移docker安装指南
|
|
e53ff77 feat(智能柜): 添加corpid字段支持企业微信集成
|
|
ddc3c91 feat: 添加企业微信用户ID缓存功能
|
|
```
|
|
|
|
## Tips
|
|
|
|
- Use test profile for quick development without external dependencies
|
|
- Check `application-dev.yml` for database/Redis configuration
|
|
- Druid monitor at `/druid/` shows SQL performance
|
|
- API docs available at `/v3/api-docs` and `/swagger-ui.html`
|
|
- Code style: Strictly follow GoogleStyle.xml formatting
|
|
- All business logic should have unit tests
|
|
- Domain models contain business logic, ApplicationService is transaction script layer
|
|
- Use multi-level cache for performance-critical data
|