/** * 操作日志集成示例 * @file operation-log-integration.js * @description 展示如何在现有控制器中集成操作日志记录 */ const { createOperationLogger } = require('../middleware/operationLogger'); // 示例1: 用户管理控制器集成操作日志 const userControllerWithLogs = { // 创建用户 - 集成操作日志 createUser: [ // 操作日志中间件 createOperationLogger({ moduleName: '用户管理', tableName: 'users', getRecordId: (req, res) => res.body?.data?.id || null, getOperationDesc: (req, res) => `创建用户: ${req.body.username}`, getOldData: () => null, getNewData: (req, res) => res.body?.data || null }), // 原有的创建用户逻辑 async (req, res) => { try { // 创建用户逻辑 const user = await User.create(req.body); res.json({ success: true, data: user, message: '用户创建成功' }); } catch (error) { res.status(500).json({ success: false, message: '用户创建失败', error: error.message }); } } ], // 更新用户 - 集成操作日志 updateUser: [ createOperationLogger({ moduleName: '用户管理', tableName: 'users', getRecordId: (req, res) => req.params.id, getOperationDesc: (req, res) => `更新用户: ${req.body.username || req.params.id}`, getOldData: async (req, res) => { // 获取更新前的数据 const oldUser = await User.findByPk(req.params.id); return oldUser ? oldUser.toJSON() : null; }, getNewData: (req, res) => res.body?.data || req.body }), async (req, res) => { try { const user = await User.findByPk(req.params.id); if (!user) { return res.status(404).json({ success: false, message: '用户不存在' }); } await user.update(req.body); res.json({ success: true, data: user, message: '用户更新成功' }); } catch (error) { res.status(500).json({ success: false, message: '用户更新失败', error: error.message }); } } ], // 删除用户 - 集成操作日志 deleteUser: [ createOperationLogger({ moduleName: '用户管理', tableName: 'users', getRecordId: (req, res) => req.params.id, getOperationDesc: (req, res) => `删除用户: ${req.params.id}`, getOldData: async (req, res) => { // 获取删除前的数据 const oldUser = await User.findByPk(req.params.id); return oldUser ? oldUser.toJSON() : null; }, getNewData: () => null }), async (req, res) => { try { const user = await User.findByPk(req.params.id); if (!user) { return res.status(404).json({ success: false, message: '用户不存在' }); } await user.destroy(); res.json({ success: true, message: '用户删除成功' }); } catch (error) { res.status(500).json({ success: false, message: '用户删除失败', error: error.message }); } ] }; // 示例2: 农场管理控制器集成操作日志 const farmControllerWithLogs = { // 创建农场 - 集成操作日志 createFarm: [ createOperationLogger({ moduleName: '农场管理', tableName: 'farms', getRecordId: (req, res) => res.body?.data?.id || null, getOperationDesc: (req, res) => `创建农场: ${req.body.name}`, getOldData: () => null, getNewData: (req, res) => res.body?.data || null }), async (req, res) => { try { const farm = await Farm.create(req.body); res.json({ success: true, data: farm, message: '农场创建成功' }); } catch (error) { res.status(500).json({ success: false, message: '农场创建失败', error: error.message }); } } ] }; // 示例3: 批量操作日志记录 const batchOperationLogger = createBatchOperationLogger([ { moduleName: '用户管理', tableName: 'users', getRecordId: (req, res) => req.params.id, getOperationDesc: (req, res) => `批量操作用户: ${req.params.id}`, getOldData: () => null, getNewData: (req, res) => res.body }, { moduleName: '权限管理', tableName: 'user_roles', getRecordId: (req, res) => req.params.id, getOperationDesc: (req, res) => `更新用户角色: ${req.params.id}`, getOldData: () => null, getNewData: (req, res) => req.body.roles } ]); // 示例4: 在Express路由中使用 const express = require('express'); const router = express.Router(); // 用户路由 router.post('/users', createOperationLogger({ moduleName: '用户管理', tableName: 'users', getRecordId: (req, res) => res.body?.data?.id || null, getOperationDesc: (req, res) => `创建用户: ${req.body.username}`, getOldData: () => null, getNewData: (req, res) => res.body?.data || null }), userControllerWithLogs.createUser[1] // 实际的控制器函数 ); router.put('/users/:id', createOperationLogger({ moduleName: '用户管理', tableName: 'users', getRecordId: (req, res) => req.params.id, getOperationDesc: (req, res) => `更新用户: ${req.body.username || req.params.id}`, getOldData: async (req, res) => { const oldUser = await User.findByPk(req.params.id); return oldUser ? oldUser.toJSON() : null; }, getNewData: (req, res) => res.body?.data || req.body }), userControllerWithLogs.updateUser[1] ); router.delete('/users/:id', createOperationLogger({ moduleName: '用户管理', tableName: 'users', getRecordId: (req, res) => req.params.id, getOperationDesc: (req, res) => `删除用户: ${req.params.id}`, getOldData: async (req, res) => { const oldUser = await User.findByPk(req.params.id); return oldUser ? oldUser.toJSON() : null; }, getNewData: () => null }), userControllerWithLogs.deleteUser[1] ); module.exports = { userControllerWithLogs, farmControllerWithLogs, batchOperationLogger, router }; /** * 使用说明: * * 1. 在需要记录操作日志的控制器方法前添加 createOperationLogger 中间件 * 2. 配置中间件参数: * - moduleName: 模块名称(如:用户管理、农场管理) * - tableName: 数据表名(如:users、farms) * - getRecordId: 获取记录ID的函数 * - getOperationDesc: 获取操作描述的函数 * - getOldData: 获取操作前数据的函数(可选) * - getNewData: 获取操作后数据的函数(可选) * * 3. 操作日志会自动记录以下信息: * - 操作用户信息(从req.user获取) * - 操作类型(CREATE/UPDATE/DELETE) * - 操作描述 * - 数据变化(操作前后的数据) * - 请求信息(IP、URL、方法等) * - 响应信息(状态码、执行时间等) * * 4. 对于批量操作,可以使用 createBatchOperationLogger 记录多个操作 */