#!/usr/bin/env bash # PreToolUse hook: 写操作前根据文件路径输出集成提醒 # 不阻止操作,仅输出提示信息 set -euo pipefail f="${AGENT_EDITED_FILE:-$AGENT_FILE}" [ -z "$f" ] && exit 0 [ ! -e "$f" ] && exit 0 basename=$(basename "$f") # 检查 1: 新建/修改 Java Controller → 提醒全链路(API → Service → Web/UniApp) if [[ "$f" == *"gym-manage-api/"*.java ]]; then if grep -q '@RestController\|@Controller' "$f" 2>/dev/null; then echo "" echo "[PRE-CHECK] 修改 Java Controller: $basename" echo " → 全链路要求(AGENTS.md §13/§14):" echo " 1) Service 层实现业务逻辑(Controller 不直连 Repository)" echo " 2) 同步 gym-manage-web/src/api/*.api.ts(请求路径/参数/类型)" echo " 3) 同步 gym-manage-uniapp/api/*.js 与 coach-uniapp/api/*.js" echo " 4) Swagger 注解齐全(@ApiOperation/@ApiModelProperty)" echo "" exit 0 fi # 仅 Service/其它 Java 文件:提醒写单测 echo "" echo "[PRE-CHECK] 修改后端 Java: $basename" echo " → 业务逻辑改动需配套 JUnit 测试(cd gym-manage-api && mvn test -pl <模块> -am)" echo "" exit 0 fi # 检查 2: 修改 Web 请求层 → 提醒同步类型与页面 if [[ "$f" == *"gym-manage-web/src/api/"*".api.ts" ]]; then echo "" echo "[PRE-CHECK] Web API 接口变更: $basename" echo " → 同步更新:" echo " 1) 接口路径/参数与后端 Controller 注解一致" echo " 2) 类型定义与后端 DTO/VO 字段对齐(camelCase)" echo " 3) 页面调用方(src/views、src/stores)使用新签名" echo "" exit 0 fi # 检查 3: 修改 UniApp 请求层 → 提醒同步 if [[ "$f" == *"gym-manage-uniapp/api/"*.js ]] || [[ "$f" == *"gym-manage-coach-uniapp/api/"*.js ]]; then echo "" echo "[PRE-CHECK] UniApp API 变更: $basename" echo " → 同步更新: 页面调用方(pages/*)+ 后端接口契约 + Web 端同名接口" echo "" exit 0 fi # 检查 4: 新建/修改测试文件 → 提醒 flaky 门禁 if [[ "$f" == *".test."* ]] || [[ "$f" == *".spec."* ]] || [[ "$f" == *"Test.java" ]]; then echo "" echo "[PRE-CHECK] 测试文件: $basename" echo " → Web 测试(vitest)需通过 bash scripts/flaky-scan.sh --spec <文件> --runs 3(AGENTS.md §22)" echo "" exit 0 fi