Spaces:
Runtime error
Runtime error
File size: 4,334 Bytes
720932b 2c97468 4e912ee 5256dce 720932b b5dcc75 331064e b5dcc75 331064e b5dcc75 331064e b5dcc75 331064e b5dcc75 75f9a22 b5dcc75 75f9a22 b5dcc75 350299f 720932b 86a5fc6 720932b b5dcc75 720932b 5256dce 720932b 5968265 720932b 5968265 720932b 5968265 720932b d747060 720932b 350299f d747060 350299f b52eb95 4e912ee d747060 4e912ee b52eb95 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
import { Request, Response } from 'express';
import { Op, FindOptions } from 'sequelize';
import AuditLog from '../models/auditLogs';
import { logger } from '../utils/logger';
import { AuditLogInterface } from '../shared/interfaces/auditLog.interface';
import User from '../models/users';
const buildAuditLogWhereClause = (filter: Record<string, any>): any => {
const whereClause: any = {};
if (filter) {
if (filter.date) {
const date = new Date(filter.date);
if (!isNaN(date.getTime())) {
const startOfDay = new Date(date);
startOfDay.setHours(0, 0, 0, 0);
const endOfDay = new Date(date);
endOfDay.setHours(23, 59, 59, 999);
whereClause.created_at = {
[Op.gte]: startOfDay,
[Op.lte]: endOfDay
};
}
}
if (filter.action_by) {
whereClause.action_by = { [Op.eq]: filter.action_by };
}
if (filter.invoice_id) {
whereClause.invoice_id = { [Op.eq]: filter.invoice_id };
}
if (filter.created_before) {
const beforeDate = new Date(filter.created_before);
if (!isNaN(beforeDate.getTime())) {
whereClause.created_at = { ...whereClause.created_at, [Op.lte]: beforeDate };
}
}
if (filter.created_after) {
const afterDate = new Date(filter.created_after);
if (!isNaN(afterDate.getTime())) {
whereClause.created_at = { ...whereClause.created_at, [Op.gte]: afterDate };
}
}
}
return whereClause;
};
const getAuditLogs = async (req: Request, res: Response) => {
try {
const { sort_by, sort_order, page, limit } = req.query;
const filter = req.query.filter as Record<string, any>;
const allowedSortColumns = ['id','action_by', 'invoice_id', 'created_at']
const whereClause = buildAuditLogWhereClause(filter);
const currentPage = parseInt(page as string) || 1;
const pageSize = parseInt(limit as string) || 10;
const options: FindOptions = {
where: whereClause,
limit: pageSize,
offset: (currentPage - 1) * pageSize,
order: []
};
if (sort_by && allowedSortColumns.includes(sort_by as string)) {
options.order = [[sort_by as string, sort_order === 'desc' ? 'DESC' : 'ASC']];
} else {
options.order = [['id', 'ASC']];
}
const [auditLogs, totalAuditLogs] = await Promise.all([
AuditLog.findAll({...options, include: [
{ model: User,
as: 'actionBy',
attributes: { exclude: ['password']}
},
]}),
AuditLog.count({ where: whereClause }),
]);
const responseData = {
page: currentPage,
limit: pageSize,
total: totalAuditLogs,
data: auditLogs
};
return res.status(200).json(responseData);
} catch (error) {
logger.error('Error fetching audit logs:');
logger.error(error);
return res.status(500).json({ error: 'Error fetching audit logs.' });
}
};
const getAuditLogById = async (req: Request, res: Response) => {
try {
const { id } = req.params;
const auditLog = await AuditLog.findByPk(id);
if (!auditLog) {
return res.status(404).json({ error: 'Audit log not found.' });
}
return res.status(200).json(auditLog);
} catch (error) {
logger.error('Error fetching audit log:');
logger.error(error);
return res.status(500).json({ error: 'Error fetching audit log.' });
}
}
const createAuditLog = async (auditLogData: AuditLogInterface) => {
try {
const newAuditLog = await AuditLog.create({
action_by: auditLogData.action_by,
invoice_id: auditLogData.invoice_id,
action: auditLogData.action,
details: auditLogData.details
});
} catch (error) {
logger.error('Error creating audit log:');
logger.error(error);
}
};
export { getAuditLogs, getAuditLogById, createAuditLog }
|