67 lines
1.9 KiB
TypeScript
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,
|
|
};
|
|
}
|