# AGENTS.md - rnb Backend ## Build & Run - **Maven profiles**: `dev` (default), `prod` - **Build**: `mvn clean package -DskipTests -Pdev` (or `-Pprod`) - **Run locally**: Execute `RnBApplication.main()` (port 10800) - **Docker**: `docker-compose -f docker/docker-compose.yml -p youlai-boot up -d` (MySQL 3306, Redis 6379, MinIO 9000/9001, XXL-Job 8080) ## Key Configuration - **Active profile**: Set via `spring.profiles.active` (default: `prod` in application.yml) - **Dev DB**: `localhost:3306/rnb` (user: root, pass: 168soft.xyz) - **Dev Redis**: `localhost:16378` (pass: CZwy16378, db: 2) - **Prod DB**: `localhost:3308/rnb` - **Prod Redis**: `localhost:6379` (no password) - **JWT secret**: Must be ≥32 chars (see `security.session.jwt.secret-key` in profile yml) ## Project Structure ``` src/main/java/com/rnb/ ├── common/ # Shared: annotation, base, constant, enums, exception, model, result, util ├── config/ # Auto-configuration, property binding ├── core/ # Core: aspect (log, repeat-submit), filter (request-log, rate-limit), handler (data-permission, data-fill), security ├── modules/ # Business modules: member, order, product ├── shared/ # Shared modules: auth, file, codegen, mail, sms, websocket └── system/ # System module: controller, converter, model (bo/dto/entity/form/query/vo), mapper, service ``` ## Code Generation - **MyBatis-Plus Generator**: Run `SystemCodeGenerator.main()` (prompts for table names, uses `sys_` prefix) - **Templates**: `src/test/resources/templates/*.vm` (backend), `codegen.yml` (frontend) - **Output**: `src/main/java/com/rnb/system/...`, `src/main/resources/mapper/...` ## Testing - **Tests skipped by default**: `maven-surefire-plugin` has `true` - **Run single test**: `mvn test -Dtest=ClassName -DfailIfNoTests=false` ## Common Commands ```bash # Build dev mvn clean package -DskipTests -Pdev # Build prod mvn clean package -DskipTests -Pprod # Run with dev profile (from IDE or) mvn spring-boot:run -Pdev # Start infra only cd docker && docker-compose -f docker-compose.yml -p youlai-boot up -d # Stop infra cd docker && docker-compose -f docker-compose.yml -p youlai-boot down ``` ## Notable Conventions - **Table prefix**: `rb_` (MyBatis-Plus config) - **Logic delete**: field `isDeleted` (1=deleted, 0=active) - **Security modes**: JWT (stateless) or Redis-token (stateful, multi-login control) - **API docs**: Knife4j at `/doc.html` (dev), `/swagger-ui.html` (prod) - **Port**: 10800 (both dev/prod) - **Lombok + MapStruct**: Use `lombok-mapstruct-binding` for compatibility ## Gotchas - Dockerfile expects `target/youlai-boot.jar` but Maven builds `target/rnb--dev.jar` → rename or adjust Dockerfile - DB connection validated on startup (app exits if fails) - `application.yml` imports `codegen.yml` for code generator config - Tests require DB/Redis running (use docker-compose)