import {AuditRecord} from "anbaric-tsapi"; import {randomUUID} from "node:crypto"; import {AuditFilter, AuditRecordStore} from "./AuditRecordStore"; class InMemoryAuditRecordStore implements AuditRecordStore { private records = new Array(); async save(record : AuditRecord) : Promise { this.records.push({ ...record, id: randomUUID(), at: record.at ?? new Date().toISOString() }); } async list(filter : AuditFilter) : Promise> { const pageSize = filter.pageSize ?? 100; const page = filter.page ?? 0; return this.records .filter(record => !filter.appId || record.appId === filter.appId) .filter(record => !filter.resourceType || record.resourceType === filter.resourceType) .filter(record => !filter.resourceId || record.resourceId === filter.resourceId) .filter(record => !filter.actorId || record.actorId === filter.actorId) .filter(record => !filter.interaction || record.interaction.includes(filter.interaction)) .filter(record => !filter.search || record.description.toLowerCase().includes(filter.search.toLowerCase())) .reverse() .slice(page * pageSize, (page + 1) * pageSize); } } export { InMemoryAuditRecordStore }