complete new audit system
This commit is contained in:
+83
-3
@@ -32,6 +32,9 @@ var __importStar = (this && this.__importStar) || (function () {
|
||||
return result;
|
||||
};
|
||||
})();
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.getUsers = getUsers;
|
||||
exports.getUser = getUser;
|
||||
@@ -44,7 +47,9 @@ exports.createRole = createRole;
|
||||
exports.updateRole = updateRole;
|
||||
exports.deleteRole = deleteRole;
|
||||
exports.getPermissions = getPermissions;
|
||||
const prisma_js_1 = __importDefault(require("../lib/prisma.js"));
|
||||
const userService = __importStar(require("../services/user.service.js"));
|
||||
const audit_service_js_1 = require("../services/audit.service.js");
|
||||
// Users
|
||||
async function getUsers(req, res) {
|
||||
try {
|
||||
@@ -91,6 +96,11 @@ async function getUser(req, res) {
|
||||
async function createUser(req, res) {
|
||||
try {
|
||||
const user = await userService.createUser(req.body);
|
||||
await (0, audit_service_js_1.logChange)({
|
||||
req, action: 'CREATE', resourceType: 'User',
|
||||
resourceId: user.id.toString(),
|
||||
label: `Benutzer ${user.firstName} ${user.lastName} angelegt`,
|
||||
});
|
||||
res.status(201).json({ success: true, data: user });
|
||||
}
|
||||
catch (error) {
|
||||
@@ -102,7 +112,51 @@ async function createUser(req, res) {
|
||||
}
|
||||
async function updateUser(req, res) {
|
||||
try {
|
||||
const user = await userService.updateUser(parseInt(req.params.id), req.body);
|
||||
const userId = parseInt(req.params.id);
|
||||
const data = req.body;
|
||||
// Vorherigen Stand laden für Audit
|
||||
const before = await prisma_js_1.default.user.findUnique({ where: { id: userId } });
|
||||
const user = await userService.updateUser(userId, data);
|
||||
if (user) {
|
||||
// Audit: Geänderte Felder ermitteln und loggen
|
||||
if (before) {
|
||||
const changes = {};
|
||||
const fieldLabels = {
|
||||
email: 'E-Mail', firstName: 'Vorname', lastName: 'Nachname', isActive: 'Aktiv',
|
||||
};
|
||||
for (const [key, newVal] of Object.entries(data)) {
|
||||
if (['id', 'createdAt', 'updatedAt'].includes(key))
|
||||
continue;
|
||||
const oldVal = before[key];
|
||||
const norm = (v) => (v === null || v === undefined || v === '' ? null : v);
|
||||
if (JSON.stringify(norm(oldVal)) !== JSON.stringify(norm(newVal))) {
|
||||
const label = fieldLabels[key] || key;
|
||||
const formatVal = (v) => {
|
||||
if (v === null || v === undefined || v === '')
|
||||
return '-';
|
||||
if (typeof v === 'boolean')
|
||||
return v ? 'Ja' : 'Nein';
|
||||
return String(v);
|
||||
};
|
||||
changes[label] = { von: formatVal(oldVal), nach: formatVal(newVal) };
|
||||
}
|
||||
}
|
||||
const changeList = Object.entries(changes).map(([f, c]) => `${f}: ${c.von} → ${c.nach}`).join(', ');
|
||||
await (0, audit_service_js_1.logChange)({
|
||||
req, action: 'UPDATE', resourceType: 'User',
|
||||
resourceId: user.id.toString(),
|
||||
label: changeList ? `Benutzer ${user.firstName} ${user.lastName} aktualisiert: ${changeList}` : `Benutzer ${user.firstName} ${user.lastName} aktualisiert`,
|
||||
details: Object.keys(changes).length > 0 ? changes : undefined,
|
||||
});
|
||||
}
|
||||
else {
|
||||
await (0, audit_service_js_1.logChange)({
|
||||
req, action: 'UPDATE', resourceType: 'User',
|
||||
resourceId: user.id.toString(),
|
||||
label: `Benutzer ${user.firstName} ${user.lastName} aktualisiert`,
|
||||
});
|
||||
}
|
||||
}
|
||||
res.json({ success: true, data: user });
|
||||
}
|
||||
catch (error) {
|
||||
@@ -114,7 +168,14 @@ async function updateUser(req, res) {
|
||||
}
|
||||
async function deleteUser(req, res) {
|
||||
try {
|
||||
await userService.deleteUser(parseInt(req.params.id));
|
||||
const userId = parseInt(req.params.id);
|
||||
const userBefore = await userService.getUserById(userId);
|
||||
await userService.deleteUser(userId);
|
||||
await (0, audit_service_js_1.logChange)({
|
||||
req, action: 'DELETE', resourceType: 'User',
|
||||
resourceId: userId.toString(),
|
||||
label: `Benutzer ${userBefore?.firstName || ''} ${userBefore?.lastName || ''} gelöscht`,
|
||||
});
|
||||
res.json({ success: true, message: 'Benutzer gelöscht' });
|
||||
}
|
||||
catch (error) {
|
||||
@@ -159,6 +220,11 @@ async function getRole(req, res) {
|
||||
async function createRole(req, res) {
|
||||
try {
|
||||
const role = await userService.createRole(req.body);
|
||||
await (0, audit_service_js_1.logChange)({
|
||||
req, action: 'CREATE', resourceType: 'Role',
|
||||
resourceId: role.id.toString(),
|
||||
label: `Rolle ${role.name} angelegt`,
|
||||
});
|
||||
res.status(201).json({ success: true, data: role });
|
||||
}
|
||||
catch (error) {
|
||||
@@ -171,6 +237,13 @@ async function createRole(req, res) {
|
||||
async function updateRole(req, res) {
|
||||
try {
|
||||
const role = await userService.updateRole(parseInt(req.params.id), req.body);
|
||||
if (role) {
|
||||
await (0, audit_service_js_1.logChange)({
|
||||
req, action: 'UPDATE', resourceType: 'Role',
|
||||
resourceId: role.id.toString(),
|
||||
label: `Rolle ${role.name} aktualisiert`,
|
||||
});
|
||||
}
|
||||
res.json({ success: true, data: role });
|
||||
}
|
||||
catch (error) {
|
||||
@@ -182,7 +255,14 @@ async function updateRole(req, res) {
|
||||
}
|
||||
async function deleteRole(req, res) {
|
||||
try {
|
||||
await userService.deleteRole(parseInt(req.params.id));
|
||||
const roleId = parseInt(req.params.id);
|
||||
const role = await userService.getRoleById(roleId);
|
||||
await userService.deleteRole(roleId);
|
||||
await (0, audit_service_js_1.logChange)({
|
||||
req, action: 'DELETE', resourceType: 'Role',
|
||||
resourceId: roleId.toString(),
|
||||
label: `Rolle ${role?.name || roleId} gelöscht`,
|
||||
});
|
||||
res.json({ success: true, message: 'Rolle gelöscht' });
|
||||
}
|
||||
catch (error) {
|
||||
|
||||
Reference in New Issue
Block a user