Don't audit for records that failed their DML

This commit is contained in:
2023-05-12 12:21:34 -05:00
parent 7a5124ae06
commit 3e7684bb8d
2 changed files with 17 additions and 1 deletions

View File

@ -79,7 +79,6 @@ public class DMLAuditAction extends AbstractQActionFunction<DMLAuditInput, DMLAu
{ {
DMLAuditOutput output = new DMLAuditOutput(); DMLAuditOutput output = new DMLAuditOutput();
AbstractTableActionInput tableActionInput = input.getTableActionInput(); AbstractTableActionInput tableActionInput = input.getTableActionInput();
List<QRecord> recordList = input.getRecordList();
List<QRecord> oldRecordList = input.getOldRecordList(); List<QRecord> oldRecordList = input.getOldRecordList();
QTableMetaData table = tableActionInput.getTable(); QTableMetaData table = tableActionInput.getTable();
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
@ -87,6 +86,9 @@ public class DMLAuditAction extends AbstractQActionFunction<DMLAuditInput, DMLAu
try try
{ {
List<QRecord> recordList = CollectionUtils.nonNullList(input.getRecordList()).stream()
.filter(r -> CollectionUtils.nullSafeIsEmpty(r.getErrors())).toList();
AuditLevel auditLevel = getAuditLevel(tableActionInput); AuditLevel auditLevel = getAuditLevel(tableActionInput);
if(auditLevel == null || auditLevel.equals(AuditLevel.NONE) || CollectionUtils.nullSafeIsEmpty(recordList)) if(auditLevel == null || auditLevel.equals(AuditLevel.NONE) || CollectionUtils.nullSafeIsEmpty(recordList))
{ {

View File

@ -36,6 +36,7 @@ import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.model.metadata.QInstance; import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
import com.kingsrook.qqq.backend.core.model.metadata.audits.AuditLevel; import com.kingsrook.qqq.backend.core.model.metadata.audits.AuditLevel;
import com.kingsrook.qqq.backend.core.model.metadata.audits.QAuditRules; import com.kingsrook.qqq.backend.core.model.metadata.audits.QAuditRules;
import com.kingsrook.qqq.backend.core.model.statusmessages.BadInputStatusMessage;
import com.kingsrook.qqq.backend.core.modules.backend.implementations.memory.MemoryRecordStore; import com.kingsrook.qqq.backend.core.modules.backend.implementations.memory.MemoryRecordStore;
import com.kingsrook.qqq.backend.core.utils.TestUtils; import com.kingsrook.qqq.backend.core.utils.TestUtils;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -184,6 +185,19 @@ class DMLAuditActionTest extends BaseTest
assertEquals(0, auditList.size()); assertEquals(0, auditList.size());
MemoryRecordStore.getInstance().reset(); MemoryRecordStore.getInstance().reset();
} }
////////////////////////////////////////////////////
// confirm we don't audit for records with errors //
////////////////////////////////////////////////////
{
qInstance.getTable(TestUtils.TABLE_NAME_PERSON_MEMORY).setAuditRules(new QAuditRules().withAuditLevel(AuditLevel.FIELD));
new DMLAuditAction().execute(new DMLAuditInput().withTableActionInput(updateInput)
.withRecordList(List.of(new QRecord().withValue("id", 1).withValue("firstName", "B").withError(new BadInputStatusMessage("Error"))))
.withOldRecordList(List.of(new QRecord().withValue("id", 1).withValue("firstName", "A"))));
List<QRecord> auditList = TestUtils.queryTable("audit");
assertEquals(0, auditList.size());
MemoryRecordStore.getInstance().reset();
}
} }
} }