137 lines
6.7 KiB
Plaintext
137 lines
6.7 KiB
Plaintext
# Cline Rules — yoyuzh/my_site
|
||
|
||
本项目包含 Java 后端、Vite/React 前端、`docs/` 文档区和工具脚本。以下规则适用于所有在此仓库中的操作。
|
||
|
||
---
|
||
|
||
## 项目结构
|
||
|
||
- `backend/`:Spring Boot 3.3.8,Java 17,Maven,领域包位于 `com.yoyuzh.{auth,cqu,files,config,common,admin,transfer}`。
|
||
- `front/`:Vite 6,React 19,TypeScript,Tailwind CSS v4,路由/页面代码在 `src/pages`,可复用 UI 在 `src/components`,共享逻辑在 `src/lib`。
|
||
- `docs/`:实现计划存放于 `docs/superpowers/plans/`。
|
||
- `scripts/`:部署、迁移、冒烟测试和本地启动辅助脚本。
|
||
|
||
---
|
||
|
||
## 命令来源(只使用已存在的命令)
|
||
|
||
不得发明未在 `front/package.json`、`backend/pom.xml`、`backend/README.md`、`front/README.md` 或已签入脚本文件中存在的命令。
|
||
|
||
### 前端命令(在 `front/` 目录下执行)
|
||
|
||
```
|
||
npm run dev
|
||
npm run build
|
||
npm run preview
|
||
npm run clean
|
||
npm run lint
|
||
npm run test
|
||
```
|
||
|
||
**重要:**
|
||
- `npm run lint` 运行 `tsc --noEmit`,这是当前的 TypeScript 类型检查方式。
|
||
- 不存在独立的 ESLint 命令,也不存在独立的 `typecheck` 脚本。
|
||
- **禁止在仓库根目录运行 `npm` 命令**,根目录有 `package-lock.json` 但没有 `package.json`。
|
||
|
||
### 后端命令(在 `backend/` 目录下执行)
|
||
|
||
```
|
||
mvn spring-boot:run
|
||
mvn spring-boot:run -Dspring-boot.run.profiles=dev
|
||
mvn test
|
||
mvn package
|
||
```
|
||
|
||
**重要:** 后端没有定义专用的 lint 或 typecheck 命令。如果任务要求 lint/typecheck,请明确说明后端当前未定义这些命令。
|
||
|
||
### 脚本文件(使用已存在的脚本,不创建新的包装命令)
|
||
|
||
- `scripts/deploy-front-oss.mjs`
|
||
- `scripts/migrate-file-storage-to-oss.mjs`
|
||
- `scripts/oss-deploy-lib.mjs`
|
||
- `scripts/oss-deploy-lib.test.mjs`
|
||
- `scripts/local-smoke.ps1`
|
||
- `scripts/start-backend-dev.ps1`
|
||
- `scripts/start-frontend-dev.ps1`
|
||
|
||
### 发布和部署命令
|
||
|
||
- 前端 OSS 发布(从仓库根目录):`node scripts/deploy-front-oss.mjs`
|
||
- 前端 OSS 试运行:`node scripts/deploy-front-oss.mjs --dry-run`
|
||
- 前端 OSS 发布(跳过构建):`node scripts/deploy-front-oss.mjs --skip-build`
|
||
- 后端打包(从 `backend/`):`mvn package`
|
||
|
||
**重要:**
|
||
- `scripts/deploy-front-oss.mjs` 从环境变量或 `.env.oss.local` 读取 OSS 凭证。
|
||
- 仓库中不存在后端部署脚本。后端交付是两步流程:在 `backend/` 打包生成 `backend/target/yoyuzh-portal-backend-0.0.1-SNAPSHOT.jar`,然后通过 `ssh`/`scp` 上传并重启。
|
||
- **禁止发明**远程目录、服务名、进程管理器或重启命令。从服务器发现,或在无法安全发现时询问用户。
|
||
|
||
---
|
||
|
||
## 工作流程
|
||
|
||
1. **分析阶段**:如果任务涉及多个文件、多个层次或同时跨越前后端,先制定计划再动手。
|
||
2. **探索阶段**:如果现有行为或所属模块不明显,先调查代码路径、现有行为和相关配置/测试,再实现。
|
||
3. **实现阶段**:进行实际代码修改。拥有 `backend/`、`front/`、`scripts/` 或 docs 中的编辑权,实现时可同步更新附近的测试。
|
||
4. **验证阶段**:运行已有的仓库支持命令,报告确切的失败或缺失命令。不要重写源文件来"修复"测试失败。
|
||
5. **部署阶段**:代码提交或准备好发布后,使用现有命令构建前后端,通过已签入的 OSS 部署脚本发布前端,通过 SSH 处理后端 jar 上传/重启。
|
||
|
||
---
|
||
|
||
## 核心规则
|
||
|
||
### 第一性原理思考
|
||
|
||
- 从原始需求和问题出发,不要从用户偏好的实现路径假设出发。
|
||
- 不要假设用户已经确切知道他们想要什么或如何实现。
|
||
- 对动机、目标和范围保持谨慎。如果底层目标或业务目标不清晰,先与用户讨论再实现。
|
||
|
||
### 解决方案和重构规则
|
||
|
||
- **不要**提出兼容性补丁式或临时修复式方案。
|
||
- **不要**过度设计。使用最短的正确实现路径。
|
||
- **不要**添加用户未要求的回退、降级或额外解决方案分支。
|
||
- **不要**提出超出用户明确需求且可能改变业务逻辑的任何方案。
|
||
- 每个修改或重构方案在呈现前,必须在完整请求路径中进行逻辑验证。
|
||
|
||
---
|
||
|
||
## 仓库专项规范
|
||
|
||
### 前端专项规范(适用于 `front/` 目录操作)
|
||
|
||
- 路由行为保留在 `src/pages`,共享非 UI 逻辑保留在 `src/lib`。
|
||
- 测试文件紧邻其验证的状态/辅助模块,遵循已有的 `*.test.ts` 模式。
|
||
- 保留当前的 Vite 别名用法:`@/*` 从 `front/` 目录根解析。
|
||
- 如果修改依赖后端 API 行为,修改前先验证 `vite.config.ts` 中的代理配置,不要硬编码 URL。
|
||
- 前端 API 代理定义在 `front/vite.config.ts`,`VITE_BACKEND_URL` 默认值为 `http://localhost:8080`。
|
||
- 前端发布使用 `node scripts/deploy-front-oss.mjs`,不要手动上传对象。
|
||
- 前端测试已存在于 `front/src/**/*.test.ts`,新测试紧邻其验证的状态或库模块。
|
||
|
||
### 后端专项规范(适用于 `backend/` 目录操作)
|
||
|
||
- 包布局:
|
||
- `auth`:认证、JWT、登录/注册/个人资料 DTO 和服务
|
||
- `files`:文件 API 和存储流,包括 `files/storage`
|
||
- `cqu`:CQU 课程表/成绩聚合
|
||
- `config`:Spring 和安全配置
|
||
- `common`:共享异常和通用工具
|
||
- `admin`:管理员功能
|
||
- `transfer`:文件传输功能
|
||
- 保持 controller、service、DTO、config 和 storage 职责按当前包边界分离。
|
||
- 修改 `auth`、`files` 或 `cqu` 时,先检查现有测试包是否已覆盖该区域,再在其他地方添加新文件。
|
||
- 遵守 `application-dev.yml` 中的 `dev` profile;不要硬编码绕过 H2 或模拟 CQU 行为的假设。
|
||
- 后端本地开发行为分布在 `backend/src/main/resources/application.yml` 和 `application-dev.yml` 中;`dev` profile 使用 H2 和模拟 CQU 数据。
|
||
- 如果修改影响文件存储行为,注意仓库当前支持本地存储和 OSS 相关迁移/部署脚本。
|
||
- 优先使用 Maven 命令进行验证,而不是临时 shell 管道。
|
||
- 后端测试已存在于 `backend/src/test/java/com/yoyuzh/...`;优先在匹配的包中添加或更新测试。
|
||
- 不要将 `backend/target/` 产物提交到 git,除非用户明确要求。
|
||
|
||
### 文档专项规范(适用于 `docs/` 目录操作)
|
||
|
||
- 文档应是具体的、与仓库相关的。
|
||
- 优先记录 `front/package.json`、`backend/pom.xml`、`backend/README.md`、`front/README.md` 或已签入脚本文件中已存在的命令。
|
||
- 不要引入占位符命令,如虚构的根目录 `npm test`、后端 lint 脚本或独立的前端 typecheck 脚本。
|
||
- 文档验证时,明确说明差距:后端 lint/typecheck 命令未定义,前端类型检查通过 `npm run lint` 进行。
|
||
- 计划或交接文档应绑定到实际仓库路径,如 `backend/...`、`front/...`、`scripts/...` 和 `docs/...`。
|