mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-21 14:38:43 +00:00
Also move audits to use qqqTable instead of auditTable
This commit is contained in:
@ -46,6 +46,7 @@ import com.kingsrook.qqq.backend.core.model.data.QRecord;
|
|||||||
import com.kingsrook.qqq.backend.core.model.metadata.security.RecordSecurityLock;
|
import com.kingsrook.qqq.backend.core.model.metadata.security.RecordSecurityLock;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
||||||
import com.kingsrook.qqq.backend.core.model.session.QUser;
|
import com.kingsrook.qqq.backend.core.model.session.QUser;
|
||||||
|
import com.kingsrook.qqq.backend.core.model.tables.QQQTableAccessor;
|
||||||
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
|
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
|
||||||
import com.kingsrook.qqq.backend.core.utils.Pair;
|
import com.kingsrook.qqq.backend.core.utils.Pair;
|
||||||
|
|
||||||
@ -177,7 +178,6 @@ public class AuditAction extends AbstractQActionFunction<AuditInput, AuditOutput
|
|||||||
////////////////////////////////////////////////
|
////////////////////////////////////////////////
|
||||||
// map names to ids and handle default values //
|
// map names to ids and handle default values //
|
||||||
////////////////////////////////////////////////
|
////////////////////////////////////////////////
|
||||||
Integer auditTableId = getIdForName("auditTable", auditSingleInput.getAuditTableName());
|
|
||||||
Integer auditUserId = getIdForName("auditUser", Objects.requireNonNullElse(auditSingleInput.getAuditUserName(), getSessionUserName()));
|
Integer auditUserId = getIdForName("auditUser", Objects.requireNonNullElse(auditSingleInput.getAuditUserName(), getSessionUserName()));
|
||||||
Instant timestamp = Objects.requireNonNullElse(auditSingleInput.getTimestamp(), Instant.now());
|
Instant timestamp = Objects.requireNonNullElse(auditSingleInput.getTimestamp(), Instant.now());
|
||||||
|
|
||||||
@ -185,7 +185,7 @@ public class AuditAction extends AbstractQActionFunction<AuditInput, AuditOutput
|
|||||||
// build record //
|
// build record //
|
||||||
//////////////////
|
//////////////////
|
||||||
QRecord record = new QRecord()
|
QRecord record = new QRecord()
|
||||||
.withValue("auditTableId", auditTableId)
|
.withValue("tableId", QQQTableAccessor.getTableId(auditSingleInput.getAuditTableName()))
|
||||||
.withValue("auditUserId", auditUserId)
|
.withValue("auditUserId", auditUserId)
|
||||||
.withValue("timestamp", timestamp)
|
.withValue("timestamp", timestamp)
|
||||||
.withValue("message", auditSingleInput.getMessage())
|
.withValue("message", auditSingleInput.getMessage())
|
||||||
@ -287,15 +287,6 @@ public class AuditAction extends AbstractQActionFunction<AuditInput, AuditOutput
|
|||||||
insertInput.setTableName(tableName);
|
insertInput.setTableName(tableName);
|
||||||
QRecord record = new QRecord().withValue("name", nameValue);
|
QRecord record = new QRecord().withValue("name", nameValue);
|
||||||
|
|
||||||
if(tableName.equals("auditTable"))
|
|
||||||
{
|
|
||||||
QTableMetaData table = QContext.getQInstance().getTable(nameValue);
|
|
||||||
if(table != null)
|
|
||||||
{
|
|
||||||
record.setValue("label", table.getLabel());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
insertInput.setRecords(List.of(record));
|
insertInput.setRecords(List.of(record));
|
||||||
InsertOutput insertOutput = new InsertAction().execute(insertInput);
|
InsertOutput insertOutput = new InsertAction().execute(insertInput);
|
||||||
id = insertOutput.getRecords().get(0).getValueInteger("id");
|
id = insertOutput.getRecords().get(0).getValueInteger("id");
|
||||||
|
@ -39,6 +39,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.possiblevalues.QPossibleVal
|
|||||||
import com.kingsrook.qqq.backend.core.model.metadata.tables.Capability;
|
import com.kingsrook.qqq.backend.core.model.metadata.tables.Capability;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.tables.UniqueKey;
|
import com.kingsrook.qqq.backend.core.model.metadata.tables.UniqueKey;
|
||||||
|
import com.kingsrook.qqq.backend.core.model.tables.QQQTable;
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
@ -46,7 +47,6 @@ import com.kingsrook.qqq.backend.core.model.metadata.tables.UniqueKey;
|
|||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
public class AuditsMetaDataProvider
|
public class AuditsMetaDataProvider
|
||||||
{
|
{
|
||||||
public static final String TABLE_NAME_AUDIT_TABLE = "auditTable";
|
|
||||||
public static final String TABLE_NAME_AUDIT_USER = "auditUser";
|
public static final String TABLE_NAME_AUDIT_USER = "auditUser";
|
||||||
public static final String TABLE_NAME_AUDIT = "audit";
|
public static final String TABLE_NAME_AUDIT = "audit";
|
||||||
public static final String TABLE_NAME_AUDIT_DETAIL = "auditDetail";
|
public static final String TABLE_NAME_AUDIT_DETAIL = "auditDetail";
|
||||||
@ -72,10 +72,10 @@ public class AuditsMetaDataProvider
|
|||||||
{
|
{
|
||||||
instance.addJoin(new QJoinMetaData()
|
instance.addJoin(new QJoinMetaData()
|
||||||
.withLeftTable(TABLE_NAME_AUDIT)
|
.withLeftTable(TABLE_NAME_AUDIT)
|
||||||
.withRightTable(TABLE_NAME_AUDIT_TABLE)
|
.withRightTable(QQQTable.TABLE_NAME)
|
||||||
.withInferredName()
|
.withInferredName()
|
||||||
.withType(JoinType.MANY_TO_ONE)
|
.withType(JoinType.MANY_TO_ONE)
|
||||||
.withJoinOn(new JoinOn("auditTableId", "id")));
|
.withJoinOn(new JoinOn("tableId", "id")));
|
||||||
|
|
||||||
instance.addJoin(new QJoinMetaData()
|
instance.addJoin(new QJoinMetaData()
|
||||||
.withLeftTable(TABLE_NAME_AUDIT)
|
.withLeftTable(TABLE_NAME_AUDIT)
|
||||||
@ -113,11 +113,6 @@ public class AuditsMetaDataProvider
|
|||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
public void defineStandardAuditPossibleValueSources(QInstance instance)
|
public void defineStandardAuditPossibleValueSources(QInstance instance)
|
||||||
{
|
{
|
||||||
instance.addPossibleValueSource(new QPossibleValueSource()
|
|
||||||
.withName(TABLE_NAME_AUDIT_TABLE)
|
|
||||||
.withTableName(TABLE_NAME_AUDIT_TABLE)
|
|
||||||
);
|
|
||||||
|
|
||||||
instance.addPossibleValueSource(new QPossibleValueSource()
|
instance.addPossibleValueSource(new QPossibleValueSource()
|
||||||
.withName(TABLE_NAME_AUDIT_USER)
|
.withName(TABLE_NAME_AUDIT_USER)
|
||||||
.withTableName(TABLE_NAME_AUDIT_USER)
|
.withTableName(TABLE_NAME_AUDIT_USER)
|
||||||
@ -138,7 +133,6 @@ public class AuditsMetaDataProvider
|
|||||||
{
|
{
|
||||||
List<QTableMetaData> rs = new ArrayList<>();
|
List<QTableMetaData> rs = new ArrayList<>();
|
||||||
rs.add(enrich(backendDetailEnricher, defineAuditUserTable(backendName)));
|
rs.add(enrich(backendDetailEnricher, defineAuditUserTable(backendName)));
|
||||||
rs.add(enrich(backendDetailEnricher, defineAuditTableTable(backendName)));
|
|
||||||
rs.add(enrich(backendDetailEnricher, defineAuditTable(backendName)));
|
rs.add(enrich(backendDetailEnricher, defineAuditTable(backendName)));
|
||||||
rs.add(enrich(backendDetailEnricher, defineAuditDetailTable(backendName)));
|
rs.add(enrich(backendDetailEnricher, defineAuditDetailTable(backendName)));
|
||||||
return (rs);
|
return (rs);
|
||||||
@ -160,29 +154,6 @@ public class AuditsMetaDataProvider
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
**
|
|
||||||
*******************************************************************************/
|
|
||||||
private QTableMetaData defineAuditTableTable(String backendName)
|
|
||||||
{
|
|
||||||
return new QTableMetaData()
|
|
||||||
.withName(TABLE_NAME_AUDIT_TABLE)
|
|
||||||
.withBackendName(backendName)
|
|
||||||
.withAuditRules(new QAuditRules().withAuditLevel(AuditLevel.NONE))
|
|
||||||
.withRecordLabelFormat("%s")
|
|
||||||
.withRecordLabelFields("label")
|
|
||||||
.withPrimaryKeyField("id")
|
|
||||||
.withUniqueKey(new UniqueKey("name"))
|
|
||||||
.withField(new QFieldMetaData("id", QFieldType.INTEGER))
|
|
||||||
.withField(new QFieldMetaData("name", QFieldType.STRING))
|
|
||||||
.withField(new QFieldMetaData("label", QFieldType.STRING))
|
|
||||||
.withField(new QFieldMetaData("createDate", QFieldType.DATE_TIME))
|
|
||||||
.withField(new QFieldMetaData("modifyDate", QFieldType.DATE_TIME))
|
|
||||||
.withoutCapabilities(Capability.TABLE_INSERT, Capability.TABLE_UPDATE, Capability.TABLE_DELETE);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
**
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
@ -215,10 +186,10 @@ public class AuditsMetaDataProvider
|
|||||||
.withBackendName(backendName)
|
.withBackendName(backendName)
|
||||||
.withAuditRules(new QAuditRules().withAuditLevel(AuditLevel.NONE))
|
.withAuditRules(new QAuditRules().withAuditLevel(AuditLevel.NONE))
|
||||||
.withRecordLabelFormat("%s %s")
|
.withRecordLabelFormat("%s %s")
|
||||||
.withRecordLabelFields("auditTableId", "recordId")
|
.withRecordLabelFields("tableId", "recordId")
|
||||||
.withPrimaryKeyField("id")
|
.withPrimaryKeyField("id")
|
||||||
.withField(new QFieldMetaData("id", QFieldType.INTEGER))
|
.withField(new QFieldMetaData("id", QFieldType.INTEGER))
|
||||||
.withField(new QFieldMetaData("auditTableId", QFieldType.INTEGER).withPossibleValueSourceName(TABLE_NAME_AUDIT_TABLE))
|
.withField(new QFieldMetaData("tableId", QFieldType.INTEGER).withPossibleValueSourceName(QQQTable.TABLE_NAME))
|
||||||
.withField(new QFieldMetaData("auditUserId", QFieldType.INTEGER).withPossibleValueSourceName(TABLE_NAME_AUDIT_USER))
|
.withField(new QFieldMetaData("auditUserId", QFieldType.INTEGER).withPossibleValueSourceName(TABLE_NAME_AUDIT_USER))
|
||||||
.withField(new QFieldMetaData("recordId", QFieldType.INTEGER))
|
.withField(new QFieldMetaData("recordId", QFieldType.INTEGER))
|
||||||
.withField(new QFieldMetaData("message", QFieldType.STRING).withMaxLength(250).withBehavior(ValueTooLongBehavior.TRUNCATE_ELLIPSIS))
|
.withField(new QFieldMetaData("message", QFieldType.STRING).withMaxLength(250).withBehavior(ValueTooLongBehavior.TRUNCATE_ELLIPSIS))
|
||||||
|
@ -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.session.QSession;
|
import com.kingsrook.qqq.backend.core.model.session.QSession;
|
||||||
import com.kingsrook.qqq.backend.core.model.session.QUser;
|
import com.kingsrook.qqq.backend.core.model.session.QUser;
|
||||||
|
import com.kingsrook.qqq.backend.core.model.tables.QQQTablesMetaDataProvider;
|
||||||
import com.kingsrook.qqq.backend.core.processes.utils.GeneralProcessUtils;
|
import com.kingsrook.qqq.backend.core.processes.utils.GeneralProcessUtils;
|
||||||
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;
|
||||||
@ -59,6 +60,7 @@ class AuditActionTest extends BaseTest
|
|||||||
{
|
{
|
||||||
QInstance qInstance = TestUtils.defineInstance();
|
QInstance qInstance = TestUtils.defineInstance();
|
||||||
new AuditsMetaDataProvider().defineAll(qInstance, TestUtils.MEMORY_BACKEND_NAME, null);
|
new AuditsMetaDataProvider().defineAll(qInstance, TestUtils.MEMORY_BACKEND_NAME, null);
|
||||||
|
new QQQTablesMetaDataProvider().defineAll(qInstance, TestUtils.MEMORY_BACKEND_NAME, TestUtils.MEMORY_BACKEND_NAME, null);
|
||||||
|
|
||||||
String userName = "John Doe";
|
String userName = "John Doe";
|
||||||
QContext.init(qInstance, new QSession().withUser(new QUser().withFullName(userName)));
|
QContext.init(qInstance, new QSession().withUser(new QUser().withFullName(userName)));
|
||||||
@ -69,7 +71,6 @@ class AuditActionTest extends BaseTest
|
|||||||
/////////////////////////////////////
|
/////////////////////////////////////
|
||||||
// make sure things can be fetched //
|
// make sure things can be fetched //
|
||||||
/////////////////////////////////////
|
/////////////////////////////////////
|
||||||
GeneralProcessUtils.getRecordByFieldOrElseThrow("auditTable", "name", TestUtils.TABLE_NAME_PERSON_MEMORY);
|
|
||||||
GeneralProcessUtils.getRecordByFieldOrElseThrow("auditUser", "name", userName);
|
GeneralProcessUtils.getRecordByFieldOrElseThrow("auditUser", "name", userName);
|
||||||
QRecord auditRecord = GeneralProcessUtils.getRecordByFieldOrElseThrow("audit", "recordId", recordId);
|
QRecord auditRecord = GeneralProcessUtils.getRecordByFieldOrElseThrow("audit", "recordId", recordId);
|
||||||
assertEquals("Test Audit", auditRecord.getValueString("message"));
|
assertEquals("Test Audit", auditRecord.getValueString("message"));
|
||||||
@ -85,6 +86,7 @@ class AuditActionTest extends BaseTest
|
|||||||
{
|
{
|
||||||
QInstance qInstance = TestUtils.defineInstance();
|
QInstance qInstance = TestUtils.defineInstance();
|
||||||
new AuditsMetaDataProvider().defineAll(qInstance, TestUtils.MEMORY_BACKEND_NAME, null);
|
new AuditsMetaDataProvider().defineAll(qInstance, TestUtils.MEMORY_BACKEND_NAME, null);
|
||||||
|
new QQQTablesMetaDataProvider().defineAll(qInstance, TestUtils.MEMORY_BACKEND_NAME, TestUtils.MEMORY_BACKEND_NAME, null);
|
||||||
|
|
||||||
String userName = "John Doe";
|
String userName = "John Doe";
|
||||||
QContext.init(qInstance, new QSession().withUser(new QUser().withFullName(userName)));
|
QContext.init(qInstance, new QSession().withUser(new QUser().withFullName(userName)));
|
||||||
@ -123,6 +125,7 @@ class AuditActionTest extends BaseTest
|
|||||||
{
|
{
|
||||||
QInstance qInstance = TestUtils.defineInstance();
|
QInstance qInstance = TestUtils.defineInstance();
|
||||||
new AuditsMetaDataProvider().defineAll(qInstance, TestUtils.MEMORY_BACKEND_NAME, null);
|
new AuditsMetaDataProvider().defineAll(qInstance, TestUtils.MEMORY_BACKEND_NAME, null);
|
||||||
|
new QQQTablesMetaDataProvider().defineAll(qInstance, TestUtils.MEMORY_BACKEND_NAME, TestUtils.MEMORY_BACKEND_NAME, null);
|
||||||
|
|
||||||
String userName = "John Doe";
|
String userName = "John Doe";
|
||||||
QContext.init(qInstance, new QSession().withUser(new QUser().withFullName(userName)));
|
QContext.init(qInstance, new QSession().withUser(new QUser().withFullName(userName)));
|
||||||
@ -137,7 +140,6 @@ class AuditActionTest extends BaseTest
|
|||||||
/////////////////////////////////////
|
/////////////////////////////////////
|
||||||
// make sure things can be fetched //
|
// make sure things can be fetched //
|
||||||
/////////////////////////////////////
|
/////////////////////////////////////
|
||||||
GeneralProcessUtils.getRecordByFieldOrElseThrow("auditTable", "name", TestUtils.TABLE_NAME_PERSON_MEMORY);
|
|
||||||
GeneralProcessUtils.getRecordByFieldOrElseThrow("auditUser", "name", userName);
|
GeneralProcessUtils.getRecordByFieldOrElseThrow("auditUser", "name", userName);
|
||||||
QRecord auditRecord = GeneralProcessUtils.getRecordByFieldOrElseThrow("audit", "recordId", recordId1);
|
QRecord auditRecord = GeneralProcessUtils.getRecordByFieldOrElseThrow("audit", "recordId", recordId1);
|
||||||
assertEquals("Test Audit", auditRecord.getValueString("message"));
|
assertEquals("Test Audit", auditRecord.getValueString("message"));
|
||||||
@ -157,6 +159,7 @@ class AuditActionTest extends BaseTest
|
|||||||
{
|
{
|
||||||
QInstance qInstance = TestUtils.defineInstance();
|
QInstance qInstance = TestUtils.defineInstance();
|
||||||
new AuditsMetaDataProvider().defineAll(qInstance, TestUtils.MEMORY_BACKEND_NAME, null);
|
new AuditsMetaDataProvider().defineAll(qInstance, TestUtils.MEMORY_BACKEND_NAME, null);
|
||||||
|
new QQQTablesMetaDataProvider().defineAll(qInstance, TestUtils.MEMORY_BACKEND_NAME, TestUtils.MEMORY_BACKEND_NAME, null);
|
||||||
|
|
||||||
String userName = "John Doe";
|
String userName = "John Doe";
|
||||||
QContext.init(qInstance, new QSession().withUser(new QUser().withFullName(userName)));
|
QContext.init(qInstance, new QSession().withUser(new QUser().withFullName(userName)));
|
||||||
@ -173,7 +176,6 @@ class AuditActionTest extends BaseTest
|
|||||||
/////////////////////////////////////
|
/////////////////////////////////////
|
||||||
// make sure things can be fetched //
|
// make sure things can be fetched //
|
||||||
/////////////////////////////////////
|
/////////////////////////////////////
|
||||||
GeneralProcessUtils.getRecordByFieldOrElseThrow("auditTable", "name", TestUtils.TABLE_NAME_PERSON_MEMORY);
|
|
||||||
GeneralProcessUtils.getRecordByFieldOrElseThrow("auditUser", "name", userName);
|
GeneralProcessUtils.getRecordByFieldOrElseThrow("auditUser", "name", userName);
|
||||||
QRecord auditRecord = GeneralProcessUtils.getRecordByFieldOrElseThrow("audit", "recordId", recordId1);
|
QRecord auditRecord = GeneralProcessUtils.getRecordByFieldOrElseThrow("audit", "recordId", recordId1);
|
||||||
assertEquals("Test Audit", auditRecord.getValueString("message"));
|
assertEquals("Test Audit", auditRecord.getValueString("message"));
|
||||||
|
Reference in New Issue
Block a user