# AGENTS.md

> 本文件用于帮助后续 OpenCode 会话快速了解本仓库，避免常见错误。

## 项目概况

- **技术栈**：Java 17 + Spring Boot 3.3.2 + Spring Security 6 + MyBatis-Plus 3.5.7
- **构建工具**：Maven（单模块 POM）
- **应用入口**：`com.ichangzuo.iczApplication`
- **默认端口**：8989（dev/test）/ 9999（prod）
- **接口文档**：启动后访问 `http://localhost:8989/doc.html`（Knife4j）

## 运行环境依赖

- **MySQL**：数据库名 `music`，开发配置在 `application-dev.yml`
- **Redis**：端口 16378，开发环境密码 `CZwy168`
- **运行时 Profile**：
  - `dev`（默认）：本地开发
  - `test`：测试环境（数据库 `192.168.5.2`）
  - `prod`：生产环境

> 注意：`application.yml` 中默认激活的是 `prod`，但 Maven 的 `dev` profile 是默认激活的。

## 常用命令

```bash
# 开发模式启动（使用 dev profile）
mvn spring-boot:run -P dev

# 打包（默认 dev）
mvn clean package

# 测试环境打包
mvn clean package -P test

# 生产环境打包
mvn clean package -P prod

# 运行测试
mvn test

# 跳过测试打包
mvn clean package -DskipTests
```

## 项目结构

```
src/main/java/com/ichangzuo/
  iczApplication.java          # 启动类（注意不是 YouLaiApplication）
  common/                     # 公共模块：注解、常量、枚举、异常、工具类
  config/                     # 自动装配配置（CORS、Redis、Security、Swagger 等）
  core/                       # 核心功能：切面（日志、防重提交）、过滤器、Security
  module/                     # 业务模块
    auth/                     # 认证模块
    codegen/                  # 代码生成器
    file/                     # 文件模块
    mail/                     # 邮件模块
    sms/                      # 短信模块
    websocket/                # WebSocket 模块
  system/                     # 系统管理模块：用户、角色、菜单、部门、字典等
    controller/
    converter/                # MapStruct 转换器
    event/                    # 事件处理
    handler/
    listener/
    model/                    # bo, dto, entity, form, query, vo
    mapper/
    service/
```

## 关键配置与约定

### 数据库与 ORM

- **MyBatis-Plus**：
  - 逻辑删除字段：`is_deleted`（删除=1，未删除=0）
  - 主键 ID 类型：`none`
  - 驼峰下划线自动转换已开启
- **数据源**：Druid 连接池

### 安全与认证

- 基于 Spring Security + JWT 的无状态认证
- JWT 密钥配置在 `application.yml` 的 `security.jwt.key`
- 部分接口在白名单中（如 `/api/v1/auth/**`、`/client/**` 等），无需认证

### 文件存储

- 支持 `minio` 和 `aliyun` 两种类型，通过 `oss.type` 切换
- 当前测试/生产环境使用 `minio`

### 缓存

- Spring Cache + Redis，但当前 `spring.cache.enabled=false`

### 定时任务

- 集成 XXL-JOB，但默认 `enabled: false`

### 支付

- 集成支付宝和微信支付，配置在 `pay.ali` 和 `pay.wx` 下

## 开发注意事项

1. **启动类名称**：实际启动类是 `iczApplication`，不是 README 中提到的 `YouLaiApplication.java`
2. **MapStruct**：项目使用 MapStruct 进行实体转换，配合 Lombok 使用，需确保 `lombok-mapstruct-binding` 依赖存在
3. **Undertow 替代 Tomcat**：`spring-boot-starter-tomcat` 被排除，使用 `spring-boot-starter-undertow`
4. **打包配置**：`spring-boot-maven-plugin` 配置了 `ZIP` layout，并排除了 Lombok
5. **Maven Profile 优先级**：`dev` profile 默认激活，但 Spring 的 `application.yml` 默认激活 `prod`。实际运行时以 Spring 的 `spring.profiles.active` 为准
