From 066b1f22576a6255edf20c1a8d0e2cb15ac40a3b Mon Sep 17 00:00:00 2001 From: "Claude Opus 4.6" Date: Fri, 13 Mar 2026 14:13:46 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BB=A3=E7=A0=81=E5=90=88?= =?UTF-8?q?=E8=A7=84=E6=80=A7=E5=AE=A1=E6=9F=A5=E4=BF=AE=E5=A4=8D=20-=20?= =?UTF-8?q?=E4=B8=89=E5=B1=82=E6=9E=B6=E6=9E=84=E3=80=81API=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E3=80=81=E6=96=87=E6=A1=A3=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## P0 三层架构违规修复 (4项) - 创建 SchoolStatsService/TeacherStatsService,移除Controller直接调用Mapper - 修复 AdminCourseController 使用 Service 层方法 - 修复 TeacherCourseController 使用 ClassService 获取班级 - 新增 ClassService.getActiveClassesByTenantId() - 新增 CourseService.createSystemCourse() ## P1 API 路径统一 (8项) 后端路径统一为 /api/v1/admin/*: - AdminCourseController: /api/admin/courses → /api/v1/admin/courses - AdminTenantController: /api/admin/tenants → /api/v1/admin/tenants 前端配置调整: - vite.config.ts: 移除代理重写规则 - src/api/index.ts: baseURL /api/v1 → /api - 更新 admin.ts, lesson.ts, package.ts, theme.ts 使用 /v1/admin/* 路径 ## P2 文档规范更新 (5项) - 更新 CLAUDE.md 前端 API 调用文档 - 新增三种调用方式说明(http/适配层/Orval客户端) - 新增 API 路径规范表格 - 更新前端目录结构说明 Co-Authored-By: Claude Opus 4.6 --- .claude/CLAUDE.md | 64 +++++- reading-platform-frontend/src/api/admin.ts | 28 +-- reading-platform-frontend/src/api/index.ts | 2 +- reading-platform-frontend/src/api/lesson.ts | 24 +- reading-platform-frontend/src/api/package.ts | 24 +- reading-platform-frontend/src/api/theme.ts | 12 +- reading-platform-frontend/vite.config.ts | 1 - .../admin/AdminCourseController.java | 9 +- .../admin/AdminTenantController.java | 2 +- .../school/SchoolStatsController.java | 68 ++---- .../teacher/TeacherCourseController.java | 11 +- .../teacher/TeacherStatsController.java | 192 +--------------- .../platform/service/ClassService.java | 2 + .../platform/service/CourseService.java | 2 + .../platform/service/SchoolStatsService.java | 40 ++++ .../platform/service/TeacherStatsService.java | 43 ++++ .../service/impl/ClassServiceImpl.java | 9 + .../service/impl/CourseServiceImpl.java | 58 +++++ .../service/impl/SchoolStatsServiceImpl.java | 91 ++++++++ .../service/impl/TeacherStatsServiceImpl.java | 215 ++++++++++++++++++ 20 files changed, 592 insertions(+), 305 deletions(-) create mode 100644 reading-platform-java/src/main/java/com/reading/platform/service/SchoolStatsService.java create mode 100644 reading-platform-java/src/main/java/com/reading/platform/service/TeacherStatsService.java create mode 100644 reading-platform-java/src/main/java/com/reading/platform/service/impl/SchoolStatsServiceImpl.java create mode 100644 reading-platform-java/src/main/java/com/reading/platform/service/impl/TeacherStatsServiceImpl.java diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index 88fb8ae..a199693 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -135,8 +135,8 @@ reading-platform-frontend/ │ ├── App.vue # 根组件 │ ├── api/ # API 接口 │ │ ├── generated/ # Orval 自动生成(禁止手改) -│ │ ├── client.ts # 统一入口 -│ │ └── *.ts # 业务适配层 +│ │ ├── index.ts # 统一入口,导出 http 方法 +│ │ └── *.ts # 业务适配层(admin.ts, school.ts, teacher.ts 等) │ ├── assets/ # 静态资源 │ ├── components/ # 公共组件 │ ├── composables/ # 组合式函数 @@ -174,9 +174,16 @@ reading-platform-frontend/ ### Controller 层规范 +**API 路径约定**: +- 超管端:`/api/v1/admin/*` +- 学校端:`/api/school/*` +- 教师端:`/api/teacher/*` +- 家长端:`/api/parent/*` +- 认证:`/api/auth/*` + ```java @RestController -@RequestMapping("/api/v1/xxx") +@RequestMapping("/api/v1/admin/xxx") // 超管端使用 /api/v1/admin/ @Tag(name = "XXX管理", description = "XXX相关接口") @RequiredArgsConstructor public class XxxController { @@ -228,23 +235,64 @@ public interface XxxMapper extends BaseMapper { ## 前端开发规范 -### API 开发规范(Orval) +### API 开发规范 1. **生成代码只读** - 不得在 `src/api/generated/` 内做任何手工修改 2. **以生成类型为准** - 参数/返回类型优先使用生成的类型 -3. **统一调用入口** - 通过 `src/api/client.ts` 访问 +3. **统一调用入口** - 通过 `src/api/index.ts` 导出的 `http` 方法 ### 推荐调用方式 +**方式一:使用 http 方法(推荐)** + ```typescript -import { readingApi } from '@/api/client'; +import { http } from '@/api'; async function loadTenant(id: number) { - const res = await readingApi.getTenant({ id }); - return res.data; + return http.get(`/v1/admin/tenants/${id}`); +} + +async function createTenant(data: CreateTenantDto) { + return http.post('/v1/admin/tenants', data); } ``` +**方式二:使用业务适配层(推荐)** + +```typescript +import { getTenant, createTenant } from '@/api/admin'; + +async function loadTenant(id: number) { + return getTenant(id); +} + +async function createNewTenant(data: CreateTenantDto) { + return createTenant(data); +} +``` + +**方式三:使用 Orval 生成的客户端(可选)** + +```typescript +import { getReadingPlatformAPI } from '@/api/generated'; + +const api = getReadingPlatformAPI(); + +async function loadTenant(id: number) { + return api.getTenant({ id }); +} +``` + +### API 路径规范 + +| 端 | 后端路径 | 前端路径 | +|----|----------|----------| +| 超管 | `/api/v1/admin/*` | `/v1/admin/*` | +| 学校 | `/api/school/*` | `/school/*` | +| 教师 | `/api/teacher/*` | `/teacher/*` | +| 家长 | `/api/parent/*` | `/parent/*` | +| 认证 | `/api/auth/*` | `/auth/*` | + ### Vue SFC 约定 - 优先使用 `