# 卖课系统 **Repository Path**: hhxcaz/teaching-system ## Basic Information - **Project Name**: 卖课系统 - **Description**: 卖课系统、微信支付、订单管理 - **Primary Language**: NodeJS - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2023-06-29 - **Last Updated**: 2024-02-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Selling System 文档 Selling System 是一个后端系统,用于管理用户、课程、交易、视频和日志等数据。下面是系统的组件和功能的详细说明。 ## 目录结构 ``` plaintext复制代码sellingSystem/ ├── app.js ├── config/ │ ├── dbConfig.js │ └── authConfig.js ├── controllers/ │ ├── userController.js │ ├── courseController.js │ ├── transactionController.js │ ├── videoController.js │ └── logController.js ├── database.js ├── middlewares/ │ └── authMiddleware.js ├── models/ │ ├── User.js │ ├── Course.js │ ├── Transaction.js │ ├── Video.js │ └── Log.js ├── routes/ │ ├── userRoutes.js │ ├── courseRoutes.js │ ├── transactionRoutes.js │ ├── videoRoutes.js │ └── logRoutes.js └── utils/ └── authUtils.js ``` ## 组件说明 - `app.js`:系统的入口文件,配置和启动 Express 应用程序。 - ``` config/ ``` :存放系统配置文件的目录。 - `dbConfig.js`:数据库配置文件,包含数据库连接信息。 - `authConfig.js`:身份验证配置文件,包含身份验证相关的配置信息。 - ``` controllers/ ``` :控制器目录,包含处理各个模型的请求和逻辑的控制器文件。 - `userController.js`:用户模型的控制器文件。 - `courseController.js`:课程模型的控制器文件。 - `transactionController.js`:交易模型的控制器文件。 - `videoController.js`:视频模型的控制器文件。 - `logController.js`:日志模型的控制器文件。 - `database.js`:数据库配置和连接的文件。 - ``` middlewares/ ``` :中间件目录,包含自定义的中间件文件。 - `authMiddleware.js`:身份验证中间件,用于验证用户的身份信息。 - ``` models/ ``` :模型目录,包含系统的各个数据模型文件。 - `User.js`:用户模型文件。 - `Course.js`:课程模型文件。 - `Transaction.js`:交易模型文件。 - `Video.js`:视频模型文件。 - `Log.js`:日志模型文件。 - ``` routes/ ``` :路由目录,包含系统的各个路由文件。 - `userRoutes.js`:用户模型的路由文件。 - `courseRoutes.js`:课程模型的路由文件。 - `transactionRoutes.js`:交易模型的路由文件。 - `videoRoutes.js`:视频模型的路由文件。 - `logRoutes.js`:日志模型的路由文件。 - ``` utils/ ``` :工具目录,包含系统的工具函数文件。 - `authUtils.js - `authUtils.js`:身份验证相关的工具函数文件。 ## 功能说明 系统的功能主要包括以下模块: 1. 用户管理: - 用户注册、登录、注销功能。 - 用户信息获取、更新功能。 - 用户权限管理。 2. 课程管理: - 课程创建、编辑、删除功能。 - 课程信息获取、搜索功能。 - 课程订阅、取消订阅功能。 3. 交易管理: - 交易创建、取消功能。 - 交易记录查询、导出功能。 4. 视频管理: - 视频上传、编辑、删除功能。 - 视频信息获取、搜索功能。 5. 日志管理: - 日志记录功能,记录系统操作和事件。 - 日志查询、筛选、导出功能。 6. 身份验证: - 用户身份验证功能,确保用户访问受限资源时的身份合法性。 - 使用 JWT (JSON Web Token) 进行身份验证和授权。 ## 数据库配置 数据库配置文件 `dbConfig.js` 包含以下信息: - 数据库主机地址 - 数据库端口 - 数据库名称 - 数据库用户名 - 数据库密码 - 数据库方言(例如 MySQL、PostgreSQL 等) ## 身份验证配置 身份验证配置文件 `authConfig.js` 包含以下信息: - JWT 密钥:用于签发和验证 JWT 的密钥字符串。 - JWT 过期时间:指定 JWT 的有效期,超过该时间将需要重新进行身份验证。 ## 使用说明 1. 确保你已经安装了 Node.js 和 npm(Node 包管理器)。 2. 克隆或下载 Selling System 项目到本地。 3. 在项目根目录下,打开终端或命令提示符窗口。 4. 执行以下命令安装项目依赖: ``` plaintext npm install ``` 5. 在 `config/dbConfig.js` 文件中配置数据库连接信息,包括主机地址、端口、数据库名称、用户名和密码。 6. 在 `config/authConfig.js` 文件中配置身份验证相关的信息,包括 JWT 密钥和过期时间。 7. 执行以下命令启动应用程序: ``` plaintext npm start ``` 8. 应用程序将在本地启动,并监听指定的端口(默认为 3000)。 9. 使用 API 开发工具(如 Postman)或浏览器访问 API 端点,开始使用 Selling System 的功能。 ## API 文档 以下是 Selling System 提供的 API 端点和相应的请求示例: - 用户管理 API: - 注册用户: ``` POST /api/users/register Request Body: { "name": "John Doe", "email": "john.doe@example.com", "password": "password123" } ``` - 用户登录: ``` POST /api/users/login Request Body: { "email": "john.doe@example.com", "password": "password123" } ``` - 获取用户信息: ``` GET /api/users/:id ``` - 更新用户信息: ``` PUT /api/users/:id Request Body: { "name": "John Doe", "email": "john.doe@example.com" } ``` - 课程管理 API: - 创建课程: ``` POST /api/courses Request Body: { "title": "Introduction to Selling", "description": "A comprehensive course on selling strategies.", "price": 29.99 } ``` - 获取课程信息: ``` GET /api/courses/:id ``` - 更新课程信息: ``` PUT /api/courses/:id Request Body: { "title": "Introduction to Selling", "description": "A comprehensive course on selling strategies.", "price": 39.99 } ``` - 交易管理 API: - 创建交易: ``` POST /api/transactions Request Body: { "userId": 1, "courseId": 2 } ``` - 取消交易: ``` DELETE /api/transactions/:id ``` - 获取交易记录: ``` GET /api/transactions ``` - 视频管理 API: - 上传视频: ``` POST /api/videos Request Body: { "title": "Introduction Video", "courseId": 1, "url": "https://example.com/videos/intro.mp4" } ``` - 获取视频信息: ``` GET /api/videos/:id ``` - 更新视频信息: ``` PUT /api/videos/:id Request Body: { "title": "Introduction Video", "url": "https://example.com/videos/intro_new.mp4" } ``` - 删除视频: ``` DELETE /api/videos/:id ``` - 日志管理 API: - 获取日志记录: ``` GET /api/logs ``` - 按日期范围筛选日志记录: ``` GET /api/logs?start=2023-01-01&end=2023-01-31 ``` - 导出日志记录为 CSV 文件: ``` GET /api/logs/export?start=2023-01-01&end=2023-01-31 ``` 以上是 Selling System 提供的一些核心功能的 API 端点和请求示例。你可以根据实际需求扩展和修改这些端点,并在文档中添加更多细节和说明。 ## 身份验证 Selling System 使用 JWT(JSON Web Token)进行身份验证。当用户成功登录后,将获得一个 JWT,该令牌包含用户的身份信息,并在每个请求中被发送到服务器进行验证。服务器使用密钥来验证 JWT 的有效性并提取用户信息。 为了进行身份验证,客户端需要在请求的标头中包含一个名为 "Authorization" 的字段,其值为 "Bearer " 的形式。在每个受保护的端点中,身份验证中间件将验证 JWT 的有效性,并将解码后的用户信息附加到请求对象中,以便后续处理。 ## 错误处理 Selling System 使用统一的错误处理机制来处理各种错误情况。在 API 响应中,如果出现错误,将返回一个包含错误消息和状态码的 JSON 对象。客户端可以根据返回的状态码和错误消息来处理错误情况。 常见的错误状态码包括: - 400 Bad Request:请求无效或无法被服务器理解。 - 401 Unauthorized:未经身份验证或身份验证失败。 - 403 Forbidden:访问被禁止,权限不足。 - 404 Not Found:请求的资源不存在。 - 500 Internal Server Error:服务器内部错误。 ## 进一步开发 Selling System 提供了一个基本的后端系统框架,你可以在此基础上进行进一步的开发和定制化。你可以添加更多的功能模块、改进现有的功能,或根据实际需求进行性能优化和安全增强。 同时,请记得根据你的具体项目需求和规模,对系统进行适当的测试、部署和监控,以确保系统的稳定性和可靠性。 ## 用户接口 ### 获取所有用户 - 请求方法:GET - 接口路径:/api/users - 请求参数:无 - 响应参数: - success: 是否成功 - data: 用户列表 ### 获取单个用户 - 请求方法:GET - 接口路径:/api/users/{id} - 请求参数: - id: 用户ID - 响应参数: - success: 是否成功 - data: 用户信息 ### 创建用户 - 请求方法:POST - 接口路径:/api/users - 请求参数: - name: 用户名 - password: 密码 - 响应参数: - success: 是否成功 - data: 创建的用户信息 ### 更新用户 - 请求方法:PUT - 接口路径:/api/users/{id} - 请求参数: - id: 用户ID - name: 用户名 - email: 邮箱 - password: 密码 - 响应参数: - success: 是否成功 - message: 更新结果信息 ### 删除用户 - 请求方法:DELETE - 接口路径:/api/users/{id} - 请求参数: - id: 用户ID - 响应参数: - success: 是否成功 - message: 删除结果信息 ### 批量删除用户 - 请求方法:POST - 接口路径:/api/users/delete - 请求参数: - userIds: 用户ID列表 - 响应参数: - success: 是否成功 - message: 删除结果信息 ### 用户登录 - 请求方法:POST - 接口路径:/api/users/login - 请求参数: - name: 用户名 - password: 密码 - 响应参数: - success: 是否成功 - token: 登录成功后返回的令牌 ## 课程接口 ### 创建课程 - 请求方法:POST - 接口路径:/api/courses - 请求参数: - title: 课程标题 - description: 课程描述 - price: 课程价格 - 响应参数: - success: 是否成功 - data: 创建的课程信息 ### 获取所有课程 - 请求方法:GET - 接口路径:/api/courses - 请求参数:无 - 响应参数: - success: 是否成功 - data: 课程列表 ### 获取单个课程 - 请求方法:GET - 接口路径:/api/courses/{id} - 请求参数: - id: 课程ID - 响应参数: - success: 是否成功 - data: 课程信息 ### 更新课程 - 请求方法:PUT - 接口路径:/api/courses/{id} - 请求参数: - id: 课程ID - title: 课程标题 - description: 课程描述 - price: 课程价格 - 响应参数: - success: 是否成功 - message: 更新结果信息 ### 删除课程 - 请求方法:DELETE - 接口路径:/api/courses/{id} - 请求参数: - id: 课程ID - 响应参数: - success: 是否成功 - message: 删除结果信息 ### 上架课程 - 请求方法:POST - 接口路径:/api/courses/{id}/publish - 请求参数: - id: 课程ID - 响应参数: - success: 是否成功 - message: 上架结果信息 ### 下架课程 - 请求方法:POST - 接口路径:/api/courses/{id}/unpublish - 请求参数: - id: 课程ID - 响应参数: - success: 是否成功 - message: 下架结果信息 ### 批量删除课程 - 请求方法:POST - 接口路径:/api/courses/delete - 请求参数: - courseIds: 课程ID列表 - 响应参数: - success: 是否成功 - message: 删除结果信息 ## 日志管理接口 ### 创建日志 - 请求方法: POST - URL: `/api/logs` - 请求体参数: - `message` (string, required): 日志信息 - `category` (string, required): 日志分类 - 响应: - 成功时返回状态码 201 和创建的日志对象 - 失败时返回状态码 500 和错误信息 ### 获取所有日志 - 请求方法: GET - URL: `/api/logs` - 响应: - 成功时返回状态码 200 和所有日志的数组 - 失败时返回状态码 500 和错误信息 ### 根据日志ID获取单个日志 - 请求方法: GET - URL: `/api/logs/:id` - 路径参数: - `id` (integer, required): 日志ID - 响应: - 成功时返回状态码 200 和指定ID的日志对象 - 如果找不到指定ID的日志,返回状态码 404 和错误信息 - 失败时返回状态码 500 和错误信息 ### 更新日志 - 请求方法: PUT - URL: `/api/logs/:id` - 路径参数: - `id` (integer, required): 日志ID - 请求体参数: - `message` (string, required): 更新后的日志信息 - `category` (string, required): 更新后的日志分类 - 响应: - 成功时返回状态码 200 和成功标识 - 如果找不到指定ID的日志,返回状态码 404 和错误信息 - 失败时返回状态码 500 和错误信息 ### 删除日志 - 请求方法: DELETE - URL: `/api/logs/:id` - 路径参数: - `id` (integer, required): 日志ID - 响应: - 成功时返回状态码 200 和成功标识 - 如果找不到指定ID的日志,返回状态码 404 和错误信息 - 失败时返回状态码 500 和错误信息 ### 批量删除日志 - 请求方法: DELETE - URL: `/api/logs` - 请求体参数: - `logIds` (array of integers, required): 要删除的日志ID数组 - 响应: - 成功时返回状态码 200 和成功标识 - 如果找不到指定ID的日志,返回状态码 404 和错误信息 - 失败时返回状态码 500 和错误信息 ## 视频 API 接口 ### 获取课程下的所有视频 - **端点**:`/api/courses/:courseId/videos` - **方法**:GET - **描述**:获取指定课程下的所有视频。 - 参数 : - `courseId`(必填):课程的ID。 - 响应 : - `200 OK`:返回响应体中的视频列表。 - `404 Not Found`:如果找不到指定的课程。 - `500 Internal Server Error`:在获取视频时发生错误。 ### 创建视频 - **端点**:`/api/courses/:courseId/videos` - **方法**:POST - **描述**:为指定课程创建新视频。 - 参数 : - `courseId`(必填):课程的ID。 - 请求体 : - `title`(必填):视频的标题。 - `description`(必填):视频的描述。 - `url`(必填):视频的URL。 - 响应 : - `201 Created`:返回响应体中的创建的视频。 - `404 Not Found`:如果找不到指定的课程。 - `500 Internal Server Error`:在创建视频时发生错误。 ### 获取单个视频 - **端点**:`/api/courses/:courseId/videos/:videoId` - **方法**:GET - **描述**:按照视频ID在指定课程中获取单个视频。 - 参数 : - `courseId`(必填):课程的ID。 - `videoId`(必填):视频的ID。 - 响应 : - `200 OK`:返回响应体中的视频。 - `404 Not Found`:如果找不到指定的课程或视频。 - `500 Internal Server Error`:在获取视频时发生错误。 ### 更新视频 - **端点**:`/api/courses/:courseId/videos/:videoId` - **方法**:PUT - **描述**:按照视频ID在指定课程中更新视频。 - 参数 : - `courseId`(必填):课程的ID。 - `videoId`(必填):视频的ID。 - 请求体 : - `title`(必填):视频的更新标题。 - `description`(必填):视频的更新描述。 - `url`(必填):视频的更新URL。 - 响应 : - `200 OK`:返回响应体中的更新后的视频。 - `404 Not Found`:如果找不到指定的课程或视频。 - `500 Internal Server Error`:在更新视频时发生错误。 ### 删除视频 - **端点**:`/api/courses/:courseId/videos/:videoId` - **方法**:DELETE - **描述**:按照视频ID在指定课程中删除视频。 - 参数 : - `courseId`(必填):课程的ID。 - `videoId`(必填 - ):视频的ID。 - 响应 : - `200 OK`:表示视频已成功删除。 - `404 Not Found`:如果找不到指定的课程或视频。 - `500 Internal Server Error`:在删除视频时发生错误。 ### 批量删除视频 - **端点**:`/api/courses/:courseId/videos/batch` - **方法**:DELETE - **描述**:按照视频ID列表在指定课程中批量删除视频。 - 参数 : - `courseId`(必填):课程的ID。 - 请求体 : - `videoIds`(必填):视频ID的数组。 - 响应 : - `200 OK`:表示视频批量删除成功。 - `404 Not Found`:如果找不到指定的课程或视频。 - `500 Internal Server Error`:在批量删除视频时发生错误。 # 文件上传接口 ## 接口描述 用于将文件上传到服务器。 ## 接口路径 ``` POST /api/upload ``` ## 请求参数 - `file` (multipart/form-data): 上传的文件数据。 ## 响应结果 - `file` (object): 上传成功的文件信息。 ## 请求示例 ``` POST /api/upload Content-Type: multipart/form-data Request Body: { "file": (file data) } ``` ## 成功响应示例 ``` HTTP/1.1 200 OK Content-Type: application/json Response Body: { "file": { "filename": "example.jpg", "path": "/uploads/example.jpg", "size": 1024 } } ``` ## 错误响应示例 ``` HTTP/1.1 500 Internal Server Error Content-Type: application/json Response Body: { "error": "文件上传失败。" } ```