"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SystemLogController = void 0; const systemLog_1 = require("../models/systemLog"); const helpers_1 = require("../utils/helpers"); class SystemLogController { static async getAllSystemLogs(req, res) { try { const page = Number((0, helpers_1.toString)(req.query.page)) || 1; const limit = Number((0, helpers_1.toString)(req.query.limit)) || 20; const offset = (page - 1) * limit; const systemLogs = await systemLog_1.SystemLogModel.getAll(limit, offset); const total = await systemLog_1.SystemLogModel.getCount(); res.status(200).json({ success: true, data: systemLogs, pagination: { page, limit, total, pages: Math.ceil(total / limit) } }); } catch (error) { console.error('获取系统日志列表失败:', error); res.status(500).json({ success: false, message: '获取系统日志列表失败', error: error instanceof Error ? error.message : '未知错误' }); } } static async getSystemLogById(req, res) { try { const id = (0, helpers_1.toString)(req.params.id); if (!id || isNaN(Number(id))) { res.status(400).json({ success: false, message: '无效的ID' }); return; } const systemLog = await systemLog_1.SystemLogModel.getById(Number(id)); if (!systemLog) { res.status(404).json({ success: false, message: '系统日志不存在' }); return; } res.status(200).json({ success: true, data: systemLog }); } catch (error) { console.error('获取系统日志失败:', error); res.status(500).json({ success: false, message: '获取系统日志失败', error: error instanceof Error ? error.message : '未知错误' }); } } static async getSystemLogsByLevel(req, res) { try { const level = (0, helpers_1.toString)(req.params.level); const page = Number((0, helpers_1.toString)(req.query.page)) || 1; const limit = Number((0, helpers_1.toString)(req.query.limit)) || 20; const offset = (page - 1) * limit; if (!level) { res.status(400).json({ success: false, message: '日志级别不能为空' }); return; } if (!['info', 'warn', 'error', 'debug'].includes(level)) { res.status(400).json({ success: false, message: '日志级别必须是info、warn、error或debug之一' }); return; } const systemLogs = await systemLog_1.SystemLogModel.getByLevel(level, limit, offset); const total = await systemLog_1.SystemLogModel.getCountByLevel(level); res.status(200).json({ success: true, data: systemLogs, pagination: { page, limit, total, pages: Math.ceil(total / limit) } }); } catch (error) { console.error('根据日志级别获取系统日志失败:', error); res.status(500).json({ success: false, message: '根据日志级别获取系统日志失败', error: error instanceof Error ? error.message : '未知错误' }); } } static async getSystemLogsBySource(req, res) { try { const source = (0, helpers_1.toString)(req.params.source); const page = Number((0, helpers_1.toString)(req.query.page)) || 1; const limit = Number((0, helpers_1.toString)(req.query.limit)) || 20; const offset = (page - 1) * limit; if (!source) { res.status(400).json({ success: false, message: '来源不能为空' }); return; } const systemLogs = await systemLog_1.SystemLogModel.getBySource(source, limit, offset); const total = await systemLog_1.SystemLogModel.getCountBySource(source); res.status(200).json({ success: true, data: systemLogs, pagination: { page, limit, total, pages: Math.ceil(total / limit) } }); } catch (error) { console.error('根据来源获取系统日志失败:', error); res.status(500).json({ success: false, message: '根据来源获取系统日志失败', error: error instanceof Error ? error.message : '未知错误' }); } } static async getSystemLogsByModule(req, res) { try { const module = (0, helpers_1.toString)(req.params.module); const page = Number((0, helpers_1.toString)(req.query.page)) || 1; const limit = Number((0, helpers_1.toString)(req.query.limit)) || 20; const offset = (page - 1) * limit; if (!module) { res.status(400).json({ success: false, message: '模块不能为空' }); return; } const systemLogs = await systemLog_1.SystemLogModel.getByModule(module, limit, offset); const total = await systemLog_1.SystemLogModel.getCountByModule ? await systemLog_1.SystemLogModel.getCountByModule(module) : 0; res.status(200).json({ success: true, data: systemLogs, pagination: { page, limit, total, pages: Math.ceil(total / limit) } }); } catch (error) { console.error('根据模块获取系统日志失败:', error); res.status(500).json({ success: false, message: '根据模块获取系统日志失败', error: error instanceof Error ? error.message : '未知错误' }); } } static async getSystemLogsByTimeRange(req, res) { try { const { start_time, end_time } = req.query; const page = Number(req.query.page) || 1; const limit = Number(req.query.limit) || 20; const offset = (page - 1) * limit; if (!start_time || !end_time) { res.status(400).json({ success: false, message: '开始时间和结束时间不能为空' }); return; } const startDate = new Date(start_time); const endDate = new Date(end_time); if (isNaN(startDate.getTime()) || isNaN(endDate.getTime())) { res.status(400).json({ success: false, message: '无效的时间格式' }); return; } if (startDate >= endDate) { res.status(400).json({ success: false, message: '开始时间必须早于结束时间' }); return; } const systemLogs = await systemLog_1.SystemLogModel.getByTimeRange(startDate, endDate, limit, offset); const total = await systemLog_1.SystemLogModel.getCountByTimeRange(startDate, endDate); res.status(200).json({ success: true, data: systemLogs, pagination: { page, limit, total, pages: Math.ceil(total / limit) } }); } catch (error) { console.error('根据时间范围获取系统日志失败:', error); res.status(500).json({ success: false, message: '根据时间范围获取系统日志失败', error: error instanceof Error ? error.message : '未知错误' }); } } static async getSystemLogsByMultipleConditions(req, res) { try { const { level, source, module, message, start_time, end_time } = req.query; const page = Number(req.query.page) || 1; const limit = Number(req.query.limit) || 20; const offset = (page - 1) * limit; const conditions = {}; if (level !== undefined && level !== '') { if (!['info', 'warn', 'error', 'debug'].includes(level)) { res.status(400).json({ success: false, message: '日志级别必须是info、warn、error或debug之一' }); return; } conditions.level = level; } if (source !== undefined && source !== '') conditions.source = source; if (module !== undefined && module !== '') conditions.module = module; if (message !== undefined && message !== '') conditions.message = message; let startDate, endDate; if (start_time && end_time) { startDate = new Date(start_time); endDate = new Date(end_time); if (isNaN(startDate.getTime()) || isNaN(endDate.getTime())) { res.status(400).json({ success: false, message: '无效的时间格式' }); return; } if (startDate >= endDate) { res.status(400).json({ success: false, message: '开始时间必须早于结束时间' }); return; } } const fuzzyFields = ['message', 'source', 'module']; const systemLogs = await systemLog_1.SystemLogModel.getByMultipleConditions(conditions, startDate, endDate, limit, offset, fuzzyFields); const total = await systemLog_1.SystemLogModel.getCountByMultipleConditions(conditions, startDate, endDate, fuzzyFields); res.status(200).json({ success: true, data: systemLogs, pagination: { page, limit, total, pages: Math.ceil(total / limit) } }); } catch (error) { console.error('根据多条件查询系统日志失败:', error); res.status(500).json({ success: false, message: '根据多条件查询系统日志失败', error: error instanceof Error ? error.message : '未知错误' }); } } static async getSystemLogStats(req, res) { try { const stats = await systemLog_1.SystemLogModel.getFullStats(); res.status(200).json({ success: true, data: stats, message: '获取系统日志统计信息成功' }); } catch (error) { console.error('获取系统日志统计信息失败:', error); res.status(500).json({ success: false, message: '获取系统日志统计信息失败', error: error instanceof Error ? error.message : '未知错误' }); } } static async getRecentSystemLogs(req, res) { try { const limit = Number(req.query.limit) || 10; if (limit > 100) { res.status(400).json({ success: false, message: '限制数量不能超过100' }); return; } const systemLogs = await systemLog_1.SystemLogModel.getRecent(limit); res.status(200).json({ success: true, data: systemLogs, message: '获取最近系统日志成功' }); } catch (error) { console.error('获取最近系统日志失败:', error); res.status(500).json({ success: false, message: '获取最近系统日志失败', error: error instanceof Error ? error.message : '未知错误' }); } } static async createSystemLog(req, res) { try { const { level, message, source, module, user_id, username, ip_address, details } = req.body; if (!level || !message || !source) { res.status(400).json({ success: false, message: '日志级别、消息和来源不能为空' }); return; } if (!['info', 'warn', 'error', 'debug'].includes(level)) { res.status(400).json({ success: false, message: '日志级别必须是info、warn、error或debug之一' }); return; } const systemLog = await systemLog_1.SystemLogModel.create({ level, message, source, module, user_id, username, ip_address, details }); res.status(201).json({ success: true, data: systemLog, message: '创建系统日志成功' }); } catch (error) { console.error('创建系统日志失败:', error); res.status(500).json({ success: false, message: '创建系统日志失败', error: error instanceof Error ? error.message : '未知错误' }); } } static async cleanupOldSystemLogs(req, res) { try { const { days } = req.query; let daysToDelete = days; if (!daysToDelete && req.body && req.body.days) { daysToDelete = req.body.days; } if (!daysToDelete || isNaN(Number(daysToDelete)) || Number(daysToDelete) < 1) { res.status(400).json({ success: false, message: '请提供有效的天数(大于0的数字)' }); return; } const deletedCount = await systemLog_1.SystemLogModel.cleanup(Number(daysToDelete)); res.status(200).json({ success: true, data: { deletedCount }, message: `成功清理${deletedCount}条${daysToDelete}天前的系统日志` }); } catch (error) { console.error('清理旧系统日志失败:', error); res.status(500).json({ success: false, message: '清理旧系统日志失败', error: error instanceof Error ? error.message : '未知错误' }); } } } exports.SystemLogController = SystemLogController; //# sourceMappingURL=systemLogController.js.map