Files
dh-inspeccion-v2/api-v3/src/audit/audit-query.ts
T

67 lines
1.9 KiB
TypeScript

import type { ListAuditQueryDto } from './dto/list-audit-query.dto';
export interface AuditFilters {
clause: string;
parameters: unknown[];
}
export function buildAuditFilters(query: ListAuditQueryDto): AuditFilters {
const conditions: string[] = [];
const parameters: unknown[] = [];
const add = (condition: (parameter: string) => string, value: unknown) => {
parameters.push(value);
conditions.push(condition(`$${parameters.length}`));
};
if (query.actorUserId) {
add((parameter) => `event.actor_user_id = ${parameter}`, query.actorUserId);
}
if (query.actorUsername) {
add(
(parameter) => `event.actor_username ILIKE ${parameter}`,
`%${query.actorUsername}%`,
);
}
if (query.action) {
add((parameter) => `event.action = ${parameter}`, query.action);
}
if (query.source) {
add((parameter) => `event.source = ${parameter}`, query.source);
}
if (query.entityType) {
add((parameter) => `event.entity_type = ${parameter}`, query.entityType);
}
if (query.entityId) {
add((parameter) => `event.entity_id = ${parameter}`, query.entityId);
}
if (query.requestId) {
add((parameter) => `event.request_id = ${parameter}`, query.requestId);
}
if (query.from) {
add((parameter) => `event.occurred_at >= ${parameter}`, new Date(query.from));
}
if (query.to) {
add((parameter) => `event.occurred_at <= ${parameter}`, new Date(query.to));
}
if (query.search) {
add(
(parameter) => `
(
event.actor_username ILIKE ${parameter}
OR event.action ILIKE ${parameter}
OR event.entity_type ILIKE ${parameter}
OR event.entity_id ILIKE ${parameter}
OR event.request_id ILIKE ${parameter}
)
`,
`%${query.search}%`,
);
}
return {
clause: conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '',
parameters,
};
}