## 后端重构 ### 新增基础设施 - src/common/dto/ - 统一响应格式和分页查询DTO基类 - src/common/interceptors/ - 响应转换拦截器 - src/common/utils/ - JSON解析和分页计算工具函数 ### DTO规范化 - Course、Lesson、TeacherCourse、SchoolCourse、Tenant控制器添加Swagger装饰器 - 添加@ApiQuery、@ApiBody、@ApiOperation完善API文档 - 修复CourseLesson控制器路径参数问题 ## 前端重构 ### Orval API客户端生成 - 添加orval配置和生成脚本 - 生成完整的类型安全API客户端 (src/api/generated/) - 导入56个参数类型文件 ### API模块迁移 - src/api/course.ts - 迁移使用Orval生成API - src/api/school-course.ts - 修复类型错误(number vs string) - src/api/teacher.ts - 完整迁移教师端API - src/api/client.ts - 重构API客户端统一入口 - src/api/lesson.ts - 修复未使用参数 ### 文件路由配置 - 配置unplugin-vue-router插件 - 创建动态路由配置支持自动路由和传统路由切换 - 添加路由守卫保留原有权限逻辑 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
78 lines
1.6 KiB
TypeScript
78 lines
1.6 KiB
TypeScript
/**
|
|
* JSON 字段解析工具
|
|
*
|
|
* 用于安全解析数据库中存储的 JSON 字符串
|
|
*/
|
|
|
|
/**
|
|
* 解析 JSON 字段
|
|
*
|
|
* @param value - 数据库中的 JSON 字符串
|
|
* @param defaultValue - 解析失败时的默认值
|
|
* @returns 解析后的对象或默认值
|
|
*
|
|
* @example
|
|
* ```typescript
|
|
* const tags = parseJsonField(course.gradeTags, []);
|
|
* const settings = parseJsonField(user.settings, {});
|
|
* ```
|
|
*/
|
|
export function parseJsonField<T>(
|
|
value: string | null | undefined,
|
|
defaultValue: T,
|
|
): T {
|
|
if (!value) {
|
|
return defaultValue;
|
|
}
|
|
|
|
try {
|
|
return JSON.parse(value) as T;
|
|
} catch {
|
|
return defaultValue;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 安全地将对象转换为 JSON 字符串
|
|
*
|
|
* @param value - 要转换的对象
|
|
* @param defaultValue - 转换失败时的默认值
|
|
* @returns JSON 字符串或默认值
|
|
*/
|
|
export function stringifyJsonField(
|
|
value: any,
|
|
defaultValue: string = '{}',
|
|
): string {
|
|
if (value === null || value === undefined) {
|
|
return defaultValue;
|
|
}
|
|
|
|
try {
|
|
return JSON.stringify(value);
|
|
} catch {
|
|
return defaultValue;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 解析 JSON 数组字段
|
|
*
|
|
* @param value - 数据库中的 JSON 数组字符串
|
|
* @returns 解析后的数组或空数组
|
|
*/
|
|
export function parseJsonArray<T>(value: string | null | undefined): T[] {
|
|
return parseJsonField<T[]>(value, []);
|
|
}
|
|
|
|
/**
|
|
* 解析 JSON 对象字段
|
|
*
|
|
* @param value - 数据库中的 JSON 对象字符串
|
|
* @returns 解析后的对象或空对象
|
|
*/
|
|
export function parseJsonObject<T extends Record<string, any>>(
|
|
value: string | null | undefined,
|
|
): T {
|
|
return parseJsonField<T>(value, {} as T);
|
|
}
|