308 lines
8.2 KiB
TypeScript
308 lines
8.2 KiB
TypeScript
// API 统一导出文件
|
|
export * from './types'
|
|
export * from './request'
|
|
|
|
// 导出所有API模块
|
|
export { default as AuthApi } from './modules/auth'
|
|
export { default as CourseApi } from './modules/course'
|
|
export { default as CommentApi } from './modules/comment'
|
|
export { default as FavoriteApi } from './modules/favorite'
|
|
export { default as OrderApi } from './modules/order'
|
|
export { default as UploadApi } from './modules/upload'
|
|
export { default as StatisticsApi } from './modules/statistics'
|
|
export { default as ExamApi } from './modules/exam'
|
|
|
|
// API 基础配置
|
|
export const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:3000/jeecgboot'
|
|
|
|
// API 端点配置
|
|
export const API_ENDPOINTS = {
|
|
// 认证相关
|
|
AUTH: {
|
|
LOGIN: '/aiol/aiolUser/login',
|
|
USER_INFO: '/aiol/aiolUser/info',
|
|
REGISTER: '/aiol/aiolUser/register',
|
|
LOGOUT: '/auth/logout',
|
|
REFRESH: '/auth/refresh',
|
|
ME: '/auth/me',
|
|
PROFILE: '/auth/profile',
|
|
CHANGE_PASSWORD: '/auth/change-password',
|
|
FORGOT_PASSWORD: '/auth/forgot-password',
|
|
RESET_PASSWORD: '/auth/reset-password',
|
|
VERIFY_EMAIL: '/auth/verify-email',
|
|
VERIFY_PHONE: '/auth/verify-phone',
|
|
UPLOAD_AVATAR: '/auth/upload-avatar',
|
|
},
|
|
|
|
// 课程相关
|
|
COURSES: {
|
|
LIST: '/aiol/aiolCourse/query_list',
|
|
SEARCH: '/courses/search',
|
|
POPULAR: '/courses/popular',
|
|
LATEST: '/courses/latest',
|
|
RECOMMENDED: '/courses/recommended',
|
|
DETAIL: '/aiol/aiolCourse/detail',
|
|
CHAPTERS: '/courses/:id/chapters',
|
|
LESSONS: '/courses/:id/lessons',
|
|
ENROLL: '/courses/:id/enroll',
|
|
PROGRESS: '/courses/:id/progress',
|
|
PREVIEW: '/courses/:id/preview',
|
|
STATS: '/courses/:id/stats',
|
|
RELATED: '/courses/:id/related',
|
|
ACCESS: '/courses/:id/access',
|
|
},
|
|
|
|
// 分类相关
|
|
CATEGORIES: {
|
|
LIST: '/aiol/aiolCourse/category/list',
|
|
COURSES: '/categories/:id/courses',
|
|
},
|
|
|
|
// 专题相关
|
|
SUBJECTS: {
|
|
LIST: '/aiol/aiolCourse/subject/list',
|
|
},
|
|
|
|
// 难度相关
|
|
DIFFICULTIES: {
|
|
LIST: '/aiol/aiolCourse/difficulty/list',
|
|
},
|
|
|
|
// 章节课时相关
|
|
CHAPTERS: {
|
|
DETAIL: '/chapters/:id',
|
|
},
|
|
|
|
LESSONS: {
|
|
DETAIL: '/lessons/:id',
|
|
RESOURCES: '/lessons/:id/resources',
|
|
COMPLETE: '/lessons/:id/complete',
|
|
},
|
|
|
|
// 讲师相关
|
|
INSTRUCTORS: {
|
|
DETAIL: '/instructors/:id',
|
|
COURSES: '/instructors/:id/courses',
|
|
FOLLOW: '/instructors/:id/follow',
|
|
},
|
|
|
|
// 测验相关
|
|
QUIZZES: {
|
|
LIST: '/courses/:id/quizzes',
|
|
DETAIL: '/quizzes/:id',
|
|
SUBMIT: '/quizzes/:id/submit',
|
|
RESULTS: '/quizzes/:id/results',
|
|
},
|
|
|
|
// 评论相关
|
|
COMMENTS: {
|
|
COURSE: '/courses/:id/comments',
|
|
LESSON: '/lessons/:id/comments',
|
|
DETAIL: '/comments/:id',
|
|
REPLIES: '/comments/:id/replies',
|
|
LIKE: '/comments/:id/like',
|
|
DISLIKE: '/comments/:id/dislike',
|
|
HELPFUL: '/comments/:id/helpful',
|
|
REPORT: '/comments/:id/report',
|
|
MY_COMMENTS: '/my-comments',
|
|
STATS: '/comments/stats',
|
|
},
|
|
|
|
// 收藏相关
|
|
FAVORITES: {
|
|
LIST: '/favorites',
|
|
ADD: '/favorites',
|
|
REMOVE: '/favorites/:id',
|
|
CHECK: '/favorites/check/:id',
|
|
BATCH: '/favorites/batch',
|
|
STATS: '/favorites/stats',
|
|
EXPORT: '/favorites/export',
|
|
IMPORT: '/favorites/import',
|
|
FOLDERS: '/favorite-folders',
|
|
},
|
|
|
|
// 订单相关
|
|
ORDERS: {
|
|
LIST: '/orders',
|
|
CREATE: '/orders',
|
|
DETAIL: '/orders/:id',
|
|
BY_NO: '/orders/no/:orderNo',
|
|
CANCEL: '/orders/:id/cancel',
|
|
CONFIRM_PAYMENT: '/orders/:id/confirm-payment',
|
|
REFUND: '/orders/:id/refund',
|
|
INVOICE: '/orders/:id/invoice',
|
|
STATS: '/orders/stats',
|
|
CALCULATE: '/orders/calculate',
|
|
},
|
|
|
|
// 支付相关
|
|
PAYMENT: {
|
|
METHODS: '/payment-methods',
|
|
STATUS: '/orders/:id/payment-status',
|
|
RETRY: '/orders/:id/retry-payment',
|
|
},
|
|
|
|
// 优惠券相关
|
|
COUPONS: {
|
|
VALIDATE: '/coupons/validate',
|
|
AVAILABLE: '/coupons/available',
|
|
},
|
|
|
|
// 退款相关
|
|
REFUNDS: {
|
|
LIST: '/refunds',
|
|
DETAIL: '/refunds/:id',
|
|
},
|
|
|
|
// 上传相关
|
|
UPLOAD: {
|
|
FILE: '/upload/:type',
|
|
AVATAR: '/upload/avatar',
|
|
COURSE_THUMBNAIL: '/upload/course-thumbnail',
|
|
COURSE_VIDEO: '/upload/course-video',
|
|
COURSE_RESOURCE: '/upload/course-resource',
|
|
MULTIPLE: '/upload/multiple/:type',
|
|
CONFIG: '/upload/config',
|
|
TOKEN: '/upload/token/:type',
|
|
COMPRESS: '/upload/compress-image',
|
|
THUMBNAIL: '/upload/generate-thumbnail',
|
|
HISTORY: '/upload/history',
|
|
},
|
|
|
|
// 统计相关
|
|
STATISTICS: {
|
|
PLATFORM: '/statistics/platform',
|
|
USER_LEARNING: '/statistics/user-learning',
|
|
COURSE: '/statistics/course/:id',
|
|
INSTRUCTOR: '/statistics/instructor/:id',
|
|
LEARNING_PROGRESS: '/statistics/learning-progress',
|
|
REVENUE: '/statistics/revenue',
|
|
USER_BEHAVIOR: '/statistics/user-behavior',
|
|
SEARCH: '/statistics/search',
|
|
CONTENT: '/statistics/content',
|
|
COMMENTS: '/statistics/comments',
|
|
EXPORT: '/statistics/export/:type',
|
|
},
|
|
|
|
// 考试题库相关
|
|
EXAM: {
|
|
// 题库管理
|
|
REPO_CREATE: '/aiol/aiolRepo/courseAdd',
|
|
REPO_LIST: '/aiol/aiolRepo/repoList',
|
|
REPO_DELETE: '/aiol/aiolRepo/delete',
|
|
REPO_EDIT: '/gen/repo/repo/edit',
|
|
|
|
// 题目管理
|
|
QUESTION_LIST: '/aiol/aiolRepo/questionList/:repoId',
|
|
QUESTION_DETAIL: '/aiol/aiolRepo/repoList/:questionId',
|
|
QUESTION_ADD: '/gen/question/question/add',
|
|
QUESTION_EDIT: '/gen/question/question/edit',
|
|
QUESTION_DELETE: '/gen/question/question/delete',
|
|
|
|
// 题目选项管理
|
|
QUESTION_OPTION_ADD: '/gen/questionoption/questionOption/add',
|
|
QUESTION_OPTION_EDIT: '/gen/questionoption/questionOption/edit',
|
|
QUESTION_OPTION_DELETE: '/gen/questionoption/questionOption/delete',
|
|
|
|
// 题目答案管理
|
|
QUESTION_ANSWER_ADD: '/gen/questionanswer/questionAnswer/add',
|
|
QUESTION_ANSWER_EDIT: '/gen/questionanswer/questionAnswer/edit',
|
|
QUESTION_ANSWER_DELETE: '/gen/questionanswer/questionAnswer/delete',
|
|
|
|
// 题库题目关联管理
|
|
QUESTION_REPO_ADD: '/gen/questionrepo/questionRepo/add',
|
|
QUESTION_REPO_EDIT: '/gen/questionrepo/questionRepo/edit',
|
|
QUESTION_REPO_DELETE: '/gen/questionrepo/questionRepo/delete',
|
|
},
|
|
|
|
// 学习进度相关
|
|
LEARNING: {
|
|
PROGRESS: '/learning-progress',
|
|
MY_COURSES: '/my-courses',
|
|
},
|
|
|
|
// 资源相关
|
|
RESOURCES: {
|
|
DOWNLOAD: '/resources/:id/download',
|
|
},
|
|
}
|
|
|
|
// 请求配置
|
|
export const REQUEST_CONFIG = {
|
|
timeout: 10000,
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
}
|
|
|
|
// HTTP状态码
|
|
export const HTTP_STATUS = {
|
|
OK: 200,
|
|
CREATED: 201,
|
|
NO_CONTENT: 204,
|
|
BAD_REQUEST: 400,
|
|
UNAUTHORIZED: 401,
|
|
FORBIDDEN: 403,
|
|
NOT_FOUND: 404,
|
|
VALIDATION_ERROR: 422,
|
|
TOO_MANY_REQUESTS: 429,
|
|
INTERNAL_ERROR: 500,
|
|
BAD_GATEWAY: 502,
|
|
SERVICE_UNAVAILABLE: 503,
|
|
GATEWAY_TIMEOUT: 504,
|
|
}
|
|
|
|
// 业务状态码
|
|
export const BUSINESS_CODE = {
|
|
SUCCESS: 0,
|
|
FAILED: 1,
|
|
INVALID_PARAMS: 1001,
|
|
UNAUTHORIZED: 1002,
|
|
FORBIDDEN: 1003,
|
|
NOT_FOUND: 1004,
|
|
ALREADY_EXISTS: 1005,
|
|
OPERATION_FAILED: 1006,
|
|
VALIDATION_FAILED: 1007,
|
|
RATE_LIMITED: 1008,
|
|
MAINTENANCE: 1009,
|
|
}
|
|
|
|
// 常用的API响应消息
|
|
export const API_MESSAGES = {
|
|
SUCCESS: '操作成功',
|
|
FAILED: '操作失败',
|
|
INVALID_PARAMS: '参数错误',
|
|
UNAUTHORIZED: '未授权访问',
|
|
FORBIDDEN: '禁止访问',
|
|
NOT_FOUND: '资源不存在',
|
|
ALREADY_EXISTS: '资源已存在',
|
|
NETWORK_ERROR: '网络错误',
|
|
SERVER_ERROR: '服务器错误',
|
|
TIMEOUT: '请求超时',
|
|
UNKNOWN_ERROR: '未知错误',
|
|
}
|
|
|
|
// 分页默认配置
|
|
export const PAGINATION_CONFIG = {
|
|
DEFAULT_PAGE: 1,
|
|
DEFAULT_PAGE_SIZE: 20,
|
|
MAX_PAGE_SIZE: 100,
|
|
}
|
|
|
|
// 文件上传配置
|
|
export const UPLOAD_CONFIG = {
|
|
MAX_FILE_SIZE: 100 * 1024 * 1024, // 100MB
|
|
ALLOWED_IMAGE_TYPES: ['image/jpeg', 'image/png', 'image/gif', 'image/webp'],
|
|
ALLOWED_VIDEO_TYPES: ['video/mp4', 'video/avi', 'video/mov', 'video/wmv'],
|
|
ALLOWED_DOCUMENT_TYPES: ['application/pdf', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'],
|
|
ALLOWED_AUDIO_TYPES: ['audio/mp3', 'audio/wav', 'audio/ogg'],
|
|
}
|
|
|
|
// 缓存配置
|
|
export const CACHE_CONFIG = {
|
|
DEFAULT_TTL: 5 * 60 * 1000, // 5分钟
|
|
USER_INFO_TTL: 30 * 60 * 1000, // 30分钟
|
|
COURSE_LIST_TTL: 10 * 60 * 1000, // 10分钟
|
|
STATIC_DATA_TTL: 60 * 60 * 1000, // 1小时
|
|
}
|