order-management 0.0.96 → 0.0.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/admin/index.js +2675 -626
- package/.medusa/server/src/admin/index.mjs +2679 -630
- package/.medusa/server/src/api/admin/deleted-records-audit/[id]/route.js +30 -0
- package/.medusa/server/src/api/admin/deleted-records-audit/route.js +48 -0
- package/.medusa/server/src/api/admin/deleted-records-audit/stats/route.js +27 -0
- package/.medusa/server/src/api/admin/deleted-records-audit/validators.js +57 -0
- package/.medusa/server/src/modules/deleted-records-audit/audited-tables.js +257 -0
- package/.medusa/server/src/modules/deleted-records-audit/index.js +14 -0
- package/.medusa/server/src/modules/deleted-records-audit/migrations/Migration20261008120000.js +81 -0
- package/.medusa/server/src/modules/deleted-records-audit/models/deleted-records-audit.js +15 -0
- package/.medusa/server/src/modules/deleted-records-audit/service.js +164 -0
- package/.medusa/server/src/modules/deleted-records-audit/types.js +3 -0
- package/README.md +78 -0
- package/package.json +1 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const deleted_records_audit_1 = require("../../../../modules/deleted-records-audit");
|
|
5
|
+
/**
|
|
6
|
+
* GET /admin/deleted-records-audit/:id
|
|
7
|
+
* Single audit entry including the full `old_data` snapshot.
|
|
8
|
+
*/
|
|
9
|
+
const GET = async (req, res) => {
|
|
10
|
+
const id = typeof req.params?.id === "string" ? req.params.id.trim() : "";
|
|
11
|
+
if (!id) {
|
|
12
|
+
res.status(400).json({ message: "Audit id is required" });
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
const service = req.scope.resolve(deleted_records_audit_1.DELETED_RECORDS_AUDIT_MODULE);
|
|
17
|
+
const audit = await service.retrieveAudit(id);
|
|
18
|
+
if (!audit) {
|
|
19
|
+
res.status(404).json({ message: `Deleted record audit ${id} not found` });
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
res.status(200).json({ audit });
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
const message = error instanceof Error ? error.message : "Failed to load deleted record";
|
|
26
|
+
res.status(500).json({ message });
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
exports.GET = GET;
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2RlbGV0ZWQtcmVjb3Jkcy1hdWRpdC9baWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFGQUF3RjtBQUl4Rjs7O0dBR0c7QUFDSSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDbkUsTUFBTSxFQUFFLEdBQUcsT0FBTyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDekUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFBO1FBQ3pELE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQW1DLG9EQUE0QixDQUFDLENBQUE7UUFDakcsTUFBTSxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzdDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFlBQVksRUFBRSxDQUFDLENBQUE7WUFDekUsT0FBTTtRQUNSLENBQUM7UUFDRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBNkMsQ0FBQyxDQUFBO0lBQzVFLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxPQUFPLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUE7UUFDeEYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ25DLENBQUM7QUFDSCxDQUFDLENBQUE7QUFuQlksUUFBQSxHQUFHLE9BbUJmIn0=
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const deleted_records_audit_1 = require("../../../modules/deleted-records-audit");
|
|
5
|
+
const validators_1 = require("./validators");
|
|
6
|
+
/**
|
|
7
|
+
* GET /admin/deleted-records-audit
|
|
8
|
+
* Paginated hard-delete audit entries, newest first. `old_data` is only returned by the detail route.
|
|
9
|
+
*/
|
|
10
|
+
const GET = async (req, res) => {
|
|
11
|
+
const parsed = validators_1.AdminListDeletedRecordAuditsSchema.safeParse(req.query ?? {});
|
|
12
|
+
if (!parsed.success) {
|
|
13
|
+
res.status(400).json({
|
|
14
|
+
message: "Invalid filters",
|
|
15
|
+
errors: parsed.error.issues.map((issue) => ({
|
|
16
|
+
path: issue.path.join("."),
|
|
17
|
+
message: issue.message,
|
|
18
|
+
})),
|
|
19
|
+
});
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const query = parsed.data;
|
|
23
|
+
try {
|
|
24
|
+
const service = req.scope.resolve(deleted_records_audit_1.DELETED_RECORDS_AUDIT_MODULE);
|
|
25
|
+
const { audits, count } = await service.listAudits({
|
|
26
|
+
limit: query.limit,
|
|
27
|
+
offset: query.offset,
|
|
28
|
+
q: query.q,
|
|
29
|
+
table_names: (0, validators_1.resolveTableNames)(query),
|
|
30
|
+
date_from: query.date_from,
|
|
31
|
+
date_to: query.date_to,
|
|
32
|
+
source: query.source,
|
|
33
|
+
deleted_by: query.deleted_by,
|
|
34
|
+
});
|
|
35
|
+
res.status(200).json({
|
|
36
|
+
audits,
|
|
37
|
+
count,
|
|
38
|
+
limit: query.limit,
|
|
39
|
+
offset: query.offset,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
const message = error instanceof Error ? error.message : "Failed to list deleted records";
|
|
44
|
+
res.status(500).json({ message });
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
exports.GET = GET;
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2RlbGV0ZWQtcmVjb3Jkcy1hdWRpdC9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxrRkFBcUY7QUFHckYsNkNBQW9GO0FBU3BGOzs7R0FHRztBQUNJLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLE1BQU0sR0FBRywrQ0FBa0MsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUM1RSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztnQkFDMUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2FBQ3ZCLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQTtRQUNGLE9BQU07SUFDUixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQTtJQUN6QixJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBbUMsb0RBQTRCLENBQUMsQ0FBQTtRQUNqRyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUNqRCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3BCLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNWLFdBQVcsRUFBRSxJQUFBLDhCQUFpQixFQUFDLEtBQUssQ0FBQztZQUNyQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7U0FDN0IsQ0FBQyxDQUFBO1FBQ0YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsTUFBTTtZQUNOLEtBQUs7WUFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1NBQ0UsQ0FBQyxDQUFBO0lBQzNCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxPQUFPLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0NBQWdDLENBQUE7UUFDekYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ25DLENBQUM7QUFDSCxDQUFDLENBQUE7QUFwQ1ksUUFBQSxHQUFHLE9Bb0NmIn0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const deleted_records_audit_1 = require("../../../../modules/deleted-records-audit");
|
|
5
|
+
const validators_1 = require("../validators");
|
|
6
|
+
/**
|
|
7
|
+
* GET /admin/deleted-records-audit/stats
|
|
8
|
+
* All-time aggregates for the summary cards plus distinct source / deleted_by values for filters.
|
|
9
|
+
*/
|
|
10
|
+
const GET = async (req, res) => {
|
|
11
|
+
const parsed = validators_1.AdminDeletedRecordAuditStatsSchema.safeParse(req.query ?? {});
|
|
12
|
+
if (!parsed.success) {
|
|
13
|
+
res.status(400).json({ message: "Invalid today_start" });
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const service = req.scope.resolve(deleted_records_audit_1.DELETED_RECORDS_AUDIT_MODULE);
|
|
18
|
+
const stats = await service.getStats({ today_start: parsed.data.today_start });
|
|
19
|
+
res.status(200).json({ stats });
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
const message = error instanceof Error ? error.message : "Failed to load deleted records stats";
|
|
23
|
+
res.status(500).json({ message });
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
exports.GET = GET;
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2RlbGV0ZWQtcmVjb3Jkcy1hdWRpdC9zdGF0cy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxRkFBd0Y7QUFHeEYsOENBQWtFO0FBRWxFOzs7R0FHRztBQUNJLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLE1BQU0sR0FBRywrQ0FBa0MsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUM1RSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FBQTtRQUN4RCxPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFtQyxvREFBNEIsQ0FBQyxDQUFBO1FBQ2pHLE1BQU0sS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUE7UUFDOUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQWtELENBQUMsQ0FBQTtJQUNqRixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sT0FBTyxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHNDQUFzQyxDQUFBO1FBQy9GLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0FBQ0gsQ0FBQyxDQUFBO0FBZlksUUFBQSxHQUFHLE9BZWYifQ==
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AdminDeletedRecordAuditStatsSchema = exports.AdminListDeletedRecordAuditsSchema = void 0;
|
|
4
|
+
exports.resolveTableNames = resolveTableNames;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const optionalDate = zod_1.z
|
|
7
|
+
.string()
|
|
8
|
+
.trim()
|
|
9
|
+
.optional()
|
|
10
|
+
.transform((value, ctx) => {
|
|
11
|
+
if (!value)
|
|
12
|
+
return undefined;
|
|
13
|
+
const date = new Date(value);
|
|
14
|
+
if (Number.isNaN(date.getTime())) {
|
|
15
|
+
ctx.addIssue({ code: "custom", message: `Invalid date: ${value}` });
|
|
16
|
+
return zod_1.z.NEVER;
|
|
17
|
+
}
|
|
18
|
+
return date;
|
|
19
|
+
});
|
|
20
|
+
const optionalTrimmed = zod_1.z
|
|
21
|
+
.string()
|
|
22
|
+
.optional()
|
|
23
|
+
.transform((value) => {
|
|
24
|
+
const trimmed = value?.trim();
|
|
25
|
+
return trimmed ? trimmed : undefined;
|
|
26
|
+
});
|
|
27
|
+
const TABLE_NAME_PATTERN = /^[a-z0-9_]+$/;
|
|
28
|
+
exports.AdminListDeletedRecordAuditsSchema = zod_1.z.object({
|
|
29
|
+
limit: zod_1.z.coerce.number().int().positive().max(100).default(50),
|
|
30
|
+
offset: zod_1.z.coerce.number().int().nonnegative().default(0),
|
|
31
|
+
q: optionalTrimmed,
|
|
32
|
+
table_name: optionalTrimmed,
|
|
33
|
+
/** Comma-separated list, used when filtering by a whole category. */
|
|
34
|
+
table_names: optionalTrimmed,
|
|
35
|
+
date_from: optionalDate,
|
|
36
|
+
date_to: optionalDate,
|
|
37
|
+
source: optionalTrimmed,
|
|
38
|
+
deleted_by: optionalTrimmed,
|
|
39
|
+
});
|
|
40
|
+
function resolveTableNames(query) {
|
|
41
|
+
const names = new Set();
|
|
42
|
+
if (query.table_name)
|
|
43
|
+
names.add(query.table_name);
|
|
44
|
+
if (query.table_names) {
|
|
45
|
+
for (const part of query.table_names.split(",")) {
|
|
46
|
+
const name = part.trim();
|
|
47
|
+
if (name)
|
|
48
|
+
names.add(name);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const valid = [...names].filter((name) => TABLE_NAME_PATTERN.test(name));
|
|
52
|
+
return valid.length ? valid : undefined;
|
|
53
|
+
}
|
|
54
|
+
exports.AdminDeletedRecordAuditStatsSchema = zod_1.z.object({
|
|
55
|
+
today_start: optionalDate,
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vZGVsZXRlZC1yZWNvcmRzLWF1ZGl0L3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBeUNBLDhDQVdDO0FBcERELDZCQUF1QjtBQUV2QixNQUFNLFlBQVksR0FBRyxPQUFDO0tBQ25CLE1BQU0sRUFBRTtLQUNSLElBQUksRUFBRTtLQUNOLFFBQVEsRUFBRTtLQUNWLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtJQUN4QixJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sU0FBUyxDQUFBO0lBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzVCLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ25FLE9BQU8sT0FBQyxDQUFDLEtBQUssQ0FBQTtJQUNoQixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDLENBQUMsQ0FBQTtBQUVKLE1BQU0sZUFBZSxHQUFHLE9BQUM7S0FDdEIsTUFBTSxFQUFFO0tBQ1IsUUFBUSxFQUFFO0tBQ1YsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDbkIsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFBO0lBQzdCLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtBQUN0QyxDQUFDLENBQUMsQ0FBQTtBQUVKLE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxDQUFBO0FBRTVCLFFBQUEsa0NBQWtDLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN6RCxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUM5RCxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUMsRUFBRSxlQUFlO0lBQ2xCLFVBQVUsRUFBRSxlQUFlO0lBQzNCLHFFQUFxRTtJQUNyRSxXQUFXLEVBQUUsZUFBZTtJQUM1QixTQUFTLEVBQUUsWUFBWTtJQUN2QixPQUFPLEVBQUUsWUFBWTtJQUNyQixNQUFNLEVBQUUsZUFBZTtJQUN2QixVQUFVLEVBQUUsZUFBZTtDQUM1QixDQUFDLENBQUE7QUFJRixTQUFnQixpQkFBaUIsQ0FBQyxLQUF3QztJQUN4RSxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFBO0lBQy9CLElBQUksS0FBSyxDQUFDLFVBQVU7UUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNqRCxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0QixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBO1lBQ3hCLElBQUksSUFBSTtnQkFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDeEUsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtBQUN6QyxDQUFDO0FBRVksUUFBQSxrQ0FBa0MsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3pELFdBQVcsRUFBRSxZQUFZO0NBQzFCLENBQUMsQ0FBQSJ9
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AUDIT_TRIGGER_FUNCTION = exports.AUDIT_TABLE_NAME = exports.AUDITED_TABLE_NAMES = void 0;
|
|
4
|
+
exports.auditTriggerName = auditTriggerName;
|
|
5
|
+
exports.buildCreateAuditTriggerSql = buildCreateAuditTriggerSql;
|
|
6
|
+
exports.buildDropAuditTriggerSql = buildDropAuditTriggerSql;
|
|
7
|
+
/**
|
|
8
|
+
* Tables that receive a BEFORE DELETE audit trigger.
|
|
9
|
+
* Tables missing from the database are skipped at migration time.
|
|
10
|
+
* Never add `deleted_records_audit` here (the trigger would recurse).
|
|
11
|
+
*/
|
|
12
|
+
exports.AUDITED_TABLE_NAMES = [
|
|
13
|
+
"account_deletion_request",
|
|
14
|
+
"account_holder",
|
|
15
|
+
"api_key",
|
|
16
|
+
"application_method_buy_rules",
|
|
17
|
+
"application_method_target_rules",
|
|
18
|
+
"auth_identity",
|
|
19
|
+
"auth_mfa_factor",
|
|
20
|
+
"auth_mfa_recovery_code",
|
|
21
|
+
"auth_password_reset_token",
|
|
22
|
+
"auth_verification",
|
|
23
|
+
"cancel_order_reason_mapping",
|
|
24
|
+
"capture",
|
|
25
|
+
"cart",
|
|
26
|
+
"cart_address",
|
|
27
|
+
"cart_line_item",
|
|
28
|
+
"cart_line_item_adjustment",
|
|
29
|
+
"cart_line_item_tax_line",
|
|
30
|
+
"cart_payment_collection",
|
|
31
|
+
"cart_promotion",
|
|
32
|
+
"cart_shipping_method",
|
|
33
|
+
"cart_shipping_method_adjustment",
|
|
34
|
+
"cart_shipping_method_tax_line",
|
|
35
|
+
"contact_email_subscription",
|
|
36
|
+
"contact_request",
|
|
37
|
+
"contact_request_comment",
|
|
38
|
+
"credit_line",
|
|
39
|
+
"currency",
|
|
40
|
+
"customer",
|
|
41
|
+
"customer_account_holder",
|
|
42
|
+
"customer_address",
|
|
43
|
+
"customer_group",
|
|
44
|
+
"customer_group_customer",
|
|
45
|
+
"dynamic_config_value",
|
|
46
|
+
"fulfillment",
|
|
47
|
+
"fulfillment_address",
|
|
48
|
+
"fulfillment_item",
|
|
49
|
+
"fulfillment_label",
|
|
50
|
+
"fulfillment_provider",
|
|
51
|
+
"fulfillment_set",
|
|
52
|
+
"geo_zone",
|
|
53
|
+
"image",
|
|
54
|
+
"inventory_count_item",
|
|
55
|
+
"inventory_count_session",
|
|
56
|
+
"inventory_item",
|
|
57
|
+
"inventory_level",
|
|
58
|
+
"inventory_movement",
|
|
59
|
+
"inventory_purchase",
|
|
60
|
+
"inventory_purchase_attachment",
|
|
61
|
+
"inventory_purchase_audit_event",
|
|
62
|
+
"inventory_purchase_batch",
|
|
63
|
+
"inventory_purchase_line_item",
|
|
64
|
+
"invite",
|
|
65
|
+
"invite_rbac_role",
|
|
66
|
+
"invoice",
|
|
67
|
+
"invoice_sequence",
|
|
68
|
+
"layout_configuration",
|
|
69
|
+
"link_module_migrations",
|
|
70
|
+
"location_fulfillment_provider",
|
|
71
|
+
"location_fulfillment_set",
|
|
72
|
+
"loyalty_gift_card",
|
|
73
|
+
"mikro_orm_migrations",
|
|
74
|
+
"notification",
|
|
75
|
+
"notification_provider",
|
|
76
|
+
"notification_tokens",
|
|
77
|
+
"order",
|
|
78
|
+
"order_address",
|
|
79
|
+
"order_cart",
|
|
80
|
+
"order_change",
|
|
81
|
+
"order_change_action",
|
|
82
|
+
"order_claim",
|
|
83
|
+
"order_claim_item",
|
|
84
|
+
"order_claim_item_image",
|
|
85
|
+
"order_credit_line",
|
|
86
|
+
"order_exchange",
|
|
87
|
+
"order_exchange_item",
|
|
88
|
+
"order_fulfillment",
|
|
89
|
+
"order_item",
|
|
90
|
+
"order_line_item",
|
|
91
|
+
"order_line_item_adjustment",
|
|
92
|
+
"order_line_item_tax_line",
|
|
93
|
+
"order_payment_collection",
|
|
94
|
+
"order_promotion",
|
|
95
|
+
"order_shipping",
|
|
96
|
+
"order_shipping_method",
|
|
97
|
+
"order_shipping_method_adjustment",
|
|
98
|
+
"order_shipping_method_tax_line",
|
|
99
|
+
"order_summary",
|
|
100
|
+
"order_transaction",
|
|
101
|
+
"otp_verification",
|
|
102
|
+
"payment",
|
|
103
|
+
"payment_collection",
|
|
104
|
+
"payment_collection_payment_providers",
|
|
105
|
+
"payment_detail",
|
|
106
|
+
"payment_provider",
|
|
107
|
+
"payment_session",
|
|
108
|
+
"payout_request",
|
|
109
|
+
"price",
|
|
110
|
+
"price_list",
|
|
111
|
+
"price_list_rule",
|
|
112
|
+
"price_preference",
|
|
113
|
+
"price_rule",
|
|
114
|
+
"price_set",
|
|
115
|
+
"product",
|
|
116
|
+
"product_category",
|
|
117
|
+
"product_category_product",
|
|
118
|
+
"product_collection",
|
|
119
|
+
"product_display_priority",
|
|
120
|
+
"product_option",
|
|
121
|
+
"product_option_value",
|
|
122
|
+
"product_product_option",
|
|
123
|
+
"product_product_option_value",
|
|
124
|
+
"product_sales_channel",
|
|
125
|
+
"product_shipping_profile",
|
|
126
|
+
"product_tag",
|
|
127
|
+
"product_tags",
|
|
128
|
+
"product_type",
|
|
129
|
+
"product_variant",
|
|
130
|
+
"product_variant_inventory_item",
|
|
131
|
+
"product_variant_option",
|
|
132
|
+
"product_variant_price_set",
|
|
133
|
+
"product_variant_product_image",
|
|
134
|
+
"product_view",
|
|
135
|
+
"promotion",
|
|
136
|
+
"promotion_application_method",
|
|
137
|
+
"promotion_campaign",
|
|
138
|
+
"promotion_campaign_budget",
|
|
139
|
+
"promotion_campaign_budget_usage",
|
|
140
|
+
"promotion_promotion_rule",
|
|
141
|
+
"promotion_rule",
|
|
142
|
+
"promotion_rule_value",
|
|
143
|
+
"property_label",
|
|
144
|
+
"provider_identity",
|
|
145
|
+
"publishable_api_key_sales_channel",
|
|
146
|
+
"purchase_supplier",
|
|
147
|
+
"referral_link",
|
|
148
|
+
"referral_reward",
|
|
149
|
+
"refund",
|
|
150
|
+
"refund_payment_mapping",
|
|
151
|
+
"refund_reason",
|
|
152
|
+
"region",
|
|
153
|
+
"region_country",
|
|
154
|
+
"region_payment_provider",
|
|
155
|
+
"reservation_item",
|
|
156
|
+
"return",
|
|
157
|
+
"return_fulfillment",
|
|
158
|
+
"return_item",
|
|
159
|
+
"return_reason",
|
|
160
|
+
"review",
|
|
161
|
+
"sales_channel",
|
|
162
|
+
"sales_channel_stock_location",
|
|
163
|
+
"script_migrations",
|
|
164
|
+
"search_index",
|
|
165
|
+
"search_index_sync",
|
|
166
|
+
"search_index_version",
|
|
167
|
+
"search_postgres_index",
|
|
168
|
+
"service_zone",
|
|
169
|
+
"shipment_tracking_event",
|
|
170
|
+
"shipping_option",
|
|
171
|
+
"shipping_option_price_set",
|
|
172
|
+
"shipping_option_rule",
|
|
173
|
+
"shipping_option_type",
|
|
174
|
+
"shipping_profile",
|
|
175
|
+
"skip_merge_cart",
|
|
176
|
+
"stock_location",
|
|
177
|
+
"stock_location_address",
|
|
178
|
+
"store",
|
|
179
|
+
"store_credit_account",
|
|
180
|
+
"store_credit_account_transaction",
|
|
181
|
+
"store_currency",
|
|
182
|
+
"store_locale",
|
|
183
|
+
"tax_provider",
|
|
184
|
+
"tax_rate",
|
|
185
|
+
"tax_rate_rule",
|
|
186
|
+
"tax_region",
|
|
187
|
+
"telegram_config",
|
|
188
|
+
"telegram_notification_log",
|
|
189
|
+
"user",
|
|
190
|
+
"user_preference",
|
|
191
|
+
"user_rbac_role",
|
|
192
|
+
"view_configuration",
|
|
193
|
+
"wallet_account",
|
|
194
|
+
"wallet_credit_lot",
|
|
195
|
+
"wallet_gift_card",
|
|
196
|
+
"wallet_hold",
|
|
197
|
+
"wallet_ledger_entry",
|
|
198
|
+
"wallet_rate_limit",
|
|
199
|
+
"wallet_refund_intent",
|
|
200
|
+
"wallet_top_up_request",
|
|
201
|
+
"wishlist",
|
|
202
|
+
"workflow_execution",
|
|
203
|
+
];
|
|
204
|
+
exports.AUDIT_TABLE_NAME = "deleted_records_audit";
|
|
205
|
+
exports.AUDIT_TRIGGER_FUNCTION = "om_audit_row_delete";
|
|
206
|
+
const TRIGGER_PREFIX = "om_ad_";
|
|
207
|
+
const PG_IDENTIFIER_MAX = 63;
|
|
208
|
+
/** Deterministic trigger name that stays within Postgres' 63-byte identifier limit. */
|
|
209
|
+
function auditTriggerName(tableName) {
|
|
210
|
+
const safe = tableName.replace(/[^a-z0-9_]/gi, "_").toLowerCase();
|
|
211
|
+
const full = `${TRIGGER_PREFIX}${safe}`;
|
|
212
|
+
if (full.length <= PG_IDENTIFIER_MAX)
|
|
213
|
+
return full;
|
|
214
|
+
let hash = 0;
|
|
215
|
+
for (const ch of safe)
|
|
216
|
+
hash = (hash * 31 + ch.charCodeAt(0)) >>> 0;
|
|
217
|
+
const suffix = `_${hash.toString(36)}`;
|
|
218
|
+
return `${full.slice(0, PG_IDENTIFIER_MAX - suffix.length)}${suffix}`;
|
|
219
|
+
}
|
|
220
|
+
function quoteLiteral(value) {
|
|
221
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
222
|
+
}
|
|
223
|
+
function quoteIdent(value) {
|
|
224
|
+
return `"${value.replace(/"/g, '""')}"`;
|
|
225
|
+
}
|
|
226
|
+
function buildCreateAuditTriggerSql(tableName) {
|
|
227
|
+
const trigger = quoteIdent(auditTriggerName(tableName));
|
|
228
|
+
const table = quoteIdent(tableName);
|
|
229
|
+
return `
|
|
230
|
+
DO $$
|
|
231
|
+
BEGIN
|
|
232
|
+
IF EXISTS (
|
|
233
|
+
SELECT 1 FROM information_schema.tables
|
|
234
|
+
WHERE table_schema = 'public' AND table_name = ${quoteLiteral(tableName)}
|
|
235
|
+
) THEN
|
|
236
|
+
EXECUTE 'DROP TRIGGER IF EXISTS ' || ${quoteLiteral(trigger)} || ' ON public.' || ${quoteLiteral(table)};
|
|
237
|
+
EXECUTE 'CREATE TRIGGER ' || ${quoteLiteral(trigger)} || ' BEFORE DELETE ON public.' || ${quoteLiteral(table)} || ' FOR EACH ROW EXECUTE FUNCTION ${exports.AUDIT_TRIGGER_FUNCTION}()';
|
|
238
|
+
END IF;
|
|
239
|
+
END
|
|
240
|
+
$$;`;
|
|
241
|
+
}
|
|
242
|
+
function buildDropAuditTriggerSql(tableName) {
|
|
243
|
+
const trigger = quoteIdent(auditTriggerName(tableName));
|
|
244
|
+
const table = quoteIdent(tableName);
|
|
245
|
+
return `
|
|
246
|
+
DO $$
|
|
247
|
+
BEGIN
|
|
248
|
+
IF EXISTS (
|
|
249
|
+
SELECT 1 FROM information_schema.tables
|
|
250
|
+
WHERE table_schema = 'public' AND table_name = ${quoteLiteral(tableName)}
|
|
251
|
+
) THEN
|
|
252
|
+
EXECUTE 'DROP TRIGGER IF EXISTS ' || ${quoteLiteral(trigger)} || ' ON public.' || ${quoteLiteral(table)};
|
|
253
|
+
END IF;
|
|
254
|
+
END
|
|
255
|
+
$$;`;
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXRlZC10YWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kZWxldGVkLXJlY29yZHMtYXVkaXQvYXVkaXRlZC10YWJsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBK01BLDRDQVFDO0FBVUQsZ0VBZUM7QUFFRCw0REFjQztBQWhRRDs7OztHQUlHO0FBQ1UsUUFBQSxtQkFBbUIsR0FBRztJQUNqQywwQkFBMEI7SUFDMUIsZ0JBQWdCO0lBQ2hCLFNBQVM7SUFDVCw4QkFBOEI7SUFDOUIsaUNBQWlDO0lBQ2pDLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsd0JBQXdCO0lBQ3hCLDJCQUEyQjtJQUMzQixtQkFBbUI7SUFDbkIsNkJBQTZCO0lBQzdCLFNBQVM7SUFDVCxNQUFNO0lBQ04sY0FBYztJQUNkLGdCQUFnQjtJQUNoQiwyQkFBMkI7SUFDM0IseUJBQXlCO0lBQ3pCLHlCQUF5QjtJQUN6QixnQkFBZ0I7SUFDaEIsc0JBQXNCO0lBQ3RCLGlDQUFpQztJQUNqQywrQkFBK0I7SUFDL0IsNEJBQTRCO0lBQzVCLGlCQUFpQjtJQUNqQix5QkFBeUI7SUFDekIsYUFBYTtJQUNiLFVBQVU7SUFDVixVQUFVO0lBQ1YseUJBQXlCO0lBQ3pCLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIseUJBQXlCO0lBQ3pCLHNCQUFzQjtJQUN0QixhQUFhO0lBQ2IscUJBQXFCO0lBQ3JCLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsc0JBQXNCO0lBQ3RCLGlCQUFpQjtJQUNqQixVQUFVO0lBQ1YsT0FBTztJQUNQLHNCQUFzQjtJQUN0Qix5QkFBeUI7SUFDekIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsb0JBQW9CO0lBQ3BCLCtCQUErQjtJQUMvQixnQ0FBZ0M7SUFDaEMsMEJBQTBCO0lBQzFCLDhCQUE4QjtJQUM5QixRQUFRO0lBQ1Isa0JBQWtCO0lBQ2xCLFNBQVM7SUFDVCxrQkFBa0I7SUFDbEIsc0JBQXNCO0lBQ3RCLHdCQUF3QjtJQUN4QiwrQkFBK0I7SUFDL0IsMEJBQTBCO0lBQzFCLG1CQUFtQjtJQUNuQixzQkFBc0I7SUFDdEIsY0FBYztJQUNkLHVCQUF1QjtJQUN2QixxQkFBcUI7SUFDckIsT0FBTztJQUNQLGVBQWU7SUFDZixZQUFZO0lBQ1osY0FBYztJQUNkLHFCQUFxQjtJQUNyQixhQUFhO0lBQ2Isa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4QixtQkFBbUI7SUFDbkIsZ0JBQWdCO0lBQ2hCLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsWUFBWTtJQUNaLGlCQUFpQjtJQUNqQiw0QkFBNEI7SUFDNUIsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLHVCQUF1QjtJQUN2QixrQ0FBa0M7SUFDbEMsZ0NBQWdDO0lBQ2hDLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLFNBQVM7SUFDVCxvQkFBb0I7SUFDcEIsc0NBQXNDO0lBQ3RDLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixPQUFPO0lBQ1AsWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsWUFBWTtJQUNaLFdBQVc7SUFDWCxTQUFTO0lBQ1Qsa0JBQWtCO0lBQ2xCLDBCQUEwQjtJQUMxQixvQkFBb0I7SUFDcEIsMEJBQTBCO0lBQzFCLGdCQUFnQjtJQUNoQixzQkFBc0I7SUFDdEIsd0JBQXdCO0lBQ3hCLDhCQUE4QjtJQUM5Qix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLGFBQWE7SUFDYixjQUFjO0lBQ2QsY0FBYztJQUNkLGlCQUFpQjtJQUNqQixnQ0FBZ0M7SUFDaEMsd0JBQXdCO0lBQ3hCLDJCQUEyQjtJQUMzQiwrQkFBK0I7SUFDL0IsY0FBYztJQUNkLFdBQVc7SUFDWCw4QkFBOEI7SUFDOUIsb0JBQW9CO0lBQ3BCLDJCQUEyQjtJQUMzQixpQ0FBaUM7SUFDakMsMEJBQTBCO0lBQzFCLGdCQUFnQjtJQUNoQixzQkFBc0I7SUFDdEIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixtQ0FBbUM7SUFDbkMsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsUUFBUTtJQUNSLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2YsUUFBUTtJQUNSLGdCQUFnQjtJQUNoQix5QkFBeUI7SUFDekIsa0JBQWtCO0lBQ2xCLFFBQVE7SUFDUixvQkFBb0I7SUFDcEIsYUFBYTtJQUNiLGVBQWU7SUFDZixRQUFRO0lBQ1IsZUFBZTtJQUNmLDhCQUE4QjtJQUM5QixtQkFBbUI7SUFDbkIsY0FBYztJQUNkLG1CQUFtQjtJQUNuQixzQkFBc0I7SUFDdEIsdUJBQXVCO0lBQ3ZCLGNBQWM7SUFDZCx5QkFBeUI7SUFDekIsaUJBQWlCO0lBQ2pCLDJCQUEyQjtJQUMzQixzQkFBc0I7SUFDdEIsc0JBQXNCO0lBQ3RCLGtCQUFrQjtJQUNsQixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLHdCQUF3QjtJQUN4QixPQUFPO0lBQ1Asc0JBQXNCO0lBQ3RCLGtDQUFrQztJQUNsQyxnQkFBZ0I7SUFDaEIsY0FBYztJQUNkLGNBQWM7SUFDZCxVQUFVO0lBQ1YsZUFBZTtJQUNmLFlBQVk7SUFDWixpQkFBaUI7SUFDakIsMkJBQTJCO0lBQzNCLE1BQU07SUFDTixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLG9CQUFvQjtJQUNwQixnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixhQUFhO0lBQ2IscUJBQXFCO0lBQ3JCLG1CQUFtQjtJQUNuQixzQkFBc0I7SUFDdEIsdUJBQXVCO0lBQ3ZCLFVBQVU7SUFDVixvQkFBb0I7Q0FDWixDQUFBO0FBSUcsUUFBQSxnQkFBZ0IsR0FBRyx1QkFBdUIsQ0FBQTtBQUMxQyxRQUFBLHNCQUFzQixHQUFHLHFCQUFxQixDQUFBO0FBRTNELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQTtBQUMvQixNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQTtBQUU1Qix1RkFBdUY7QUFDdkYsU0FBZ0IsZ0JBQWdCLENBQUMsU0FBaUI7SUFDaEQsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDakUsTUFBTSxJQUFJLEdBQUcsR0FBRyxjQUFjLEdBQUcsSUFBSSxFQUFFLENBQUE7SUFDdkMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLGlCQUFpQjtRQUFFLE9BQU8sSUFBSSxDQUFBO0lBQ2pELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQTtJQUNaLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSTtRQUFFLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNsRSxNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQTtJQUN0QyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFBO0FBQ3ZFLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxLQUFhO0lBQ2pDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFBO0FBQ3pDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFhO0lBQy9CLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFBO0FBQ3pDLENBQUM7QUFFRCxTQUFnQiwwQkFBMEIsQ0FBQyxTQUFpQjtJQUMxRCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtJQUN2RCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDbkMsT0FBTzs7Ozs7cURBSzRDLFlBQVksQ0FBQyxTQUFTLENBQUM7OzJDQUVqQyxZQUFZLENBQUMsT0FBTyxDQUFDLHdCQUF3QixZQUFZLENBQUMsS0FBSyxDQUFDO21DQUN4RSxZQUFZLENBQUMsT0FBTyxDQUFDLHNDQUFzQyxZQUFZLENBQUMsS0FBSyxDQUFDLHVDQUF1Qyw4QkFBc0I7OztJQUcxSyxDQUFBO0FBQ0osQ0FBQztBQUVELFNBQWdCLHdCQUF3QixDQUFDLFNBQWlCO0lBQ3hELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO0lBQ3ZELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNuQyxPQUFPOzs7OztxREFLNEMsWUFBWSxDQUFDLFNBQVMsQ0FBQzs7MkNBRWpDLFlBQVksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLFlBQVksQ0FBQyxLQUFLLENBQUM7OztJQUd2RyxDQUFBO0FBQ0osQ0FBQyJ9
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DeletedRecordsAuditModuleService = exports.DELETED_RECORDS_AUDIT_MODULE = void 0;
|
|
7
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
8
|
+
const service_1 = __importDefault(require("./service"));
|
|
9
|
+
exports.DeletedRecordsAuditModuleService = service_1.default;
|
|
10
|
+
exports.DELETED_RECORDS_AUDIT_MODULE = "deleted_records_audit";
|
|
11
|
+
exports.default = (0, utils_1.Module)(exports.DELETED_RECORDS_AUDIT_MODULE, {
|
|
12
|
+
service: service_1.default,
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kZWxldGVkLXJlY29yZHMtYXVkaXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEscURBQWtEO0FBQ2xELHdEQUF3RDtBQVEvQywyQ0FSRixpQkFBZ0MsQ0FRRTtBQU41QixRQUFBLDRCQUE0QixHQUFHLHVCQUF1QixDQUFBO0FBRW5FLGtCQUFlLElBQUEsY0FBTSxFQUFDLG9DQUE0QixFQUFFO0lBQ2xELE9BQU8sRUFBRSxpQkFBZ0M7Q0FDMUMsQ0FBQyxDQUFBIn0=
|
package/.medusa/server/src/modules/deleted-records-audit/migrations/Migration20261008120000.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20261008120000 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
const audited_tables_1 = require("../audited-tables");
|
|
6
|
+
class Migration20261008120000 extends migrations_1.Migration {
|
|
7
|
+
async up() {
|
|
8
|
+
this.addSql(`
|
|
9
|
+
CREATE TABLE IF NOT EXISTS "deleted_records_audit" (
|
|
10
|
+
"id" text NOT NULL PRIMARY KEY,
|
|
11
|
+
"table_name" text NOT NULL,
|
|
12
|
+
"record_id" text NULL,
|
|
13
|
+
"operation" text NOT NULL DEFAULT 'DELETE',
|
|
14
|
+
"old_data" jsonb NULL,
|
|
15
|
+
"occurred_at" timestamptz NOT NULL DEFAULT now(),
|
|
16
|
+
"deleted_by" text NULL,
|
|
17
|
+
"source" text NULL,
|
|
18
|
+
"created_at" timestamptz NOT NULL DEFAULT now(),
|
|
19
|
+
"updated_at" timestamptz NOT NULL DEFAULT now(),
|
|
20
|
+
"deleted_at" timestamptz NULL
|
|
21
|
+
);
|
|
22
|
+
`);
|
|
23
|
+
this.addSql(`
|
|
24
|
+
CREATE INDEX IF NOT EXISTS "IDX_deleted_records_audit_occurred_at"
|
|
25
|
+
ON "deleted_records_audit" ("occurred_at" DESC);
|
|
26
|
+
`);
|
|
27
|
+
this.addSql(`
|
|
28
|
+
CREATE INDEX IF NOT EXISTS "IDX_deleted_records_audit_table_occurred"
|
|
29
|
+
ON "deleted_records_audit" ("table_name", "occurred_at" DESC);
|
|
30
|
+
`);
|
|
31
|
+
this.addSql(`
|
|
32
|
+
CREATE INDEX IF NOT EXISTS "IDX_deleted_records_audit_record_id"
|
|
33
|
+
ON "deleted_records_audit" ("record_id");
|
|
34
|
+
`);
|
|
35
|
+
this.addSql(`
|
|
36
|
+
CREATE INDEX IF NOT EXISTS "IDX_deleted_records_audit_source"
|
|
37
|
+
ON "deleted_records_audit" ("source") WHERE "source" IS NOT NULL;
|
|
38
|
+
`);
|
|
39
|
+
this.addSql(`
|
|
40
|
+
CREATE OR REPLACE FUNCTION ${audited_tables_1.AUDIT_TRIGGER_FUNCTION}()
|
|
41
|
+
RETURNS trigger
|
|
42
|
+
LANGUAGE plpgsql
|
|
43
|
+
AS $fn$
|
|
44
|
+
DECLARE
|
|
45
|
+
row_json jsonb := to_jsonb(OLD);
|
|
46
|
+
BEGIN
|
|
47
|
+
INSERT INTO "deleted_records_audit" (
|
|
48
|
+
"id", "table_name", "record_id", "operation", "old_data",
|
|
49
|
+
"occurred_at", "deleted_by", "source"
|
|
50
|
+
) VALUES (
|
|
51
|
+
'dra_' || replace(gen_random_uuid()::text, '-', ''),
|
|
52
|
+
TG_TABLE_NAME,
|
|
53
|
+
row_json ->> 'id',
|
|
54
|
+
'DELETE',
|
|
55
|
+
row_json,
|
|
56
|
+
now(),
|
|
57
|
+
NULLIF(current_setting('app.audit_actor_id', true), ''),
|
|
58
|
+
NULLIF(current_setting('app.audit_source', true), '')
|
|
59
|
+
);
|
|
60
|
+
RETURN OLD;
|
|
61
|
+
END;
|
|
62
|
+
$fn$;
|
|
63
|
+
`);
|
|
64
|
+
for (const table of audited_tables_1.AUDITED_TABLE_NAMES) {
|
|
65
|
+
this.addSql((0, audited_tables_1.buildCreateAuditTriggerSql)(table));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async down() {
|
|
69
|
+
for (const table of audited_tables_1.AUDITED_TABLE_NAMES) {
|
|
70
|
+
this.addSql((0, audited_tables_1.buildDropAuditTriggerSql)(table));
|
|
71
|
+
}
|
|
72
|
+
this.addSql(`DROP FUNCTION IF EXISTS ${audited_tables_1.AUDIT_TRIGGER_FUNCTION}();`);
|
|
73
|
+
this.addSql(`DROP INDEX IF EXISTS "IDX_deleted_records_audit_source";`);
|
|
74
|
+
this.addSql(`DROP INDEX IF EXISTS "IDX_deleted_records_audit_record_id";`);
|
|
75
|
+
this.addSql(`DROP INDEX IF EXISTS "IDX_deleted_records_audit_table_occurred";`);
|
|
76
|
+
this.addSql(`DROP INDEX IF EXISTS "IDX_deleted_records_audit_occurred_at";`);
|
|
77
|
+
this.addSql(`DROP TABLE IF EXISTS "deleted_records_audit";`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.Migration20261008120000 = Migration20261008120000;
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjEwMDgxMjAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kZWxldGVkLXJlY29yZHMtYXVkaXQvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MTAwODEyMDAwMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBb0U7QUFDcEUsc0RBSzBCO0FBRTFCLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFDcEQsS0FBSyxDQUFDLEVBQUU7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7OztLQWNYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxNQUFNLENBQUM7bUNBQ21CLHVDQUFzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0F1QnBELENBQUMsQ0FBQTtRQUVGLEtBQUssTUFBTSxLQUFLLElBQUksb0NBQW1CLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUEsMkNBQTBCLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsS0FBSyxNQUFNLEtBQUssSUFBSSxvQ0FBbUIsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBQSx5Q0FBd0IsRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzlDLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLDJCQUEyQix1Q0FBc0IsS0FBSyxDQUFDLENBQUE7UUFDbkUsSUFBSSxDQUFDLE1BQU0sQ0FBQywwREFBMEQsQ0FBQyxDQUFBO1FBQ3ZFLElBQUksQ0FBQyxNQUFNLENBQUMsNkRBQTZELENBQUMsQ0FBQTtRQUMxRSxJQUFJLENBQUMsTUFBTSxDQUFDLGtFQUFrRSxDQUFDLENBQUE7UUFDL0UsSUFBSSxDQUFDLE1BQU0sQ0FBQywrREFBK0QsQ0FBQyxDQUFBO1FBQzVFLElBQUksQ0FBQyxNQUFNLENBQUMsK0NBQStDLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0NBQ0Y7QUE3RUQsMERBNkVDIn0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
4
|
+
const DeletedRecordsAudit = utils_1.model.define("deleted_records_audit", {
|
|
5
|
+
id: utils_1.model.id().primaryKey(),
|
|
6
|
+
table_name: utils_1.model.text().searchable(),
|
|
7
|
+
record_id: utils_1.model.text().searchable().nullable(),
|
|
8
|
+
operation: utils_1.model.text().default("DELETE"),
|
|
9
|
+
old_data: utils_1.model.json().nullable(),
|
|
10
|
+
occurred_at: utils_1.model.dateTime(),
|
|
11
|
+
deleted_by: utils_1.model.text().nullable(),
|
|
12
|
+
source: utils_1.model.text().nullable(),
|
|
13
|
+
});
|
|
14
|
+
exports.default = DeletedRecordsAudit;
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlZC1yZWNvcmRzLWF1ZGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvZGVsZXRlZC1yZWNvcmRzLWF1ZGl0L21vZGVscy9kZWxldGVkLXJlY29yZHMtYXVkaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFBaUQ7QUFFakQsTUFBTSxtQkFBbUIsR0FBRyxhQUFLLENBQUMsTUFBTSxDQUFDLHVCQUF1QixFQUFFO0lBQ2hFLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFO0lBQzNCLFVBQVUsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFO0lBQ3JDLFNBQVMsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQy9DLFNBQVMsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUN6QyxRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxXQUFXLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRTtJQUM3QixVQUFVLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuQyxNQUFNLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNoQyxDQUFDLENBQUE7QUFFRixrQkFBZSxtQkFBbUIsQ0FBQSJ9
|