主要变更: 1. 新增学校报告服务 (SchoolReportService) - 学校概览统计 (getOverviewStats) - 教师统计报表 (getTeacherStats) - 课程统计报表 (getCourseStats) - 学生统计报表 (getStudentStats) - 课时趋势分析 (getLessonTrend) 2. 新增学校端 Controller - SchoolReportController: 学校统计报告接口 - SchoolResourceController: 学校资源管理接口 - SchoolFeedbackController: 学校反馈管理接口 3. 完善实体类字段 - CourseLesson: 添加 lessonOrder 字段 - ResourceItem: 添加 tenantId、type 字段 - Task: 添加 name 字段 - LessonFeedback: 添加 courseId、tenantId、overallRating 字段 4. 完善服务层实现 - ResourceServiceImpl: 实现资源库和资源项管理方法 - SchoolReportServiceImpl: 实现学校统计报表逻辑 - TeacherDashboardServiceImpl: 修复时间类型转换 - AdminStatsServiceImpl: 完善统计逻辑 5. 新增 Flyway 迁移脚本 (V2) - 添加 ORM 实体类缺失字段的数据库迁移 6. 修复路由冲突 - 移除 AdminCourseController 中重复的 getCourseLessons 方法 7. 添加测试工具类 - CheckDatabase, CheckClazzTable: 数据库检查工具 - InitDatabase, InitClasses: 数据初始化工具 - GeneratePasswordHash: 密码哈希生成工具 8. 配置 Maven Wrapper - 添加 maven-wrapper.properties 和 mvnw.cmd - 确保使用 Java 17 编译
21 KiB
21 KiB
前后端接口对齐分析报告
分析日期: 2026-03-11 分析范围: 旧后端 (NestJS) vs 新后端 (Spring Boot)
执行摘要
接口总体状态
| 角色 | 旧后端接口数 | 新后端接口数 | 已实现 | 缺失 | 完成率 |
|---|---|---|---|---|---|
| 教师端 | ~35 | ~32 | 30 | 5 | 86% |
| 学校端 | ~60 | ~55 | 50 | 10 | 83% |
| 家长端 | 6 | 6 | 6 | 0 | 100% |
| 管理员端 | ~20 | ~18 | 16 | 4 | 80% |
| 总计 | ~121 | ~111 | 102 | 19 | 84% |
更新说明 (2026-03-11)
经过全面检查,发现新后端已经实现了绝大部分接口,原分析报告中的"缺失"接口实际上大多已经实现。
已实现但原报告标记为缺失的接口:
教师端:
- ✅ 成长档案 (TeacherGrowthController) - 已实现
- ✅ 通知管理 (TeacherNotificationController) - 已实现
- ✅ 课表管理 (TeacherScheduleController) - 已实现
- ✅ 任务统计 - 已实现
- ✅ 任务模板 - 已实现
学校端:
- ✅ 成长档案 (SchoolGrowthController) - 已实现
- ✅ 通知管理 (SchoolNotificationController) - 已实现
- ✅ 操作日志 (SchoolOperationLogController) - 已实现
- ✅ 统计接口 (SchoolStatsController) - 已实现
- ✅ 导出功能 (SchoolExportController) - 已实现
- ✅ 课表模板 - 已实现
家长端:
- ✅ 成长档案 (ParentGrowthController) - 已实现
- ✅ 通知管理 (ParentNotificationController) - 已实现
管理员端:
- ✅ 租户管理 (AdminTenantController) - 已实现
- ✅ 课程管理 (AdminCourseController) - 已实现
- ✅ 课程包管理 (AdminCoursePackageController) - 已实现
- ✅ 资源管理 (AdminResourceController) - 已实现
- ✅ 主题管理 (AdminThemeController) - 已实现
- ✅ 统计接口 (AdminStatsController) - 已实现
详细接口对比
一、教师端接口对比
✅ 已实现接口 (20 个)
| 接口路径 | 方法 | 功能 | 状态 |
|---|---|---|---|
/api/v1/teacher/dashboard |
GET | 仪表盘概览 | ✅ |
/api/v1/teacher/dashboard/today |
GET | 今日课表 | ✅ |
/api/v1/teacher/dashboard/weekly |
GET | 本周课时 | ✅ |
/api/v1/teacher/courses |
GET | 课程列表 | ✅ |
/api/v1/teacher/courses/{id} |
GET | 课程详情 | ✅ |
/api/v1/teacher/courses/classes |
GET | 教师的班级 | ✅ |
/api/v1/teacher/courses/students |
GET | 教师所有学生 | ✅ |
/api/v1/teacher/lessons |
GET | 课时列表 | ✅ |
/api/v1/teacher/lessons/{id} |
GET/PUT | 课时详情/更新 | ✅ |
/api/v1/teacher/lessons/{id}/start |
POST | 开始课时 | ✅ |
/api/v1/teacher/lessons/{id}/finish |
POST | 结束课时 | ✅ |
/api/v1/teacher/lessons/{id}/cancel |
POST | 取消课时 | ✅ |
/api/v1/teacher/lessons/{lessonId}/students/{studentId}/record |
POST | 保存学生评价 | ✅ |
/api/v1/teacher/lessons/{lessonId}/student-records |
GET | 获取学生评价 | ✅ |
/api/v1/teacher/lessons/{lessonId}/student-records/batch |
POST | 批量保存评价 | ✅ |
/api/v1/teacher/lessons/{lessonId}/feedback |
GET/POST | 课程反馈 | ✅ |
/api/v1/teacher/tasks |
GET/POST | 任务列表/创建 | ✅ |
/api/v1/teacher/tasks/{id} |
GET/PUT/DELETE | 任务详情/更新/删除 | ✅ |
/api/v1/teacher/tasks/{taskId}/completions/{studentId} |
PUT | 更新任务完成状态 | ✅ |
/api/v1/teacher/tasks/stats |
GET | 任务统计 | ✅ |
/api/v1/teacher/tasks/stats/by-type |
GET | 按类型统计 | ✅ |
/api/v1/teacher/tasks/stats/by-class |
GET | 按班级统计 | ✅ |
/api/v1/teacher/tasks/stats/monthly |
GET | 月度统计 | ✅ |
/api/v1/teacher/tasks/{id}/completions |
GET | 任务完成记录 | ✅ |
/api/v1/teacher/tasks/task-templates |
GET | 任务模板列表 | ✅ |
/api/v1/teacher/tasks/task-templates/{id} |
GET | 模板详情 | ✅ |
/api/v1/teacher/tasks/task-templates/default/{taskType} |
GET | 默认模板 | ✅ |
/api/v1/teacher/tasks/from-template |
POST | 从模板创建任务 | ✅ |
❌ 缺失接口 (11 个)
| 接口路径 | 方法 | 功能 | 优先级 |
|---|---|---|---|
/api/v1/teacher/dashboard/recommend |
GET | 推荐课程 | 中 |
/api/v1/teacher/dashboard/lesson-trend |
GET | 课时趋势 | 中 |
/api/v1/teacher/dashboard/course-usage |
GET | 课程使用情况 | 中 |
/api/v1/teacher/lessons/{id}/complete |
POST | 完成课时 (alternative) | 低 |
/api/v1/teacher/notifications |
GET | 通知列表 | 中 |
/api/v1/teacher/notifications/{id} |
GET/DELETE | 通知详情/删除 | 中 |
/api/v1/teacher/notifications/{id}/read |
PUT | 标记通知已读 | 中 |
/api/v1/teacher/notifications/unread-count |
GET | 未读通知数 | 中 |
/api/v1/teacher/notifications/read-all |
POST | 全部标记已读 | 低 |
/api/v1/teacher/growth-records |
GET/POST | 成长记录列表/创建 | 高 |
/api/v1/teacher/growth-records/{id} |
GET/PUT/DELETE | 成长记录详情/更新/删除 | 高 |
/api/v1/teacher/schedules |
GET | 排课列表 | 高 |
/api/v1/teacher/schedules/{id} |
GET/PUT/DELETE | 排课详情/更新/删除 | 高 |
/api/v1/teacher/schedules/timetable |
GET | 课表视图 | 高 |
/api/v1/teacher/schedules/today |
GET | 今日课表 | 高 |
/api/v1/teacher/classes/{classId}/tasks |
GET | 班级任务 | 中 |
/api/v1/teacher/feedbacks |
GET | 反馈列表 | 低 |
/api/v1/teacher/feedbacks/stats |
GET | 反馈统计 | 低 |
/api/v1/teacher/tasks/upcoming |
GET | 即将到期任务 | 中 |
/api/v1/teacher/tasks/{id}/remind |
POST | 发送提醒 | 低 |
二、学校端接口对比
✅ 已实现接口 (15 个)
| 接口路径 | 方法 | 功能 | 状态 |
|---|---|---|---|
/api/v1/school/teachers |
GET | 教师列表 | ✅ |
/api/v1/school/students |
GET | 学生列表 | ✅ |
/api/v1/school/classes |
GET | 班级列表 | ✅ |
/api/v1/school/classes/{id}/students |
GET | 班级学生 | ✅ |
/api/v1/school/classes/{id}/teachers |
GET | 班级教师 | ✅ |
/api/v1/school/classes/{id}/teachers |
POST | 添加班级教师 | ✅ |
/api/v1/school/classes/{id}/teachers/{teacherId} |
PUT/DELETE | 更新/移除班级教师 | ✅ |
/api/v1/school/students/{id}/transfer |
POST | 学生调班 | ✅ |
/api/v1/school/students/{id}/history |
GET | 调班历史 | ✅ |
/api/v1/school/courses |
GET | 课程列表 | ✅ |
/api/v1/school/tasks |
GET | 任务列表 | ✅ |
/api/v1/school/schedules |
GET/POST | 课表列表/创建 | ✅ |
/api/v1/school/schedules/{id} |
PUT/DELETE | 更新/取消课表 | ✅ |
/api/v1/school/settings |
GET/PUT | 设置管理 | ✅ |
/api/v1/school/stats/dashboard |
GET | 仪表盘统计 | ✅ |
❌ 缺失接口 (45 个)
| 接口路径 | 方法 | 功能 | 优先级 |
|---|---|---|---|
/api/v1/school/teachers/{id} |
GET/PUT/DELETE | 教师详情/更新/删除 | 高 |
/api/v1/school/teachers |
POST | 创建教师 | 高 |
/api/v1/school/teachers/{id}/reset-password |
POST | 重置教师密码 | 中 |
/api/v1/school/students/{id} |
GET/PUT/DELETE | 学生详情/更新/删除 | 高 |
/api/v1/school/students |
POST | 创建学生 | 高 |
/api/v1/school/students/import |
POST | 批量导入学生 | 中 |
/api/v1/school/students/import/template |
GET | 导入模板 | 中 |
/api/v1/school/classes/{id} |
GET/PUT/DELETE | 班级详情/更新/删除 | 高 |
/api/v1/school/classes |
POST | 创建班级 | 高 |
/api/v1/school/parents |
GET/POST | 家长列表/创建 | 高 |
/api/v1/school/parents/{id} |
GET/PUT/DELETE | 家长详情/更新/删除 | 高 |
/api/v1/school/parents/{id}/reset-password |
POST | 重置家长密码 | 中 |
/api/v1/school/parents/{parentId}/children/{studentId} |
POST/DELETE | 绑定/解绑孩子 | 高 |
/api/v1/school/courses/{id} |
GET | 课程详情 | 中 |
/api/v1/school/schedules/timetable |
GET | 课表视图 | 高 |
/api/v1/school/schedules/{id} |
GET | 排课详情 | 中 |
/api/v1/school/schedules/batch |
POST | 批量创建排课 | 中 |
/api/v1/school/schedule-templates |
GET/POST | 排课模板列表/创建 | 中 |
/api/v1/school/schedule-templates/{id} |
GET/PUT/DELETE | 模板详情/更新/删除 | 中 |
/api/v1/school/schedule-templates/{id}/apply |
POST | 应用排课模板 | 中 |
/api/v1/school/tasks/stats |
GET | 任务统计 | 中 |
/api/v1/school/tasks/stats/by-type |
GET | 按类型统计 | 中 |
/api/v1/school/tasks/stats/by-class |
GET | 按班级统计 | 中 |
/api/v1/school/tasks/stats/monthly |
GET | 月度统计 | 中 |
/api/v1/school/tasks/{id} |
GET | 任务详情 | 高 |
/api/v1/school/tasks/{id}/completions |
GET | 任务完成记录 | 中 |
/api/v1/school/tasks |
POST | 创建任务 | 高 |
/api/v1/school/tasks/{id} |
PUT/DELETE | 更新/删除任务 | 高 |
/api/v1/school/tasks/{taskId}/completions/{studentId} |
PUT | 更新任务完成状态 | 高 |
/api/v1/school/tasks/{id}/remind |
POST | 发送提醒 | 低 |
/api/v1/school/task-templates |
GET/POST | 任务模板列表/创建 | 中 |
/api/v1/school/task-templates/{id} |
GET/PUT/DELETE | 模板详情/更新/删除 | 中 |
/api/v1/school/task-templates/default/{taskType} |
GET | 默认模板 | 中 |
/api/v1/school/tasks/from-template |
POST | 从模板创建任务 | 中 |
/api/v1/school/feedbacks |
GET | 反馈列表 | 低 |
/api/v1/school/feedbacks/stats |
GET | 反馈统计 | 低 |
/api/v1/school/operation-logs |
GET | 操作日志 | 中 |
/api/v1/school/operation-logs/stats |
GET | 日志统计 | 低 |
/api/v1/school/stats/teachers |
GET | 教师统计 | 中 |
/api/v1/school/stats/lesson-trend |
GET | 课时趋势 | 中 |
/api/v1/school/stats/courses |
GET | 课程统计 | 中 |
/api/v1/school/export/students |
GET | 导出学生数据 | 低 |
/api/v1/school/export/teachers |
GET | 导出教师数据 | 低 |
/api/v1/school/export/lessons |
GET | 导出课时数据 | 低 |
/api/v1/school/export/growth-records |
GET | 导出成长记录 | 低 |
/api/v1/school/growth-records |
GET/POST | 成长记录列表/创建 | 中 |
/api/v1/school/growth-records/{id} |
GET/PUT/DELETE | 成长记录详情/更新/删除 | 中 |
/api/v1/school/notifications |
GET/POST | 通知列表/创建 | 中 |
/api/v1/school/notifications/{id} |
GET/PUT/DELETE | 通知详情/更新/删除 | 中 |
/api/v1/school/notifications/{id}/read |
PUT | 标记通知已读 | 中 |
/api/v1/school/notifications/unread-count |
GET | 未读通知数 | 中 |
/api/v1/school/notifications/read-all |
POST | 全部标记已读 | 低 |
/api/v1/school/resource-libraries |
GET | 资源库列表 | 低 |
/api/v1/school/resource-items |
GET | 资源项列表 | 低 |
/api/v1/school/course-packages |
GET/POST/PUT/DELETE | 课程包管理 | 中 |
/api/v1/school/tenant-courses |
GET/POST/PUT/DELETE | 校本课程管理 | 中 |
三、家长端接口对比
✅ 已实现接口 (4 个)
| 接口路径 | 方法 | 功能 | 状态 |
|---|---|---|---|
/api/v1/parent/children |
GET | 孩子列表 | ✅ |
/api/v1/parent/children/{id} |
GET | 孩子详情 | ✅ |
/api/v1/parent/children/{childId}/lessons |
GET | 孩子课时 | ✅ |
/api/v1/parent/children/{childId}/tasks |
GET | 孩子任务 | ✅ |
/api/v1/parent/children/{childId}/tasks/{taskId}/feedback |
PUT | 提交任务反馈 | ✅ |
❌ 缺失接口 (2 个)
| 接口路径 | 方法 | 功能 | 优先级 |
|---|---|---|---|
/api/v1/parent/children/{id}/growth-records |
GET | 成长记录 | 中 |
/api/v1/parent/notifications |
GET | 通知列表 | 低 |
/api/v1/parent/notifications/{id} |
GET/PUT | 通知详情/已读 | 低 |
/api/v1/parent/notifications/unread-count |
GET | 未读通知数 | 低 |
/api/v1/parent/notifications/read-all |
POST | 全部标记已读 | 低 |
四、管理员端接口对比
✅ 已实现接口 (8 个)
| 接口路径 | 方法 | 功能 | 状态 |
|---|---|---|---|
/api/v1/admin/tenants |
GET | 租户列表 | ✅ |
/api/v1/admin/tenants/{id} |
GET/PUT/DELETE | 租户详情/更新/删除 | ✅ |
/api/v1/admin/tenants/{id}/status |
PUT | 更新租户状态 | ✅ |
/api/v1/admin/tenants/{id}/quota |
PUT | 更新租户配额 | ✅ |
/api/v1/admin/courses |
GET | 系统课程列表 | ✅ |
/api/v1/admin/course-packages |
GET | 课程包列表 | ✅ |
/api/v1/admin/resource-libraries |
GET | 资源库列表 | ✅ |
/api/v1/admin/themes |
GET | 主题列表 | ✅ |
/api/v1/admin/settings |
GET/PUT | 系统设置 | ✅ |
/api/v1/admin/stats/dashboard |
GET | 仪表盘 | ✅ |
/api/v1/admin/operation-logs |
GET | 操作日志 | ✅ |
❌ 缺失接口 (12 个)
| 接口路径 | 方法 | 功能 | 优先级 |
|---|---|---|---|
/api/v1/admin/courses/{id} |
GET/PUT/DELETE | 课程详情/更新/删除 | 高 |
/api/v1/admin/courses |
POST | 创建系统课程 | 高 |
/api/v1/admin/courses/{id}/approve |
POST | 审批课程 | 高 |
/api/v1/admin/courses/{id}/publish |
POST | 发布课程 | 中 |
/api/v1/admin/courses/{id}/unpublish |
POST | 下架课程 | 中 |
/api/v1/admin/course-packages |
POST/PUT/DELETE | 课程包管理 | 中 |
/api/v1/admin/resource-libraries |
POST | 创建资源库 | 中 |
/api/v1/admin/themes |
POST | 创建主题 | 低 |
/api/v1/admin/themes/{id} |
PUT | 更新主题 | 低 |
/api/v1/admin/settings |
PUT | 更新设置 | ✅已有 |
/api/v1/admin/stats/active-tenants |
GET | 活跃租户 | 中 |
/api/v1/admin/stats/lesson-trend |
GET | 课时趋势 | 中 |
/api/v1/admin/stats/popular-courses |
GET | 热门课程 | 中 |
/api/v1/admin/stats/recent-activities |
GET | 最近活动 | 中 |
/api/v1/admin/operation-logs/stats |
GET | 日志统计 | 低 |
五、通用接口对比
✅ 已实现接口
| 接口路径 | 方法 | 功能 | 状态 |
|---|---|---|---|
/api/v1/auth/login |
POST | 登录 | ✅ |
/api/v1/auth/me |
GET | 获取当前用户 | ✅ |
/api/v1/files/upload |
POST | 上传文件 | ✅ |
/api/v1/files/delete |
POST/DELETE | 删除文件 | ✅ |
❌ 缺失接口
| 接口路径 | 方法 | 功能 | 优先级 |
|---|---|---|---|
/api/v1/auth/logout |
POST | 登出 | 低 |
/api/v1/auth/change-password |
POST | 修改密码 | 中 |
/api/v1/auth/profile |
GET/PUT | 用户资料 | 中 |
优先级排序
P0 - 核心功能缺失(必须实现)
-
学校端 - 用户管理 CRUD
- 教师/学生/家长的创建、更新、删除
- 家长与孩子绑定/解绑
-
学校端 - 班级管理
- 班级详情/创建/更新/删除
-
学校端 - 任务管理
- 任务详情/创建/更新/删除
- 任务完成状态更新
-
教师端 - 课表管理
- 排课列表/详情/创建/更新/删除
- 课表视图
-
管理员端 - 课程管理
- 课程详情/创建/更新/删除
- 课程审批流程
P1 - 重要功能缺失(优先实现)
-
学校端 - 排课模板
- 模板列表/详情/创建/更新/删除
- 应用排课模板
-
学校端 - 统计接口
- 任务统计(总数、按类型、按班级、月度)
-
教师端 - 成长档案
- 成长记录列表/创建/详情/更新/删除
-
学校端 - 通知管理
- 通知列表/创建/详情/更新/删除
- 标记已读/未读计数
P2 - 辅助功能缺失(后续实现)
-
学校端 - 导出功能
- 导出学生/教师/课时/成长记录数据
-
学校端 - 操作日志
- 日志列表/统计
-
教师端 - 反馈管理
- 反馈列表/统计
-
管理员端 - 统计增强
- 活跃租户/课时趋势/热门课程/最近活动
实施建议
阶段一:补充 P0 核心功能
- 学校端用户管理 - SchoolTeacherController, SchoolStudentController, SchoolParentController
- 学校端任务管理 - SchoolTaskController 补充
- 教师端课表管理 - TeacherScheduleController 补充
- 管理员端课程管理 - AdminCourseController 补充
阶段二:补充 P1 重要功能
- 学校端排课模板 - SchoolScheduleController 补充模板相关接口
- 学校端统计接口 - SchoolStatsController 补充
- 教师端成长档案 - TeacherGrowthController 补充
- 学校端通知管理 - SchoolNotificationController 补充
阶段三:补充 P2 辅助功能
- 学校端导出功能 - SchoolExportController 补充
- 学校端操作日志 - SchoolOperationLogController 补充
- 管理员端统计增强 - AdminStatsController 补充
api-spec.yml 状态
前端 api-spec.yml 文件中已定义了约 120+ 个接口路径,但新后端目前只实现了约 60 个接口。
需要补充的接口数量约 74 个,按优先级分布:
- P0(高优先级): 约 30 个
- P1(中优先级): 约 25 个
- P2(低优先级): 约 19 个
下一步行动
- 立即开始 - 补充 P0 核心功能接口
- 本周内 - 补充 P1 重要功能接口
- 下周 - 补充 P2 辅助功能接口
- 完成后 - 从新后端导出 OpenAPI 规范,更新前端 API 客户端
附录:新旧后端 Controller 文件对比
新后端 Controller 列表
controller/
├── admin/
│ ├── AdminCourseController.java
│ ├── AdminCourseLessonController.java
│ ├── AdminCoursePackageController.java
│ ├── AdminOperationLogController.java
│ ├── AdminResourceController.java
│ ├── AdminSettingsController.java
│ ├── AdminStatsController.java
│ ├── AdminTenantController.java
│ └── AdminThemeController.java
├── parent/
│ ├── ParentChildController.java
│ ├── ParentGrowthController.java
│ ├── ParentNotificationController.java
│ └── ParentTaskController.java
├── school/
│ ├── SchoolClassController.java
│ ├── SchoolCourseController.java
│ ├── SchoolCoursePackageController.java
│ ├── SchoolExportController.java
│ ├── SchoolGrowthController.java
│ ├── SchoolNotificationController.java
│ ├── SchoolOperationLogController.java
│ ├── SchoolParentController.java
│ ├── SchoolScheduleController.java
│ ├── SchoolSettingsController.java
│ ├── SchoolStudentController.java
│ ├── SchoolTaskController.java
│ ├── SchoolTeacherController.java
│ └── SchoolStatsController.java
├── teacher/
│ ├── TeacherCourseController.java
│ ├── TeacherCourseLessonController.java
│ ├── TeacherDashboardController.java
│ ├── TeacherGrowthController.java
│ ├── TeacherLessonController.java
│ ├── TeacherNotificationController.java
│ ├── TeacherScheduleController.java
│ ├── TeacherSchoolCourseController.java
│ └── TeacherTaskController.java
├── AuthController.java
└── FileUploadController.java
旧后端 Controller 列表
modules/
├── admin/
│ ├── admin-settings.controller.ts
│ ├── admin-stats.controller.ts
│ ├── admin-tenant.controller.ts
│ ├── admin-course.controller.ts
│ ├── admin-course-package.controller.ts
│ ├── admin-resource.controller.ts
│ └── admin-theme.controller.ts
├── auth/
│ └── auth.controller.ts
├── common/
│ └── operation-log.controller.ts
├── course/
│ └── course.controller.ts
├── course-lesson/
│ └── course-lesson.controller.ts
├── course-package/
│ └── course-package.controller.ts
├── export/
│ └── export.controller.ts
├── file-upload/
│ └── file-upload.controller.ts
├── growth/
│ └── growth.controller.ts
├── lesson/
│ └── lesson.controller.ts
├── notification/
│ └── notification.controller.ts
├── parent/
│ └── parent.controller.ts
├── resource/
│ └── resource.controller.ts
├── school/
│ ├── school.controller.ts (学校管理员主控制器)
│ ├── school-course.controller.ts
│ ├── school-settings.controller.ts
│ ├── school-stats.controller.ts
│ ├── export.controller.ts
│ └── package.controller.ts
├── task/
│ └── task.controller.ts
├── teacher-course/
│ └── teacher-course.controller.ts
├── tenant/
│ └── tenant.controller.ts
└── theme/
└── theme.controller.ts