  ---
  今天完成（M0）
  - 16模块 Maven 多模块项目从零搭建完毕
  - 核心模块：common / api / bootstrap，含统一响应体、全局异常、Swagger、请求ID过滤器
  - Flyway 数据库迁移（tenants / users / tenant_members）
  - docker-compose：MySQL / Redis / RabbitMQ
  - Dockerfile 多阶段构建
  - Git 初始化 + 2 个 commit
  - 前端：TanStack Query + Zustand + Axios 骨架接入
  - Swagger UI 验证通过，/ping 正常响应

  ---
  ---
  M1 完成情况总结：

  后端：
  - yaoai-domain：Tenant / User / TenantMember 实体 + MyBatis-Plus Mapper
  - yaoai-security：TenantContext（ThreadLocal）、Sa-Token 拦截器（保护除 /auth/**
  以外的所有路由）、AuthService（注册/登录/登出/me）
  - yaoai-api：AuthController（4 个端点）、更新 GlobalExceptionHandler（处理 401/403）
  - yaoai-bootstrap：Redis + MyBatis-Plus + Sa-Token 配置写入 application.yml、DevDataInitializer（local profile
  首次启动创建 admin@yaoai.com / Admin@123）

  前端：
  - src/lib/api/auth.ts：API 调用层
  - src/hooks/useAuth.ts：TanStack Query mutations + Zustand store 联动
  - src/app/pages/LoginPage.tsx / RegisterPage.tsx：登录/注册表单
  - src/app/components/PrivateRoute.tsx：路由保护
  - routes.tsx：添加 /login、/register，所有已有路由被 PrivateRoute 包裹

  验证方式：
  1. 启动 Docker：docker compose up -d
  2. 运行（须用 Java 17）：JAVA_HOME="D:/Program Files/Java/jdk-17" mvn package -pl yaoai-bootstrap -am -DskipTests &&
  java -jar yaoai-bootstrap/target/yaoai-bootstrap-0.1.0-SNAPSHOT.jar
  3. 测试：POST /auth/login {"email":"admin@yaoai.com","password":"Admin@123"} → 收到 token
  4. 用 token 访问 GET /auth/me → 返回用户信息
  5. 不带 token 访问 /ping → 200（开放）；不带 token 访问其他接口 → 401

